我們需要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 協議》,轉載必須註明作者和本文連結