go - 不能在字段值中使用 1(类型 int)作为类型 *int
问题描述
为什么这会产生错误?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
to *int
。这是不匹配的,你不能这样做,因为这两种类型不一样。
int
是一种保存整数值的类型(例如0
, 100
, -55
, ...),并且*int
是一种将地址保存到int
内存中值的类型(例如 address 0x00124215
,...)。因此,您可以看到两者实际上并不代表相同的类型。
如果您仍想在一行中执行此操作,则必须定义一个接受值并返回指针的函数:
func GetIntPointer(value int) *int {
return &value
}
yesVar := Gim{ Active: GetIntPointer(1)}
推荐阅读
- javascript - Django rest框架:自定义分页下一个/上一个链接
- phoenix-framework - Phoenix 似乎正在按字母顺序重新排序参数和模式匹配 - 这是正常的吗?
- python - 使用 Flask 测试脚本
- javascript - getElementsByTagName undefined return - 这是一个错误吗?
- swift - 获取“符合“LosslessStringConvertible”错误
- c# - 获得一个跨度
在结构上而不复制结构 - angular - 为什么从服务器请求的承诺数据未定义?
- python - 我有一个带有日期列的单行数据框。如何添加 10 行,每行每次将日期更改 14 天?
- javascript - jQuery AJAX JSONP 返回 400 错误请求
- rest - 使用类型嵌入访问特定字段?