Go 1.18 中的 Any 是什么?
大家好,我是 polarisxu。
Go 1.18 因?yàn)榉盒鸵?any,這實(shí)際上是 interface{} 的別名:
- type any = interface{}
以下代碼雖然不是泛型,但用 Go 1.18 可以正常運(yùn)行,證明 any 和 interface{} 是一樣的:(這里可以在線運(yùn)行:https://gotipplay.golang.org/p/dPeNhe-7nkA)
- package main
- import (
- "fmt"
- )
- // 這里的 any 并非泛型的約束,而是類(lèi)型
- func test(x any) any {
- return x
- }
- func main() {
- fmt.Println(test("a"))
- }
泛型中,any 換為 interface{} 也可以:(這里可以在線運(yùn)行:https://gotipplay.golang.org/p/wKL3rKuldQX)
- package main
- import (
- "fmt"
- )
- // 注意其中的 T interface{},正常應(yīng)該使用 T any
- func Print[T interface{}](s ...T) {
- for _, v := range s {
- fmt.Print(v)
- }
- }
- func main() {
- Print("Hello, ", "playground\n")
- }
你也可以本地使用 tip 運(yùn)行驗(yàn)證下。
可見(jiàn),之所以引入 any 關(guān)鍵字,主要是讓泛型修飾時(shí)短一點(diǎn),少一些括號(hào)。any 比 interface{} 會(huì)更清爽~
此外,項(xiàng)目中如果想要做替換,可以通過(guò) gofmt 將 interface{} 改為 any:
- gofmt -w -r 'interface{} -> any' ./...