如何将ErrorCode(int32)绑定到proto数据的变量(* ErrorCode)

时间:2016-07-16 05:34:32

标签: go

有我的代码:

file1.go:
type ErrorCode Int32
var result ErrorCode

file2.pb.go:
type CollectionGC struct {
    Result           *ErrorCode        `protobuf:"varint,1,opt,name=result,enum=api.ErrorCode" json:"result,omitempty"`
    XXX_unrecognized []byte            `json:"-"`
} 
messageGC := &CollectionGC {
    Result: result,      // a error occurs
}

这给出了:

Invalid assignment from  result(ErrorCode) to Result(*ErrorCode), and fun CollectionGC.SetResult(value int32) is nonexisted in file2.pb.go. 

如何避免此错误?

1 个答案:

答案 0 :(得分:1)

作为第一个测试,如果Result(*ErrorCode)期望指针作为其参数,您至少可以给它一个:

Result: &result
        ^      
        - pointer to result

正如“Golang - Asterisk and Ampersand Cheatsheet”(Joseph Spurrier)总结:

p := Person{"Hillary", 28}  stores the value
p := &Person{"Hillary", 28}     stores the pointer address (reference)
PrintPerson(p)          passes either the value or pointer address (reference)
PrintPerson(*p)         passes the value
PrintPerson(&p)         passes the pointer address (reference)

来自piotrzurek的“Pointers in Go. Short tale of asterisk and ampersand.”:

    变量名前面的
  • &用于检索存储此变量值的地址。该地址是指针要存储的地址。

  • 在类型名称前面的
  • *意味着声明的变量将存储该类型的另一个变量的地址(不是该类型的值)。

  • 指针类型变量前面的
  • *用于检索存储在给定地址的值。在Go中,这称为解除引用。

参见 play.golang.org