[Go] 在編譯時期檢查是否有正確實作介面
在 Golang 的世界裡,實作介面是隱含式的,意思是說我實做一個介面的時候,並不會在該 type 上宣告我有實作哪一個介面,在這情況下,我要怎麼確保有正確實作該介面的方法呢?
其實我們可以用下面的語法檢查在編譯時期是否可以正常編譯。 線上範例: https://play.golang.org/p/Dmve5CBompA
- go
1 | package main |
我的 user 沒有實作 myinterface,所以因為這行 var _ myinterface = (*user)(nil)
的關係,他在編譯的時候就會跳出下列的錯誤。
var _ myinterface = (*user)(nil)
是什麼意思呢? 根據 Compile time checks to ensure your type satisfies an interface 的說法
Essentially you are casting
nil
to a type of pointer toMyType
. It’s a zero-memory way to represent a pointer to your struct in Go.
這是說,我用 nil 轉型成 *user type,並且轉型後用 myinterface 的型別來接,用這樣的方式就可以在編譯時期確保介面有被正確實作。
其他補充,我們也可以用 Type assertions 來判斷是否可以轉型成該介面。
延伸閱讀
[How can I guarantee my type satisfies an interface?]
[Compile time checks to ensure your type satisfies an interface]