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 协议》,转载必须注明作者和本文链接
胡军
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!