营销网站建设实训总结,建设工程信息查询哪个网站好,广州做网站app,网站挂标 怎么做概述
如果您没有Golang的基础#xff0c;应该学习如下前置课程。
Golang零基础入门Golang面向对象编程Go Web 基础Go语言开发REST API接口_20240728Go语言操作MySQL开发用户管理系统API教程_20240729Redis零基础快速入门_20231227GoRedis开发用户管理系统API实战_20240730Mo…概述
如果您没有Golang的基础应该学习如下前置课程。
Golang零基础入门Golang面向对象编程Go Web 基础Go语言开发REST API接口_20240728Go语言操作MySQL开发用户管理系统API教程_20240729Redis零基础快速入门_20231227GoRedis开发用户管理系统API实战_20240730MongoDB快速入门_20240411Go语言MongoDB用户管理系统实战_20240730
基础不好的同学每节课的代码最好配合视频进行阅读和学习如果基础比较扎实则阅读本教程巩固一下相关知识点即可遇到不会的知识点再看视频。
课程特色
本教程录制于2024年7月31日使用Go1.22版本基于Goland2024进行开发采用的技术栈比较新。
每节课控制在十分钟以内课时精简每节课都是一个独立的知识点如果有遗忘完全可以当做字典来查询绝不浪费大家的时间。
整个课程从如何搭建Go语言gRPC环境讲起然后如何创建proto文件如何实现基本的gRPC为辅如何开发增删改查的用户微服务层层递进学习路径平缓。
Golang是当前国内越来越多的企业正在全面转的一门系统级别的高性能的编程语言比C语言写法更加的简单比Python性能更加的好是新时代的C语言建议每个程序员都掌握
视频课程
最近发现越来越多的公司在用Golang了所以精心整理了一套视频教程给大家这个是其中的第10部后续还会有很多。
视频已经录制完成完整目录截图如下
本套课程的特色是每节课都是一个核心知识点每个视频控制在十分钟左右精简不废话拒绝浪费大家的时间。
课程目录
01 概述02 搭建Go语言gRPC微服务开发环境03 下载go-grpc官方的示例代码04 编写简单的proto文件05 根据proto文件自动生成Go代码06 创建grpc的服务端07 创建grpc的客户端08 定义用户微服务的proto文件09 生成用户微服务的go代码10 开发用户微服务服务端基本代码11 开发用户微服务客户端的基本代码12 创建用户表13 连接到MySQL数据库14 实现新增用户的微服务方法并测试15 实现查询所有用户的微服务方法并测试16 实现根据ID查询用户的微服务方法并测试17 实现修改用户的微服务方法并测试18 实现删除用户的微服务方法并测试19 总结
完整代码
04 编写简单的proto文件
syntax proto3;// go项目包的位置
option go_package grpc_demo/helloworld;// 包名
package helloworld;// 服务微服务
service Greeter {// 方法rpc SayHello(HelloRequest) returns (HelloReply) {}
}// 请求对象
message HelloRequest{// 参数string name 1; // 1 表示的是参数在第几个位置从1开始
}// 响应对象
message HelloReply{string message 1;
}05 根据proto文件自动生成Go代码
protoc --go_out. --go_optpathssource_relative --go-grpc_out. --go-grpc_optpathssource_relative helloworld/helloworld.proto06 创建grpc的服务端
package mainimport (contextfmtgoogle.golang.org/grpcpb grpc_demo/helloworldnet
)// 服务对象
type server struct {pb.UnimplementedGreeterServer
}// SayHello 实现方法
func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {fmt.Println(接收到的名字是, in.Name)return pb.HelloReply{Message: 你好 in.Name}, nil
}func main() {// 创建监听器lis, err : net.Listen(tcp, :8080)if err ! nil {fmt.Printf(failed to listen: %v, err)return}// 构建grpc服务grpcServer : grpc.NewServer()pb.RegisterGreeterServer(grpcServer, server{})// 启动微服务err grpcServer.Serve(lis)if err ! nil {fmt.Printf(failed to serve: %v, err)}
}
07 创建grpc的客户端
package mainimport (contextfmtgoogle.golang.org/grpcgoogle.golang.org/grpc/credentials/insecurepb grpc_demo/helloworldtime
)func main() {// 创建客户端conn, err : grpc.NewClient(localhost:8080, grpc.WithTransportCredentials(insecure.NewCredentials()))if err ! nil {fmt.Println(err)return}defer conn.Close()// 创建指定微服务的客户端client : pb.NewGreeterClient(conn)// 调用微服务的方法ctx, cancelFunc : context.WithTimeout(context.Background(), 5*time.Second)defer cancelFunc()helloReply, err : client.SayHello(ctx, pb.HelloRequest{Name: 李四})if err ! nil {fmt.Println(err)return}// 处理响应fmt.Println(helloReply.GetMessage())}
08 定义用户微服务的proto文件
syntax proto3;// go项目包的位置
option go_package grpc_demo/c02_user/proto;// 包名
package proto;// 服务微服务
service UserMicroService {rpc Add(AddRequest) returns (CommonReply) {}rpc Delete(IdRequest) returns (CommonReply) {}rpc Update(UpdateRequest) returns (CommonReply) {}rpc GetByID(IdRequest) returns (CommonReply) {}rpc GetAll(EmptyRequest) returns (CommonReply) {}
}message AddRequest{string name 1;int64 age 2;
}
message UpdateRequest{int64 id 1;string name 2;int64 age 3;
}
message IdRequest{int64 id 1;
}
message EmptyRequest{
}message CommonReply{bool status 1; // 成功或者失败string message 2; // 详细信息string data 3; // 返回的数据JSON格式
}
12 创建用户表
drop table if exists user;
create table user
(id int primary key auto_increment,name varchar(36),age int
);14 实现新增用户的微服务方法并测试
这里是微服务服务端的完整代码后续的只是客户端测试代码。
服务端代码
package mainimport (contextdatabase/sqlencoding/jsonfmtgithub.com/zhangdapeng520/zdpgo_mcrud_ github.com/zhangdapeng520/zdpgo_mysqlgoogle.golang.org/grpcpb grpc_demo/c02_user/protonetstrconv
)var (db *sql.DBerr error
)func initMySQL() {dbUrl : root:roottcp(127.0.0.1:3306)/testdb, err sql.Open(mysql, dbUrl)if err ! nil {fmt.Println(err)return}
}func closeMySQL() {db.Close()
}type User struct {Id int64 json:idName string json:nameAge int json:age
}// 服务对象
type server struct {pb.UnimplementedUserMicroServiceServer
}func (s *server) Add(ctx context.Context, in *pb.AddRequest) (*pb.CommonReply, error) {fmt.Println(接收到的名字是, in.Name, in.Age)zdpgo_mcrud.Add(db,user,[]string{name, age},[]interface{}{in.Name, in.Age},)result : pb.CommonReply{Status: true,Message: success,}return result, nil
}func (s *server) GetAll(ctx context.Context, in *pb.EmptyRequest) (*pb.CommonReply, error) {data, _ : zdpgo_mcrud.GetBy(db,user,[]string{id, name, age},nil,)jsonData, _ : json.Marshal(data)result : pb.CommonReply{Status: true,Message: success,Data: string(jsonData),}return result, nil
}func (s *server) GetByID(ctx context.Context, in *pb.IdRequest) (*pb.CommonReply, error) {data, _ : zdpgo_mcrud.GetBy(db,user,[]string{id, name, age},map[string]interface{}{id: in.Id},)jsonData, _ : json.Marshal(data)result : pb.CommonReply{Status: true,Message: success,Data: string(jsonData),}return result, nil
}func (s *server) Update(ctx context.Context, in *pb.UpdateRequest) (*pb.CommonReply, error) {zdpgo_mcrud.Update(db,user,strconv.FormatInt(in.Id, 10),[]string{name, age},[]interface{}{in.Name, in.Age},)result : pb.CommonReply{Status: true,Message: success,}return result, nil
}func (s *server) Delete(ctx context.Context, in *pb.IdRequest) (*pb.CommonReply, error) {zdpgo_mcrud.Delete(db,user,strconv.FormatInt(in.Id, 10),)result : pb.CommonReply{Status: true,Message: success,}return result, nil
}func main() {initMySQL()defer closeMySQL()// 创建监听器lis, err : net.Listen(tcp, :8080)if err ! nil {fmt.Printf(failed to listen: %v, err)return}// 构建grpc服务grpcServer : grpc.NewServer()pb.RegisterUserMicroServiceServer(grpcServer, server{})// 启动微服务err grpcServer.Serve(lis)if err ! nil {fmt.Printf(failed to serve: %v, err)}
}
客户端代码
package mainimport (contextfmtgoogle.golang.org/grpcgoogle.golang.org/grpc/credentials/insecurepb grpc_demo/c02_user/prototime
)func main() {// 创建客户端conn, err : grpc.NewClient(localhost:8080, grpc.WithTransportCredentials(insecure.NewCredentials()))if err ! nil {fmt.Println(err)return}defer conn.Close()// 创建指定微服务的客户端client : pb.NewUserMicroServiceClient(conn)// 调用微服务的方法ctx, cancelFunc : context.WithTimeout(context.Background(), 5*time.Second)defer cancelFunc()commonReply, err : client.Add(ctx, pb.AddRequest{Name: 张三, Age: 23})if err ! nil {fmt.Println(err)return}// 处理响应fmt.Println(commonReply.GetStatus())fmt.Println(commonReply.GetMessage())
}
15 实现查询所有用户的微服务方法并测试
服务端代码看地14节课的。
客户端代码
package mainimport (contextfmtgoogle.golang.org/grpcgoogle.golang.org/grpc/credentials/insecurepb grpc_demo/c02_user/prototime
)func main() {// 创建客户端conn, err : grpc.NewClient(localhost:8080, grpc.WithTransportCredentials(insecure.NewCredentials()))if err ! nil {fmt.Println(err)return}defer conn.Close()// 创建指定微服务的客户端client : pb.NewUserMicroServiceClient(conn)// 调用微服务的方法ctx, cancelFunc : context.WithTimeout(context.Background(), 5*time.Second)defer cancelFunc()commonReply, err : client.GetAll(ctx, pb.EmptyRequest{})if err ! nil {fmt.Println(err)return}// 处理响应fmt.Println(commonReply.GetStatus())fmt.Println(commonReply.GetMessage())fmt.Println(commonReply.GetData())
}
16 实现根据ID查询用户的微服务方法并测试
服务端代码看地14节课的。
客户端代码
package mainimport (contextfmtgoogle.golang.org/grpcgoogle.golang.org/grpc/credentials/insecurepb grpc_demo/c02_user/prototime
)func main() {// 创建客户端conn, err : grpc.NewClient(localhost:8080, grpc.WithTransportCredentials(insecure.NewCredentials()))if err ! nil {fmt.Println(err)return}defer conn.Close()// 创建指定微服务的客户端client : pb.NewUserMicroServiceClient(conn)// 调用微服务的方法ctx, cancelFunc : context.WithTimeout(context.Background(), 5*time.Second)defer cancelFunc()commonReply, err : client.GetByID(ctx, pb.IdRequest{Id: 1})if err ! nil {fmt.Println(err)return}// 处理响应fmt.Println(commonReply.GetStatus())fmt.Println(commonReply.GetMessage())fmt.Println(commonReply.GetData())
}
17 实现修改用户的微服务方法并测试
服务端代码看地14节课的。
客户端代码
package mainimport (contextfmtgoogle.golang.org/grpcgoogle.golang.org/grpc/credentials/insecurepb grpc_demo/c02_user/prototime
)func main() {// 创建客户端conn, err : grpc.NewClient(localhost:8080, grpc.WithTransportCredentials(insecure.NewCredentials()))if err ! nil {fmt.Println(err)return}defer conn.Close()// 创建指定微服务的客户端client : pb.NewUserMicroServiceClient(conn)// 调用微服务的方法ctx, cancelFunc : context.WithTimeout(context.Background(), 5*time.Second)defer cancelFunc()commonReply, err : client.Update(ctx, pb.UpdateRequest{Id: 1,Name: 李四333,Age: 24,})if err ! nil {fmt.Println(err)return}// 处理响应fmt.Println(commonReply.GetStatus())fmt.Println(commonReply.GetMessage())
}
18 实现删除用户的微服务方法并测试
服务端代码看地14节课的。
客户端代码
package mainimport (contextfmtgoogle.golang.org/grpcgoogle.golang.org/grpc/credentials/insecurepb grpc_demo/c02_user/prototime
)func main() {// 创建客户端conn, err : grpc.NewClient(localhost:8080, grpc.WithTransportCredentials(insecure.NewCredentials()))if err ! nil {fmt.Println(err)return}defer conn.Close()// 创建指定微服务的客户端client : pb.NewUserMicroServiceClient(conn)// 调用微服务的方法ctx, cancelFunc : context.WithTimeout(context.Background(), 5*time.Second)defer cancelFunc()commonReply, err : client.Delete(ctx, pb.IdRequest{Id: 1})if err ! nil {fmt.Println(err)return}// 处理响应fmt.Println(commonReply.GetStatus())fmt.Println(commonReply.GetMessage())
}
总结
整个课程从如何搭建Go语言gRPC环境讲起然后如何创建proto文件如何实现基本的gRPC为辅如何开发增删改查的用户微服务层层递进学习路径平缓。
通过本套课程能帮你入门Go语言通过gRPC开发微服务项目的技术。
如果您需要完整的源码打赏20元即可。
人生苦短我用PyGo我是您身边的Python私教~