go - 无法在字段值中使用 1(int 类型)作为 *int 类型

标签 go types

为什么会产生错误?除了 with 指针之外,它与 int 相同。

type Gim struct { Active: *int }
yesVar := Gim{ Active: 1}
// error
// Cannot use 1 (type int) as type *int in field value

虽然当我这样使用它时

type Gim struct { Active: *int }
active := 1 
yesVar := Gim{ Active: &active}
// compiles

它编译并且不会产生错误,有什么解释吗?

最佳答案

在第二个示例中,您将整数指针 (*int) 分配给相同类型的字段 (*int)。但是,在第一个中,您将 int 分配给 *int。这是不匹配的,你不能这样做,因为这两种类型不一样。 int 是保存整数值的类型(例如 0100-55 ...), *int 是一种将地址保存到内存中int值的类型(例如地址0x00124215,... )。因此,您可以看到两者实际上并不代表相同的类型。

如果您仍想在一行中完成此操作,则必须定义一个接受值并返回指针的函数:

func GetIntPointer(value int) *int {
    return &value
}

yesVar := Gim{ Active: GetIntPointer(1)}

关于go - 无法在字段值中使用 1(int 类型)作为 *int 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64655943/

相关文章:

security - Golang 删除权限 (v1.7)

haskell - Haskell 中的类型和类型变量

mysql - 如何在 MySQL 数据库中存储精确的十进制坐标

c++ - 将非指针分配给指针? (在 C++ 中子类化指针类型?)

go - 是否有可能在 Golang 中有一个返回 Integer 或 Float 的函数?

golang 谷歌存储复制错误

image - 使用 Go WebAssembly 访问 ImageData.data

string - 如何在 Go 中将 int 值转换为字符串?

一般处理枚举的 Scala 类

c# - 接口(interface)可以需要一个属性,但不指定所需的类型吗?