Golang 78 語法篇 - method set

method set, interface, auto deference or reference 當這些語法綜合再一起使用時,很容易混淆,甚至寫出 bug code,這章我們就透過題目探討一下 method set 常常被大家誤會的地方。 Golang 78 語法篇 - interface % Line 50 用到的概念就在這篇。 題目 請問以下程式輸出結果為何 type Employee struct {} func (e Employee) DoWork() { fmt.Println("do work") } func main() { (&Employee{}).DoWork() } 答案只有兩種方向: 1. 無法編譯 2. 印出 do work 這個程式可以編譯,並且還印出 do work 但是為什麼呢? ...

七月 7, 2020 · amikai

Golang 78 語法篇 - interface

Interface 可以說是 golang 的精髓之一。golang interface 特殊的語法以及概念也是工程師常常犯錯的地方。此題只是用來釐清自己的概念。 題目 請問以下程式輸出結果為何 package main import "fmt" type S struct{ val int } func (s S) F() {} type IF interface { F() } func InitType() S { var s S return s } func InitPointer() *S { var s *S return s } func InitEfaceType() interface{} { var s S return s } func InitEfacePointer() interface{} { var s *S return s } func InitIfaceType() IF { var s S return s } func InitIfacePointer() IF { var s *S return s } func main() { // fmt.Println(InitType() == nil) // type mismatch fmt.Println(InitPointer() == nil) fmt.Println(InitEfaceType() == nil) fmt.Println(InitEfacePointer() == nil) fmt.Println(InitIfaceType() == nil) fmt.Println(InitIfacePointer() == nil) } ...

七月 3, 2020 · amikai