概述
文章目录
- 前言
- 嵌套 message
- 枚举
- map类型
- 内置的时间类型
- 数组
前言
常见的基本类型就不讲了
嵌套 message
通常我们使用的都是单层message,多层的message要通过"."拼接(如:A.B)
多层使用时使用“_”拼接(如:A_B)
多层嵌套的好处在哪里呢?我认为,我明确的知道B是属于A的。除了A其它的不应该去使用它
//定义
syntax = "proto3";
option go_package = "Study/Seven/D;Dbp";
message A {
message B {
string data = 1;
}
}
service http {
rpc ping(A.B) returns (A.B);
}
//使用
package main
import (
Dbp "Study/Seven/D"
"context"
"google.golang.org/grpc"
"net"
)
type Service struct{}
func (s *Service) Ping(ctx context.Context, b *Dbp.A_B) (*Dbp.A_B, error) {
//TODO implement me
panic("implement me")
}
func main() {
server := grpc.NewServer()
Dbp.RegisterHttpServer(server, &Service{})
listen, _ := net.Listen("tpc", ":8083")
server.Serve(listen)
}
枚举
第一个值必须是0开始,只支持int,从生成的代码中看到生成的类型是int32
//定义
syntax = "proto3";
option go_package = "Study/Seven/D;Dbp";
enum A {
v1 = 0;
V2 = 1;
v3 = 4;
}
//使用
package main
import (
Dbp "Study/Seven/D"
"fmt"
)
func main() {
fmt.Println(Dbp.A_v1)
}
map类型
定义中使用map<type,type> 生成的代码对应 map[type]type
map<string,string> 对应 map[string]string
//定义
syntax = "proto3";
option go_package = "Study/Seven/D;Dbp";
message Request {
map<string, string> data = 1;
}
//使用
package main
import (
Dbp "Study/Seven/D"
"fmt"
)
func main() {
req := Dbp.Request{
Data: map[string]string{
"a": "b",
},
}
fmt.Println(req.Data)
}
内置的时间类型
定义: import "google/protobuf/timestamp.proto"后再定义
使用: import google.golang.org/protobuf/types/known/timestamppb
内置的时间类型是在time.TIME上进行封装的,能够相互转换,非常方便
//定义
syntax = "proto3";
import "google/protobuf/timestamp.proto";
option go_package = "Study/Seven/D;Dbp";
message Request {
google.protobuf.Timestamp Current = 1;
}
//使用
package main
import (
Dbp "Study/Seven/D"
"fmt"
"google.golang.org/protobuf/types/known/timestamppb"
"time"
)
func main() {
req := Dbp.Request{
Current: timestamppb.New(time.Now()),
}
fmt.Println(req.Current.AsTime().In(time.Local).Format("2006-01-02 15:04:05")) //2022-12-18 02:05:06
fmt.Println(time.Now().Format("2006-01-02 15:04:05")) //2022-12-18 02:05:06
}
数组
常规定义前加上 repeated,即代表数组
//定义
syntax = "proto3";
import "google/protobuf/timestamp.proto";
option go_package = "Study/Seven/D;Dbp";
message Request {
repeated string Data = 1;
}
//使用
package main
import (
Dbp "Study/Seven/D"
"fmt"
)
func main() {
request := Dbp.Request{
Data: []string{"a", "b", "c"},
}
fmt.Println(request.Data) //[a b c]
}
最后
以上就是称心高跟鞋为你收集整理的Golang proto 类型的全部内容,希望文章能够帮你解决Golang proto 类型所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复