golang 有没有 类似 typescript 的 联合类型?

type a = number | string
阅读 3.4k
5 个回答

golang.org/x/exp/constraints

例如:

import (
    "golang.org/x/exp/constraints"
)

func main() {
    constraints.Float()
    constraints.Integer()
    constraints.Signed()
    constraints.Unsigned()
    constraints.Complex()
    constraints.Ordered()
}
    

Go语言(Golang)中有类似TypeScript的联合类型(Union Types)的概念。在Go中,联合类型是指可以用多个类型表示的值,但在任何给定时间只能使用其中一个类型的值。

在Go中,联合类型可以使用空接口类型(interface{})和类型断言来实现。空接口类型可以表示任意类型的值,而类型断言允许在运行时检查值的实际类型并进行转换。

下面是一个示例,展示了如何使用联合类型:

package main

import (
 "fmt"
)

func main() {
 var value interface{}
 value = 42      // value 现在可以是 int
 fmt.Println(value)

 value = "Hello" // value 现在可以是 string
 fmt.Println(value)

 if num, ok := value.(int); ok {
 fmt.Println("value 是一个整数:", num)
 } else if str, ok := value.(string); ok {
 fmt.Println("value 是一个字符串:", str)
 } else {
 fmt.Println("value 是其他类型")
 }
}

在这个示例中,value 是一个空接口类型(interface{}),可以存储任意类型的值。我们可以通过赋值来改变 value 的类型,并且在类型断言中使用多态的方式来检查值的实际类型并进行相应的处理。

需要注意的是,联合类型并不是Go语言的原生特性,而是通过空接口和类型断言来实现的。这意味着在使用联合类型时,需要显式地进行类型检查和转换,以避免运行时错误。

Go对一个变量,不存在可以指定多种类型的语法。你可以用空接口加类型断言,或是设计包含多个类型和字段的结构体实现。空接口加断言其实就是回到动态语言的玩法了,通常除非是框架底层否则没人这样用。用结构体写多个字段这种比较常见。

推荐问题
logo
Microsoft
子站问答
访问
宣传栏