项目源码 博客地址

第一步,启动GRPC服务

	//启动GRPC
	grpcServer := grpc.NewServer()
    //注册一个GRPC服务
	server.RegisterServer(grpcServer)
	//注册GRPC反射服务
	reflection.Register(grpcServer)
	//以TCP协议启动GRPC
	err = grpcServer.Serve(Listen)

启动TCP服务

Listen, err := net.Listen("tcp", PORT)
	if err != nil {
		fmt.Println(err.Error())
		return
	}

第二步,在对应的服务端封装方法

func RegisterServer(s *grpc.Server) {
	bean.RegisterUserServiceServer(s, &User{})
	bean.RegisterUserfServiceServer(s, &Userf{})
}

.proto文件

syntax = "proto3"; //指定版本
option go_package = "../bean";


package bean;

service UserService{
    rpc User(UserRequest) returns (UserResponse){}
  }
   
  // 函数参数
  message  UserRequest{
    string  name = 1;
    int32 age=2;
    string sex=3;
  }
   
  // 函数返回值
  message  UserResponse{
    int32 code=1;
    string msg=2;

}

生成.pb.go&grpc.pb.go文件

protoc --go_out=./ .\文件
protoc --go-grpc_out=./ .\文件

第三步,实现第二步封装的方法

type User struct {
	*bean.UnimplementedUserServiceServer
}

func (user *User) User(ctx context.Context, in *bean.UserRequest) (*bean.UserResponse, error) {
	var res = &bean.UserResponse{
		Code: 200,
		Msg:  "success",
	}
	//执行操作
	err := professor.AddUser(in)
	//
	if err != nil {
		res.Code = 5000
		res.Msg = "服务繁忙"
		return res, nil

	}
	return res, nil
}

第四步,实现的方法调用processor(对req数据加工)方法实习数据库操作

func (user *User) User(ctx context.Context, in *bean.UserRequest) (*bean.UserResponse, error) {
	var res = &bean.UserResponse{
		Code: 200,
		Msg:  "success",
	}
	//调用processor(对req数据加工)方法实习数据库操作,返回值是error
	err := professor.AddUser(in)
	if err != nil {
		res.Code = 5000
		res.Msg = "服务繁忙"
		return res, nil

	}
	return res, nil
}

第五步,实现processor的方法

func AddUser(req *bean.UserRequest) error {
	tx, _ := dbc.Mysql.Begin()
	//数据库方法调用
	err := db.MYSQL_AddUser(req, tx)
	if err != nil {

		return err
	}
	err = db.MONGO_AddRoomLayout(req)
	if err != nil {
		return err
	}
	return nil
}

第六步,实现数据库方法

封装

func MYSQL_AddUser(req *bean.UserRequest, tx *sql.Tx) error {
	return mysql.AddUser(req, tx)
}
func MYSQL_FindUser() error {
	return mysql.FindUser()
}

实现

func AddUser(req *bean.UserRequest, tx *sql.Tx) error {
	str2 := "INSERT INTO user(name,age,sex) VALUES(?,?,?) "
	_, err := tx.Exec(str2, req.Name, req.Age, req.Sex)
	// fmt.Println("执行sql语句" + str2)
	// fmt.Printf("req: %v %v %v\n", req.Name, req.Age, req.Sex)
	if err != nil {
		fmt.Println(err.Error())
		return err
	}
	tx.Commit()
	fmt.Println("Mysql执行sql语句")

	return nil
}

最后postman测试成功

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐