grpc套路(二)golang服务端编写
我们需要service来实现User.pb.go里面的接口和对应的方法
直接看代码吧:
package main
import (
"com.rpc.study/common"
"com.rpc.study/models"
user2 "com.rpc.study/pdfiles/user"
"context"
"fmt"
"github.com/go-xorm/xorm"
"google.golang.org/grpc"
"net"
)
//userservice的实现
type UserServiceImpl struct {
//因为我们要使用到xorm操作数据库 所以要定义哦 在注册的时候我们会将数据库引擎注册进去
Engine *xorm.Engine
}
//userservice实现的方法 UserList()里面具体的参数可以直接参考User.pb.go文件里面的UserList()方法
func (us *UserServiceImpl) UserList(ctx context.Context,user *user2.RequestUser) (*user2.ResponseUser,error) {
//返回的是 user2.ResponseUser类型
return &user2.ResponseUser{
User:us.GetUser(user.Name),
},nil
}
//userservice实现的方法
func (us *UserServiceImpl) GetUser(name string) []*user2.User {
//记得去创建user的模型
var userList []models.User
err := us.Engine.Where("id > ?", 0).Find(&userList)
if err != nil {
fmt.Println(err.Error())
}
fmt.Println(userList)
fmt.Println("===========================================")
//因为返回的是[]*user2.User
userList1 := make([]*user2.User,0)
//遍历数据库查询结果 然后重新塞入到新的切片当中去
for _,u := range userList {
userList1 = append(userList1,&user2.User{
Name:u.Name,
Age:u.Age,
Mobile:u.Mobile,
})
}
return userList1
//users := make([]*user2.User,0)
//for i:=1;i<=10;i++ {
// n := strconv.Itoa(i)
// users = append(users,&user2.User{
// Name:n,
// Age:int64(i),
// })
//}
//return users;
}
func main(){
//服务端起来一个tcp服务 监听端口8084
lis, err := net.Listen("tcp", ":8084")
if err != nil {
fmt.Println("server error 500",err.Error())
return
}
//实现一个grpc
server := grpc.NewServer()
//数据库引擎
engine := common.NewMysqlEngine()
//注册service的时候我们就将数据库引擎传递进去 这样在service里面就可以操作数据库啦
user2.RegisterUserServiceServer(server,&UserServiceImpl{Engine:engine})
//启动服务 这个地方我们不需要for死循环 grpc当中会自动帮助我们实时监听
server.Serve(lis)
}
数据库引擎的代码也给你吧:
_ “github.com/go-sql-driver/mysql”
“github.com/go-xorm/xorm”
记得自己去go get一下
package common
import (
_ "github.com/go-sql-driver/mysql" //不能忘记导入
"github.com/go-xorm/xorm"
"xorm.io/core"
)
//数据库操作引擎
func NewMysqlEngine() *xorm.Engine{
//xorm.NewEngine("mysql", "root:yu271400@tcp(127.0.0.1:3306)/qfCms?charset=utf8")
engine, err := xorm.NewEngine("mysql", "root:root@tcp(127.0.0.1:3306)/elmcms?charset=utf8")
if err != nil {
panic(err.Error())
}
//iris当中我们都讲过 不必多讲
engine.ShowSQL(true)
engine.Logger().SetLevel(core.LOG_DEBUG)
engine.SetMaxOpenConns(10)
//返回引擎
return engine
}
userModel.go文件也给你吧:
package models
type User struct {
Name string `xorm:"varchar(255)" json:"name"`
Mobile string `xorm:"varchar(255)" json:"mobile"`
Age int64 `xorm:"int" json:"age"`
}
服务端启动之后grpc会自动帮我们监听 属于长连接
注册serviceImpl实现服务的时候把数据库引擎带进去不要忘了 要不你咋操作数据库呢?
完毕!
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: