嵌入类型:探索原始嵌入的有用性
使用 Go 结构体时,可能会出现嵌入原始类型的概念。考虑下面的代码片段:
type User struct { int32 Name string }
此代码定义了一个嵌入 int32 基元类型的 User 结构。然而,关于这种嵌入的实用性出现了问题:
嵌入式基元有方法吗?
没有,像 int32 这样的嵌入式基元没有任何与之关联的方法。为了验证这一点,可以使用反射来检查可用方法的数量:
fmt.Println(reflect.TypeOf(int32(0)).NumMethod())
输出将为 0,表明 int32 没有方法。
访问嵌入式原语Values
要访问 User 实例中嵌入的 int32 值,可以直接使用非限定类型name 作为字段名称:
u := User{3, "Bob"} fmt.Printf("%#v\n", u) u.int32 = 4 fmt.Println(u.int32)
输出:
main.User{int32:3, Name:"Bob"} 4
嵌入的优点
虽然嵌入原始类型可能无法提供直接访问相对于方法来说,它在处理接口和方法时确实提供了一定的优势重写。
嵌入预声明类型的缺点
嵌入 int32 等预声明类型时,需要考虑一个缺点:
以上是Go 中的嵌入式基元类型是否具有任何真正的优势?的详细内容。更多信息请关注PHP中文网其他相关文章!