網頁

2021/7/9

Golang 空介面 empty interface{}

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"


沒有留言:

張貼留言