SoFunction
Updated on 2025-03-04

Use gRPC to get database version

Here we demonstrate a case of obtaining the database version through gRPC.

1. Create a new proto

syntax = "proto3";
package pb;
import "google/protobuf/";

service DataBase {
    rpc GetDataBaseVersion() returns(VersionResponse) {}
}

message VersionResponse {
    string version = 1;
}

Compilation:

$ protoc --gogo_out=plugins=grpc:./

2. Create a new database connection

package model

import (
	"/driver/mysql"
	"/gorm"
	"log"
)

type TpOrm struct {
	*
}

var TpDB TpOrm

func InitTpOrm() {
	dsn := "root:root@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := ((dsn), &{})
	if err != nil {
		(err)
		return
	}
	TpDB = TpOrm{db}
}

3. gRPC implements GetDataBaseVersion method

package impl

import (
	"context"
	"/golang/protobuf/ptypes/empty"
	"proj/model"
	pb "proj/proto"
)

type DataBaseServerImpl struct {
}

func (dataBaseServerImpl *DataBaseServerImpl) GetDataBaseVersion(ctx , req *) (rep *, err error) {
	var version string
	rep = &{}
	rows, err := ("select version() as version").Rows()
	if err != nil {
		 = ""
	}
	defer ()
	for () {
		err := (&version)
		if err != nil {
			 = ""
		}else{
			 = version
		}
	}
	return
}

4. Server side implementation

package main

import (
	"/grpc"
	"log"
	"net"
	impl "proj/grpc"
	"proj/model"
	pb "proj/proto"
)

func main() {
	()
	gRpcListen, err := ("tcp", ":23352")
	if err != nil {
		("failed grpc listen: %v", err)
	}
	gRpcServer := ()
	(gRpcServer, &{})
	err = (gRpcListen)
	if err != nil {
		("GrpcServer fail start :%v", ())
	} else {
		("GrpcServer success start %s", ":8090")
	}
}

start up:

$ go run server/

5. Client implementation

package main

import (
	"context"
	"/grpc"
	"/protobuf/types/known/emptypb"
	"log"
	pb "proj/proto"
)

func main() {
	ctx := ()
	conn, err := (ctx, "127.0.0.1:23352", (), ())
	if err != nil {
		(err)
	}
	client := (conn)
	in := new()
	rep, err := (ctx, in)
	if err != nil {
		(err)
	} else {
		()
	}
}

start up:

$ go run client/
2023/06/28 17:30:37 5.5.28

6. Project structure

$ tree go-grpc/
go-grpc/
├── client
│   └──
├──
├──
├── grpc
│   └──
├── model
│   └──
├── proto
│   ├──
│   └──
├──
├── server
│   └──
└── test
    └──

6 directories, 10 files

The above is the detailed content of using gRPC to obtain database version. For more information about gRPC to obtain database version, please follow my other related articles!