欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Go_笔试题记录-指针与值类型实现接口的区别

发布时间:2023/11/29 编程问答 56 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Go_笔试题记录-指针与值类型实现接口的区别 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

1、如果Add函数的调用代码为:

func main() {var a Integer = 1var b Integer = 2var i interface{} = &asum := i.(*Integer).Add(b)fmt.Println(sum) }

则Add函数定义正确的是()

A.type Integer int func (a Integer) Add(b Integer) Integer {return a + b }B. type Integer int func (a Integer) Add(b *Integer) Integer {return a + *b }C. type Integer int func (a *Integer) Add(b Integer) Integer {return *a + b }D. type Integer int func (a *Integer) Add(b *Integer) Integer {return *a + *b }

参考答案:AC

2、如果Add函数的调用代码为:

func main() {var a Integer = 1var b Integer = 2var i interface{} = asum := i.(Integer).Add(b)fmt.Println(sum) }

则Add函数定义正确的是()

A.type Integer int func (a Integer) Add(b Integer) Integer {return a + b }B. type Integer int func (a Integer) Add(b *Integer) Integer {return a + *b }C. type Integer int func (a *Integer) Add(b Integer) Integer {return *a + b }D. type Integer int func (a *Integer) Add(b *Integer) Integer {return *a + *b }

参考答案:A

3、关于GetPodAction定义,下面赋值正确的是()

type Fragment interface {Exec(transInfo *TransInfo) error } type GetPodAction struct { } func (g GetPodAction) Exec(transInfo *TransInfo) error {...return nil }A. var fragment Fragment = new(GetPodAction) B. var fragment Fragment = GetPodAction C. var fragment Fragment = &GetPodAction{} D. var fragment Fragment = GetPodAction{}

参考答案:ACD

考察知识点

指针与值类型实现接口的区别

package mainimport ("fmt" )type People interface {ReturnName() string }type Student struct {Name string }type Teacher struct {Name string }func (s Student) ReturnName() string {return s.Name }func (t *Teacher) ReturnName() string {return t.Name }func main() {cbs := Student{Name: "咖啡色的羊驼"}sss := Teacher{Name: "咖啡色的羊驼的老师"}// 值类型var a Peoplea = cbsname := a.ReturnName()fmt.Println(name)// 指针类型//a = sss // <- 这样写不行!!!a = &sss // 由于是指针类型,所以赋值的时候需要加上&name = a.ReturnName()fmt.Println(name) // 输出"咖啡色的羊驼的老师" }

“a = sss”这样写会发生报错:

cannot use sss (type Teacher) as type People in assignment: Teacher does not implement People (ReturnName method has pointer receiver)

因为是Teacher的指针实现了ReturnName方法,Teacher本身没实现。

总结:

1.当是指针类型,它的方法可以是指针接收者,或者是值接收者
2.当是值类型,它的方法只能是值接收者

转载于:https://www.cnblogs.com/Paul-watermelon/p/11209603.html

总结

以上是生活随笔为你收集整理的Go_笔试题记录-指针与值类型实现接口的区别的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。