要注意第三库的版本,在自己模块中引入第三方库的模块,写go.mod文件
go mod init 模块名字生成go.mod文件
需要写上 require 第三库 版本
之后进入引入第三库的模块的目录,进入cmd窗口,进行go mod tidy 命令,生成go.sum文件。
下面是引入第三库protobuf的例子
第一步,安转protobuf,链接https://github.com/protocolbuffers/protobuf/releases
第二步,生成将proto文件转化成go文件的程序protoc-gen-go.exe
1.命令 go get google.golang.org/protobuf
注意 环境 GO111MODULE=on
go env查看,不是的话go env -w GO111MODULE=on 修改
2.进入该目录下的cmd下的protoc-gen-go,进入cmd,进行go install 命令编译
之后编译生成protoc-gen-go.exe程序,自动放在GOBIN目录下。
至此protobuf环境已经准备结束。
第三,编写proto文件
syntax = "proto3";
option go_package="./;pb";
message Person {
string name = 1;
int32 age = 2;
repeated string emails = 3;
repeated PhoneNumber phones = 4;
}
message PhoneNumber {
string number = 1;
PhoneType type = 2;
}
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
第四步 进入该文件所在目录,输入protoc --go_out=. *.proto,生成对应go文件
第五步,go.mod文件输入所需第三库的名字、版本
第六步,生成该模块main文件的 go.mod 文件 命令 go mod init 模块名字
main.go
package main
import (
"fmt"
"pb"
"google.golang.org/protobuf/proto"
)
func main() {
person := &pb.Person{
Name: "cc",
Age: 88,
Emails: []string{"1@qq.com", "2@163.com"},
Phones: []*pb.PhoneNumber{
&pb.PhoneNumber{
Number: "1",
Type: pb.PhoneType_HOME,
},
&pb.PhoneNumber{
Number: "2",
Type: pb.PhoneType_MOBILE,
},
&pb.PhoneNumber{
Number: "3",
Type: pb.PhoneType_WORK,
},
},
}
//marshal: obj---[]byte
data, err := proto.Marshal(person)
if err != nil {
fmt.Println(err)
}
//unmarshal : []byte---obj
newPersonObj := &pb.Person{}
err = proto.Unmarshal(data, newPersonObj)
if err != nil {
fmt.Println(err)
}
fmt.Println(newPersonObj)
}
第六步,在main.go所在主目录下 输入命令go mod tidy,生成 go.sum
第七步,运行项目即可