首页 > 解决方案 > 不能在字段值中使用 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

它编译并且不会产生错误,任何解释为什么会这样?

标签: gotypes

解决方案


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

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

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

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

推荐阅读