我有一个main.go
文件,该文件使用pkg/models
中的原始文件来封送和解封这样的原始结构:
// Convert to string
protoStr := proto.MarshalTextString(proto)
// Unmarshal string back to proto struct
var proto2 models.Stuff
err := proto.UnmarshalText(protoStr, &proto2)
设置在这里:https://github.com/chuyval/qqs/tree/master/q2
该项目包含一个供应商目录,该目录仅签出了github.com/golang/protobuf
回购。 (如果不存在,请运行glide install
创建供应商)
从项目内部运行main.go
时,go run main.go
程序运行正常。
当我将main.go
文件上移到上一级目录,并在上一级运行同一命令go run main.go
时,它报告以下错误:
line 2: unknown field name "value_list" in models.Stuff
当我在项目目录中删除供应商目录,并在父级级别运行go run main.go
时,没有任何错误。
为什么在项目存储库中有供应商目录会使它出错?
要注意的另一件事是,如果我在从属存储库中运行相同的main.go
应用程序,则每次运行(无论有没有供应商存储库)都可以正常工作。
示例代码:
package main
import (
"github.com/chuyval/qqs/q2/pkg/models"
"github.com/golang/protobuf/proto"
"log"
)
func main () {
stuff := createProtoStuff()
log.Printf("Stuff: %+v", stuff)
// Convert to string
stuffStr := proto.MarshalTextString(stuff)
// Unmarshal string back to proto struct
var stuff2 models.Stuff
err := proto.UnmarshalText(stuffStr, &stuff2)
if err != nil {
log.Printf("It didnt work. Error: %s", err.Error())
} else {
log.Printf("It worked. Proto: %+v", stuff2)
}
}
func createProtoStuff() *models.Stuff {
someValueList := []*models.SomeValue{&models.SomeValue{Id: "Some Value ID"}}
valueList := &models.SomeValueList{SomeValue: someValueList}
stuffValueList := &models.Stuff_ValueList{
ValueList: valueList,
}
stuff := &models.Stuff{
Id: "Stuff List Id",
Stuff: stuffValueList,
}
return stuff
}
软件版本
glide version 0.13.1
go version go1.10.3 darwin/amd64
protoc version libprotoc 3.6.0