Go_笔试题记录-指针与值类型实现接口的区别
生活随笔
收集整理的這篇文章主要介紹了
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_笔试题记录-指针与值类型实现接口的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到皮皮虾预示着什么
- 下一篇: 频繁梦到前男友是什么意思