Go程式的interface(介面/接口)除了定義型態的行為,本身也是一種型態。而空介面則代表任意型態。
空介面(empty interface)為無任何方法的介面,又所有型態都有實作無方法的空介面,所以空介面代表任意型態的值或變數,通常用在接收未知型態的參數。
空間介面的宣告方式如下。
interface{}
例如下面的變數i
的型態為empty interface,所以可以接收任意型態的值。
package main
import "fmt"
type Employee struct {
Id int
Name string
}
func printValueAndType(i interface{}) { // take empty interface as parameter
fmt.Printf("value=%v, type=%T\n", i, i)
}
func main() {
var i interface{} // declare var as empty interface type
i = "abc"
printValueAndType(i) // value=abc, type=string
i = 123
printValueAndType(i) // value=123, type=int
i = Employee{1, "John"}
printValueAndType(i) // value={1 John}, type=main.Employee
}
Empty interace可乘載任意型態的特性有點類似Java的Object
。
Go 1.18加入的泛型(generics)新增了一個關鍵字any
作為空介面interface{}
的別名,所以之後改用any
即可。
m := make(map[int]any)
m["a"] = 1
m["b"] = "blue"
沒有留言:
張貼留言