go

gin 使用 Json Web Token(JWT)

之前的token验证借助了redis,如果用jwt就不需要了 中间件 cat middlewares/jwt.go package middlewares import ( "enterprise-api/app/models" "enterprise-api/core" "github.com/gin-gonic/gin" ) func JWTAuth(role string) gin.HandlerFunc { return func(c *gin.Context) { signToken := c.Request.Header.Get("Authorization") ...

grpc 实现统一格式的body响应

我们写rest api时,统一响应大多是这样的 { "err": 0, "msg": "参数错误",//有错误时非空 "data" : {//没错误时才存在 ... } } 在grpc项目中有些许差异 func Admin2Resetpasswd(ctx context.Context, in *pb.Admin2ResetpasswdRequest) (*pb.Admin2ResetpasswdResponse, error) { if in.AdminId == in.ToAid { return nil, status.Error(codes.Failed...

使用 buf 替代 protoc 生成和管理代码

以go为例,下面是所需工具 工具 介绍 安装 protobuf protoc 可执行文件 Install protoc-gen-go 从 proto 文件,生成 .go 文件 Install protoc-gen-go-grpc 从 proto 文件,生成 GRPC 相关的 .go 文件 Install protoc-gen-grpc-gateway 从 proto 文件,生成 grpc-gateway 相关的 .go 文件 Install protoc-gen-openapiv2 从 proto 文件,生成 swagger 所需的json文件 Install ...

gRPC 同时提供 Restful API 接口

gRPC支持很多语言,但是种种原因,要么对方的语言不支持,要么老项目无法改造,这时就需要提供Restful API 接口。如果重新写一套肯定是不划算的,这时候使用gRPC-Gateway,只需要在现有的gRPC项目做稍许修改就可以轻松实现Restful API 接口 引用etcd文档中的一段话 为什么你应该考虑使用gRPC网关? etcd v3使用gRPC作为其消息传递协议。etcd项目包括一个基于gRPC的Go客户端和一个命令行实用程序etcdctl,用于通过gRPC与etcd集群通信。对于不支持gRPC的语言,etcd提供JSON gRPC网关。此网关服务于RESTful代理,将HTTP...

grpc TLS证书认证

首先,申请证书,这个证书和nginx用的是一样的,具体步骤请移步:RabbitMQ插件之MQTT ca.cer www.cuiwei.net.key www.cuiwei.net.pem 看代码 服务端 ... // 从输入证书文件和密钥文件为服务端构造TLS凭证 creds, err := credentials.NewServerTLSFromFile("./www.cuiwei.net.pem", "./www.cuiwei.net.key") if err != nil { log.Fatalf("Failed to generate credentials %v", er...

Golang大文件下载

文件下载 func DownloadFile() { url := "https://www.baidu.com/img/pc_79bff59263430e2e42693b50cf376490.png" resp, _ := http.Get(url) defer resp.Body.Close() data, err := io.ReadAll(resp.Body) if err != nil { panic(err) } _ = os.WriteFile("./pc_79bff59263430e2e42693b50cf376490.png", data, 0777) ...

Golang获取普通字符串和大文件的MD5

先看一下md5的两种用法 hash := md5.New() b := []byte("test") hash.Write(b) fmt.Printf("%x %x\n", hash.Sum(nil), md5.Sum(b)) 普通字符串的md5 func Md5(str string) string { data := []byte(str) return fmt.Sprintf("%x", md5.Sum(data)) } 小文件的md5(不推荐) func Md5File(file string) string { cf, _ := os.Open(file) def...

Golang使用微软语音SDK实现文字转语音,Docker环境开箱即用

微软语音是什么这里就不多说了,文本转语音我之前尝试过调用 REST API,但是太慢了,一句话的文本还行,几百字的文本就需要几十秒,甚至几分钟,就很容易失败。所以这次尝试一下Go版本的 SDK,吸引我的点是它快,并且可以在服务端运行 配置开发环境 按照官方文档所说需要先配置语音SDK,而这个SDK只支持Linux,所以我选择了Go的官方Docker镜像 Golang:1.19(此镜像是基于Debian),然后配合VS Code进行容器内开发 如上,我打开了VS Code,按照官方文档的步骤 apt-get update apt-get install build-essential lib...

go内置的性能分析工具 - pprof

获取数据 控制台程序 - 使用runtime/pprof库 如下,一个基于 cobra 的程序 package main import ( "cobra-demo/cmd" "fmt" "os" "runtime/pprof" ) func main() { //start cpuProfile, err := os.Create("./pprof/cpu_profile") if err != nil { fmt.Printf("创建文件失败:%s", err.Error()) return } defer cpuProfile.Close() memPro...