![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
go语言编程
大鹏blog
把自己遇到的问题记录下来,方便自己,也方便他人!
展开
-
golang: interface 使用
Go 语言提供了另外一种数据类型即接口,它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口。package maintype inter1 interface { F1()string}type inter2 interface { F2()string}type inter3 interface { F3()string}type inter0 interface { inter1 inter2}type inter interface {原创 2021-11-03 21:03:02 · 303 阅读 · 0 评论 -
golang :rsa加密
golang的 rsa加密可以参考如下func Sign(pk, context string) string { block, _ := pem.Decode([]byte(pk)) if block == nil { panic("私钥错误") } private, err := x509.ParsePKCS1PrivateKey(block.Bytes) if err != nil { panic("PrivateKey error") } h := crypto.Hash.N原创 2021-08-17 10:00:54 · 1721 阅读 · 0 评论 -
golang:各种异步等待集合
golang中各种异步等待写法集合package waitimport ( "context" "errors" "math/rand" "sync" "time" "k8s.io/apimachinery/pkg/util/runtime")// For any test of the style:// ...// <- time.After(timeout):// t.Errorf("Timed out")// The value for ti原创 2021-06-02 18:22:15 · 1388 阅读 · 0 评论 -
go:获取所有的系统环境变量
遍历读取所有的系统环境变量package mainimport ( "os" "strings")func getEnvs() { envs := os.Environ() for _, e := range envs { parts := strings.SplitN(e, "=", 2) if len(parts) != 2 { continue }else{ println(string(parts[0]),string(parts[1])) } }}原创 2021-05-07 15:39:28 · 2098 阅读 · 0 评论 -
go : scp文件到指定服务器
使用代码 实现scp 拷贝文件到指定服务器、package mainimport ( "fmt" "io/ioutil" "log" "time" "github.com/mitchellh/go-homedir" "golang.org/x/crypto/ssh")func main() { sshHost := "" sshUser := "root" sshPassword := "" sshType := "" //password 或者 key sshKeyPa原创 2020-09-30 17:35:28 · 1536 阅读 · 0 评论 -
golang :追加写文件操作
go 怎么追加写文件?package mainimport ( "bufio" "fmt" "os")func main() { filePath := "/etc/hosts" file, err := os.OpenFile(filePath, os.O_WRONLY|os.O_APPEND, 0666) if err != nil { fmt.Println("文件打开失败", err) } defer file.Close() //写入文件时,使用带缓存的 *Wr原创 2020-09-04 17:02:14 · 5358 阅读 · 0 评论 -
go :如何优雅地超时退出
业务代码中,我们怎么让一段程序,在某个时间段内执行,然后优雅退出?本文给出一种办法:使用wait.pollpackage mainimport ( "fmt" "time" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/klog")func main() { for { a := wait.Poll(time.Second, time.Second*5, func() (done bool, err error) { fmt.Pr原创 2020-07-23 20:31:25 · 642 阅读 · 0 评论 -
go :tag实现json字段转换
背景:我们都知道go的struct中,如果字段需要对外使用,就需要使用首字母大写的格式,但是如果API中约定要使用小写字母开头呢?比如:type CbsVolume struct { // cbs id CbsDiskId *string // fs类型 FsType *string // 是否只读 ReadOnly *bool }此时如果执行json.Marshal(),结构体会有三个字段CbsDiskId,FsType,ReadOnly,都是首字母大写的如果我们要想使原创 2020-07-13 15:25:07 · 1076 阅读 · 0 评论 -
golang: import cycle not allowed
报错:import cycle not allowed原因:循环导包所致解决办法:分析代码,找到循环倒入的代码处,进行修改举例:我有两个包 cluster 和workloadcluster中有个test1 函数,test1中引入了workload的常量func test1(type string) { switch a { case workload.ClusterTypeDev: case workload.ClusterTypeTest: case workload.Cl原创 2020-06-12 19:45:53 · 446 阅读 · 0 评论 -
golang:自定义类型转换 non-interface type int32 on left
报错:non-interface type int32 on left要点:传进来的参数不是interface类型那么做类型断言都是回报 non-interface的错误需要借助interface{}()进行转换案例:type IntStr struct { int32 string}func test(){ var a int32 b:=interface{}(a).(IntStr) klog.Info(b)}...原创 2020-06-11 16:29:23 · 4686 阅读 · 0 评论 -
go : 同一个package中函数互相调用的问题
背景:同一个包下面有三个文件,main.go 调用了其他两个文件中的方法 ,但是 go run main.go的时候报错调用的方法找不到问题原因:为什么会出现这样的问题呢,同一个package下不应该都是可以互相调用的吗? 错误原因:其他两个文件 并未与main.go一起编译解决办法1. go run *.gogo build .此时会编译出一个二进制文件./...原创 2019-12-17 17:56:08 · 2564 阅读 · 0 评论 -
go :复制文件内容到另一个文件
背景:本文实验,从一个文件拷贝文件内容到另外一个文件代码package mainimport ( "fmt" "io" "os")func copyFileContents(src, dst string) (err error) { in, err := os.Open(src) if err != nil { return } defer in.Close()...原创 2019-12-16 17:11:43 · 912 阅读 · 0 评论 -
go :gin 编写测试代码
背景:本文实验 gin框架下 测试代码的编写功能代码package mainimport ( "github.com/gin-gonic/gin")func setupRouter() *gin.Engine { r := gin.Default() r.GET("/ping", func(c *gin.Context) { c.String(200, "pong") ...原创 2019-12-12 17:55:19 · 951 阅读 · 0 评论 -
go :gin BasicAuth中间件
背景:本文实验 BasicAuth 中间件用法代码package mainimport ( "net/http" "github.com/gin-gonic/gin")// simulate some private datavar secrets = gin.H{ "foo": gin.H{"email": "foo@bar.com", "phone": "123...原创 2019-12-12 17:40:05 · 439 阅读 · 0 评论 -
gin : 多文件上传
背景:本文实验,gin框架下的多文件上传func main() { router := gin.Default() // Set a lower memory limit for multipart forms (default is 32 MiB) // router.MaxMultipartMemory = 8 << 20 // 8 MiB router.POST("...原创 2019-12-12 17:30:45 · 1088 阅读 · 0 评论 -
go :gin操作 cookie
背景:本文介绍gin框架下操作cookie ,get ,set方法代码:package mainimport ( "fmt" "github.com/gin-gonic/gin")func main() { router := gin.Default() router.GET("/cookie", func(c *gin.Context) { cookie, e...原创 2019-12-12 17:24:07 · 759 阅读 · 0 评论 -
go: gin reader 保存数据
背景:本文实践从reader保存数据代码package mainimport ( "net/http" "github.com/gin-gonic/gin")func main() { router := gin.Default() router.GET("/someDataFromReader", func(c *gin.Context) { response, e...原创 2019-12-12 16:53:22 · 466 阅读 · 0 评论 -
go :gin URL重定向
背景:本文介绍gin 框架下,URL重定向问题http重定向r.GET("/test", func(c *gin.Context) { c.Redirect(http.StatusMovedPermanently, "http://www.google.com/")})完整测试代码package mainimport ( "net/http" "github.com/gi...原创 2019-12-09 18:14:20 · 3747 阅读 · 0 评论 -
go: gin purejson
背景:通常情况下,JSON用它们的unicode实体替换特殊的HTML字符,例如<becomes\u003c。如果要按字面意思对这些字符进行编码,可以使用PureJSON代替。此功能在Go 1.6及更低版本中不可用。代码:package mainimport ( "github.com/gin-gonic/gin")func main() { r := gin.Defau...原创 2019-12-06 14:59:01 · 305 阅读 · 0 评论 -
go : gin路径参数
背景:本文介绍 gin框架下如何获取路径参数代码:package mainimport ( "net/http" "github.com/gin-gonic/gin")func main() { router := gin.Default() // This handler will match /user/john but will not match /user/ ...原创 2019-12-06 14:54:55 · 3506 阅读 · 0 评论 -
go : gin Urlencoded 格式
背景:本文介绍 Urlencoded 自定义格式代码:package mainimport ( "github.com/gin-gonic/gin")func main() { router := gin.Default() router.POST("/form_post", func(c *gin.Context) { message := c.PostForm("m...原创 2019-12-06 14:39:13 · 1070 阅读 · 0 评论 -
go : gin urlencoded绑定
背景:携带参数绑定URL编码package mainimport ( "github.com/gin-gonic/gin")type LoginForm struct { User string `form:"user" binding:"required"` Password string `form:"password" binding:"required"`}...原创 2019-12-06 14:32:23 · 470 阅读 · 0 评论 -
go : gin 模型绑定与验证
背景:将请求体绑定到类型中,请使用模型绑定。我们目前支持JSON、XML、YAML和标准表单值(foo=bar&boo=baz)的绑定代码:package mainimport ( "net/http" "github.com/gin-gonic/gin")// Binding from JSONtype Login struct { User strin...原创 2019-12-06 11:43:46 · 754 阅读 · 0 评论 -
go : gin 映射querystring或postform参数
代码:package mainimport ( "fmt" "github.com/gin-gonic/gin")func main() { router := gin.Default() router.POST("/post", func(c *gin.Context) { ids := c.QueryMap("ids") names := c.PostForm...原创 2019-12-06 10:43:30 · 1116 阅读 · 0 评论 -
go : gin jsonp
背景:使用JSONP从不同域中的服务器请求数据。如果存在查询参数回调,则将回调添加到响应体。代码:func main() { r := gin.Default() r.GET("/JSONP?callback=x", func(c *gin.Context) { data := map[string]interface{}{ "foo": "bar", } //...原创 2019-12-06 10:29:10 · 166 阅读 · 0 评论 -
go : gin http2 push资源
背景:使用gin 框架,http2 push资源到server知识点:http2 server pushHTTP/2旨在解决HTTP/1.x的许多缺陷。现代web页面使用许多资源:HTML、样式表、脚本、图像等等。在HTTP/1.x中,必须显式地请求这些资源中的每一个。这可能是一个缓慢的过程。浏览器从获取HTML开始,然后在解析和计算页面时逐步了解更多资源。由于服务器必须等待浏览器发出每个...原创 2019-12-06 10:25:56 · 1494 阅读 · 0 评论 -
go : gin 加载html
背景:本文介绍使用 LoadHTMLGlob() or LoadHTMLFiles() 加载html资源代码:package mainimport ( "fmt" "html/template" "net/http" "time" "github.com/gin-gonic/gin")func formatAsDate(t time.Time) string { ye...原创 2019-12-06 10:11:50 · 2537 阅读 · 0 评论 -
go : gin 输出日志文件
背景:我们运行服务端程序,日志直接会打印,本文介绍如何将服务端日志输出到日志文件代码:package mainimport ( "io" "os" "github.com/gin-gonic/gin")func main() { // Logging to a file. f, _ := os.Create("gin.log") gin.DefaultWriter ...原创 2019-12-06 09:55:27 · 5323 阅读 · 0 评论 -
go :gin 路由分组
背景:本文介绍gin框架下api接口路由分组代码:package mainimport ( "github.com/gin-gonic/gin")func main() { router := gin.Default() // Simple group: v1 v1 := router.Group("/v1") { v1.POST("/login", loginEn...原创 2019-12-06 09:47:36 · 790 阅读 · 0 评论 -
go : gin优雅地退出服务端
背景:通常我们执行 kill ,或者直接 crtl +c 终结服务 ,本文介绍优雅地结束服务端代码package mainimport ( "context" "log" "net/http" "os" "os/signal" "syscall" "time" "github.com/gin-gonic/gin")func main() { router := ...原创 2019-12-06 09:43:00 · 5065 阅读 · 1 评论 -
go : gin 自定义中间件
背景:本文实验gin框架下自定义中间件 以日志为例代码: package mainimport ( "log" "time" "github.com/gin-gonic/gin")func Logger() gin.HandlerFunc { return func(c *gin.Context) { t := time.Now() // Set example...原创 2019-12-05 19:38:29 · 746 阅读 · 0 评论 -
go : gin 自定义日志输出格式
背景:本文实验gin 框架 自定义日志格式代码:package mainimport ( "fmt" "time" "github.com/gin-gonic/gin")func main() { router := gin.New() // LoggerWithFormatter middleware will write the logs to gin.Defaul...原创 2019-12-05 19:31:57 · 2079 阅读 · 0 评论 -
go : gin 自定义http配置
1.直接使用func main() { router := gin.Default() http.ListenAndServe(":8080", router)}1.自定义配置func main() { router := gin.Default() s := &http.Server{ Addr: ":8080", Handler: ...原创 2019-12-05 19:27:20 · 776 阅读 · 0 评论 -
go : gin控制服务端log日志显示颜色
背景:本文测试服务端运行日志颜色显示代码:1.显示颜色package mainimport ( "github.com/gin-gonic/gin")func main() { // Force log's color gin.ForceConsoleColor() // Creates a gin router with default middleware: //...原创 2019-12-05 19:19:02 · 2795 阅读 · 0 评论 -
go :gin 模板创建单个二进制文件
背景:使用gin gonic/gin Web服务器和HTML模板创建单个二进制文件代码:main.gopackage mainimport ( "html/template" "io/ioutil" "net/http" "strings" "github.com/gin-gonic/gin")func main() { r := gin.New() t, err...原创 2019-12-05 19:08:53 · 1215 阅读 · 3 评论 -
go : gin 绑定uri 用户信息
背景:本文介绍如何使用gin框架 绑定uri信息代码:package mainimport "github.com/gin-gonic/gin"type Person struct { ID string `uri:"id" binding:"required,uuid"` Name string `uri:"name" binding:"required"`}func...原创 2019-12-05 18:30:52 · 1160 阅读 · 0 评论 -
go :gin 如果绑定查询字符串
背景 :本文介绍如何使用gin 框架绑定查询字符串,介绍两种方式 string类型的数据和json类型的数据代码:package mainimport ( "log" "github.com/gin-gonic/gin")type Person struct { Name string `form:"name" json:"name"` Address string...原创 2019-12-05 18:23:45 · 389 阅读 · 0 评论 -
go : gin 表单提交
背景:本文介绍gin 配合表单提交数据交互,并以json的个数输出数据package mainimport ( "github.com/gin-gonic/gin")type myForm struct { Colors []string `form:"colors[]"`}func main() { r := gin.Default() r.LoadHTMLGlob...原创 2019-12-05 17:57:03 · 1750 阅读 · 0 评论 -
go : gin生成ASCII JSON
背景:使用gin框架生成 构造json数据package mainimport ( "net/http" "github.com/gin-gonic/gin")func main() { r := gin.Default() r.GET("/someJSON", func(c *gin.Context) { data := map[string]interface{}{...原创 2019-12-05 17:46:32 · 404 阅读 · 0 评论 -
go : gin自定义结构体绑定表单请求
背景:本文介绍使用 gin框架,给自定义结构体绑定表单请求,传递数据package mainimport "github.com/gin-gonic/gin"type StructA struct { FieldA string `form:"field_a"`}type StructB struct { NestedStruct StructA FieldB ...原创 2019-12-05 17:34:42 · 2531 阅读 · 0 评论