Golang-Redis

引入 1 go get github.com/redis/go-redis 基础使用 连接 基于配置的连接 1 2 3 4 5 rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // 没有密码,默认值 DB: 0, // 默认DB 0 }) 基于URL的连接 1 2 3 4 5 6 opt, err := redis.ParseURL("redis://<user>:<pass>@localhost:6379/<db>") if err != nil { panic(err) } rdb := redis.NewClient(opt) 配置TLS 1 2 3 4 5 6 rdb := redis.NewClient(&redis.Options{ TLSConfig: &tls.Config{ MinVersion: tls.VersionTLS12, ServerName: "你的域名", }, }) 基于SSH 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 sshConfig := &ssh.ClientConfig{ User: "root", Auth: []ssh.AuthMethod{ssh.Password("password")}, HostKeyCallback: ssh.InsecureIgnoreHostKey(), Timeout: 15 * time.Second, } sshClient, err := ssh.Dial("tcp", "remoteIP:22", sshConfig) if err != nil { panic(err) } rdb := redis.NewClient(&redis.Options{ Addr: net.JoinHostPort("127.0.0.1", "6379"), Dialer: func(ctx context.Context, network, addr string) (net.Conn, error) { return sshClient.Dial(network, addr) }, // SSH不支持超时设置,在这里禁用 ReadTimeout: -1, WriteTimeout: -1, }) 上下文 go-redis支持Context,可以使用它控制超时或者传递一些数据,也可以监控go-redis性能。 ...

2024-09-12 · 2 分钟 · Nebula

Go-Swagger

引入 1 2 3 4 go install github.com/swaggo/swag/cmd/swag@latest go get -u -v github.com/swaggo/gin-swagger go get -u -v github.com/swaggo/files go get -u -v github.com/alecthomas/template 使用 基础注释 main函数中配置项目基本注解 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 package main // @title 这里写标题 // @version 1.0 // @description 这里写描述信息 // @termsOfService http://swagger.io/terms/ // @contact.name 这里写联系人信息 // @contact.url http://www.swagger.io/support // @contact.email support@swagger.io // @license.name Apache 2.0 // @license.url http://www.apache.org/licenses/LICENSE-2.0.html // @host 这里写接口服务的host // @BasePath 这里写base path // @securityDefinitions.basic BasicAuth func main() { r := gin.New() r.Run() } api注解 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 // 函数名 ShowAccount godoc // @Summary Show an account // @Description get string by ID // @Tags accounts // @Accept json // @Produce json // @Param id path int true "Account ID" // @Success 200 {object} model.Account // @Failure 400 {object} httputil.HTTPError // @Failure 404 {object} httputil.HTTPError // @Failure 500 {object} httputil.HTTPError // @Router /accounts/{id} [get] func GetPostListHandler2(c *gin.Context) { ... } 生成docs文件 1 swag init 配置文档handler 1 engine := gin.New()engine.GET("swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) 测试 1 ip:port/swagger/index.html

2024-09-11 · 1 分钟 · Nebula

Golang

序 本篇内容来自《深入GO语言原理、关键技术与实战》

2024-08-28 · 1 分钟 · Nebula

Fiber

快速开始 依赖引入 1 go get github.com/gofiber/fiber/v2 零分配 在Fiber中,*fiber.ctx是可变的,因此ctx只能在处理程序中使用,且不可以保留任何引用。 1 2 3 4 func handler(c *fiber.Ctx) error { //变量仅在此处理程序中有效 result := c.Params("foo") } 如果需要持久化存储,请使用copy()构建底层缓冲区副本。 1 2 3 4 5 6 7 8 9 func handler(c *fiber.Ctx) error { //变量仅在此处理程序中有效 result := c.Params("foo") //制作副本 buffer := make([]byte, len(result)) copy(buffer, result) resultCopy := string(buffer) } 也可以使用ImmutableString函数直接变量拷贝 1 2 3 4 5 6 app.Get("/:foo", func(c *fiber.Ctx) error { //变量现在是不可变的 result := utils.ImmutableString(c.Params("foo")) // ... }) Hello World 1 2 3 4 5 6 7 8 9 10 11 12 13 package main import "github.com/gofiber/fiber/v2" func main() { app := fiber.New() app.Get("/", func(c *fiber.Ctx) error { return c.SendString("Hello, World!") }) app.Listen(":3000") } Fiber包 New 创建一个新的 App 命名实例并传递可选配置 ...

2024-08-21 · 3 分钟 · Nebula

Gin

快速开始 依赖引入 1 go get -u github.com/gin-gonic/gin 1 import "github.com/gin-gonic/gin" 创建服务 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 package main import ( "github.com/gin-gonic/gin" "net/http" ) func main() { engine := gin.Default() engine.GET("/", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "message": "Hello World!", }) }) engine.Run(":52100") } 框架基础 请求参数 路由参数 绑定路由参数时,使用:作为前缀,例如:paramName 通过context.Param("paramName")获取参数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 package main import ( "github.com/gin-gonic/gin" "log" "net/http" ) func main() { e := gin.Default() e.GET("/findUser/:username/:userid", FindUser) e.GET("/downloadFile/*filepath", UserPage) log.Fatalln(e.Run(":8080")) } // 命名参数示例 func FindUser(c *gin.Context) { username := c.Param("username") userid := c.Param("userid") c.String(http.StatusOK, "username is %s\n userid is %s", username, userid) } // 路径参数示例 func UserPage(c *gin.Context) { filepath := c.Param("filepath") c.String(http.StatusOK, "filepath is %s", filepath) } 请求参数 context.DefaultQuery("username", "defaultUser")获取请求参数,如果参数不存在则返回默认值 ...

2024-08-19 · 10 分钟 · Nebula