Go 是否有一种快捷方式可以将变量分配给指针,而无需先在单独的行中创建变量?

Go 是否有一种快捷方式可以将变量分配给指针,而无需先在单独的行中创建变量?,go,Go,如果我有这样一个结构: type Message struct { Id int64 Message string ReplyTo *int64 } var m Message m.Id = 1 m.Message = "foo bar yo" var replyTo = int64(64) m.ReplyTo = &replyTo 然后,如果我确实创建了一个这样的结构实例: type Message struct { Id in

如果我有这样一个结构:

type Message struct {
    Id      int64
    Message string
    ReplyTo *int64
}
var m Message
m.Id = 1
m.Message = "foo bar yo"

var replyTo = int64(64)
m.ReplyTo = &replyTo
然后,如果我确实创建了一个这样的结构实例:

type Message struct {
    Id      int64
    Message string
    ReplyTo *int64
}
var m Message
m.Id = 1
m.Message = "foo bar yo"

var replyTo = int64(64)
m.ReplyTo = &replyTo
那就行了

但我想知道最后一步是否有捷径

我试过这样做:

m.ReplyTo = &int64{64}

但它不起作用。

我认为您不能,因为该值是一个原语,尝试一次完成它(如下图所示)将是一个语法错误。它试图获取一个值的地址,因此不可能。至少我不知道一种可能的方法

someInt := &int64(10) // would not compile 
另一种选择是编写函数以返回指向原语的指针,如下所示:

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

是的,除非你已经在内存中存储了一个int,否则你不能给int指针赋值,这里不是这样(你把内存地址赋值给值,而不是值本身)。就个人而言,我认为不应该在结构中使用指针。除非您的实际程序与您的示例有很大的不同,否则没有理由这样做。这对应用程序性能也不好。在您给出的示例中,存储这些值所需的内存增加了一倍,一个单词表示int,另一个单词表示将地址存储为结构上的值。我必须对MySQL和NULL值执行此操作。虽然sql.NullInt64可以工作,但我不确定它是否与sqlx库一起工作,在sqlx库中,您可以只获取一个struct并为准备好的语句传递它的ass参数。哦,是的,这很有意义。这是当您试图直接实例化类型时,对吗?例如,当您将一行解组到类型为
Message
的实例中时,该值设置正确,对吗?这是重复的。(懒得去查原件)。别忘了
new(int)
@JimB,但我认为不可能给它赋值。这仍然是一个两步过程,类似于
value:=new(int)*值=10
。我想这比分配一个临时变量并获取该变量的引用要优雅一些。它确实分配了一个值,但始终是零值;)有时候,这就是确保某些东西不是零所需要的。