hhstore / blog

My Tech Blog: about Mojo / Rust / Golang / Python / Kotlin / Flutter / VueJS / Blockchain etc.
https://github.com/hhstore/blog/issues
292 stars 24 forks source link

ProtoBuf #157

Open hhstore opened 5 years ago

hhstore commented 5 years ago

related:

hhstore commented 5 years ago

protobuf:

proto mirror:

Google项目 mirror 对应
import "gogoproto/gogo.proto"; import "github.com/gogo/protobuf/gogoproto/gogo.proto";
import "google/api/annotations.proto"; import "github.com/gogo/googleapis/google/api/annotations.proto";

golang proto3 数据类型映射关系:

image

编码:

枚举类型:

map 类型:

unknowns 未知类型:

json 映射:

options:

hhstore commented 5 years ago

参考:

proto 最佳实践:

hhstore commented 5 years ago

go 代码自动生成 proto:

# 当前路径下生成:
-> % proteus -p go-common/app/service/main/dm/internal/model/subtitle  --verbose -f .

# 生成全部: 
proteus  -p go-common/app/service/main/dm/internal/model/subtitle/ -f .

# 只生成 proto:
proteus proto -p go-common/app/service/main/dm/internal/model/subtitle/ -f .
//proteus:generate
type Preference struct {
        Name string
        Value string
        Options Options
}

//proteus:generate
type Status int

const (
        Pending Status = iota
        Active
        Closed
)

package users

//proteus:generate
func GetUser(id uint64) (*User, error) {
        // impl
}

//proteus:generate
func (s *UserStore) UpdateUser(u *User) error {
        // impl
}

生成全部:

roteus -f /path/to/protos/folder \
        -p my/go/package \
        -p my/other/go/package

只生成 proto:

proteus proto -f /path/to/output/folder \
        -p my/go/package \
        -p my/other/go/package
        --verbose