go - 为什么 proto marshal 然后 unmarshal 在包含供应商目录的项目之外运行时会失败?
问题描述
我有一个main.go
文件,它使用原始文件pkg/models
到 Marshal 和 Unmarshal 一个 proto 结构,如下所示:
// 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
签出 repo 的供应商目录。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
解决方案
推荐阅读
- r - 如何按第一个数字分隔列
- java - Observable 携带一个对象还是一个对象流?
- python - 如何使用 python ebaysdk 从多变体列表中过滤项目(多个项目的列表)
- javascript - 将 puppeteer 任务集成到一个任务中
- swift - CGAffineTransform 不适用于 CGRect
- xml - XPath 相对于一个节点 - 如何选择当前节点?
- c# - 规范流抛出错误输入字符串的格式不正确
- python - 如何保护 Windows 上的 Python 多处理免受不必要的递归
- notepad++ - Notepad++ 将文本文件中的行重新格式化为命令行参数 line -k “line1” -k “line2” -k “line3”?
- python - 如何停止在 cloudwatch 中跨多个日志条目拆分单个 python 日志消息?