Golang
一根烂笔头
喜欢钻洞的书虫
展开
-
protobuff序列化二进制包格式解析
protomessage Req{ string spid = 1; // 商户号 // [required=true] string sign = 2; // 签名 // [required=true,minLen=1 , maxLen=64,cnName="requestId"] string request_id = 3; // 请求ID // [required=true] string client_ip = 4; // 请求方 ip // [requir原创 2021-12-02 17:33:24 · 2792 阅读 · 0 评论 -
golang iso8601转换成东八时区
RTfunc ConverTime(iso8601 string) string { //这个必须加UTC参数,不加本地测试和服务器上不一致 t, err := time.ParseInLocation(time.RFC3339, iso8601, time.UTC) if err != nil { return iso8601 } //设置东八区 cz := time.FixedZone("CST", 8*3600) return t.In(cz).Format("2006-01-02原创 2020-11-19 20:45:42 · 1689 阅读 · 0 评论 -
working directory is not part of a module
client.go:9:2: cannot find module providing package google.golang.org/grpc: working directory is not part of a module因为开启mod模式了export GO111MODULE=auto另外一种方法就是使用mod模式export GO111MODULE=ongo mod initgo mod vendor#缺少什么包,go get什么包...原创 2020-07-14 20:52:48 · 8669 阅读 · 0 评论 -
golang的pprof包
依赖go提供两个pprof包net/http/pprofruntime/pprof两个包应用场景存在不同,从前缀即可得知。示例1.代码package mainimport ( "fmt" "net/http" _"net/http/pprof"//注意下划线)func SayHello(w http.ResponseWriter, req *http.Reques...原创 2019-03-28 20:27:08 · 395 阅读 · 0 评论 -
golang 结构体匿名成员不能用于mgo的tag读取
Go允许我们定义不带名称的结构体成员,只需要指定类型即可,这种结构体成员称为匿名成员,比如type Point struct { X int `bson:"x"` Y int `bson:"y"`}type Circle struct { Point Radius int `bson:"redius"`}这个匿名成员,在json的tag中是可以正常的反序列化的,但是mgo的b...原创 2019-04-02 13:16:59 · 993 阅读 · 1 评论 -
go mod vendor:modules disabled inside GOPATH/src by GO111MODULE=auto
问题使用go mod vendor 时,返回RT错误解决办法$ GOPATH=""即取消GOPATH的设置原创 2019-04-03 10:52:41 · 7030 阅读 · 0 评论 -
golang templge range struct list
0.目标使用golang "text/template"库实现插入sql模板1.实现示例//结构体type Person struct { Name string Age int32}//模板语句var InsertPersonInfoSql = `insert into {{.Table}} (name, age, create_time)values{{ rang...原创 2019-04-23 17:26:15 · 494 阅读 · 0 评论 -
Go-Gin上使用SSL
自签openssl req -newkey rsa:4096 -nodes -keyout server.key -out server.csropenssl x509 -signkey server.key -in server.csr -req -days 365 -out server.crt示例package mainimport ( "github.com/gin-gon...原创 2019-07-17 12:44:41 · 2345 阅读 · 0 评论 -
Golang json反序列化使用interface泛型接收整型值会得到float64
RTtype Test struct { Value inteface{} `json:"value"`}请求json{ "value":123,}得到类型是float64var test Testtest.Value.(float64)//如果想使用整型,需要强转一下参考:https://blog.csdn.net/chuanglan/article/details/...原创 2019-08-02 20:41:20 · 2577 阅读 · 0 评论 -
golang http.Response设置Header
func(w http.ResponseWriter, req *http.Request) { // Before any call to WriteHeader or Write, declare // the trailers you will set during the HTTP // response. These three headers are actually se...原创 2019-03-27 18:43:17 · 7176 阅读 · 0 评论 -
golang mongodb insert时候获取插入的ID
RT不像mysql,有直接的接口可用,不过可以绕道而行先生成ID,再插入import "gopkg.in/mgo.v2/bson"id := bson.NewObjectId()bson.M{"_id": id, ...}原创 2019-03-29 21:21:44 · 4463 阅读 · 0 评论 -
golang ssh handshake failed: ssh: host key mismatch
解决办法,如下所示,在ssh的配置里加上HostKeyCallback,config := &ssh.ClientConfig{ User: user, Auth: []ssh.AuthMethod{ ssh.Password(pass), }, // allow any host key to be used (non-prod) // HostKeyCall...原创 2019-03-29 16:59:56 · 5740 阅读 · 0 评论 -
golang的MongoDB的主键转换成字符串
使用bson如下定义类型即可type Data struct { Id bson.ObjectId `bson:"_id,omitempty"` name string `bson:"name"`}注意不是json,_id的下划线不可少 反之,golang如何使用字符串的id查找mongodb呢,在shell终端中要使用ObjectId()函数来转换,比如:原创 2018-01-17 17:55:53 · 4041 阅读 · 0 评论 -
gorilla/mux实现http服务示例
gorilla/mux 小巧玲珑而十分高效,兼容go自带的http。下载源码到本地,编写如下示例:package mainimport ( "encoding/json" "fmt" "github.com/gorilla/mux" "io/ioutil" "net/http" "runtime/debug" "time")原创 2018-01-06 16:39:34 · 5028 阅读 · 0 评论 -
Golang下mongoDB的自生_id和string的关系
关系直接了当的说,原生的_id 和 string 二者之间不能直接转换。非原生 _id 则因具体而定。 原因mongoDB 生成的 _id 是二进制数据;而不是 golang 的 string ;二进制转换成 string,必定输出乱码字符。如果写入DB时 _id 由用户生成,那么mongoDB保持原样写入DB,用户传入的类型是什么,此 _id 将是什么类型。DB不做任何修改。 m原创 2018-01-27 17:03:35 · 7317 阅读 · 0 评论 -
fatal error: all goroutines are asleep - deadlock!
0. 问题默认情况下main gorouting是不会等待子gorouting结束的,而main退出,所以子gorouting结束也会终结。一般使用var wg sync.WaitGroupwg.Add(times)//子gorouting完成时,执行wg.Done()wg.Wait()来等待子gorouting结束。当wg.Add(times) 和实际的gorouting个数不等时...原创 2019-03-19 15:16:01 · 1015 阅读 · 0 评论 -
golang for的select体中如何break外层循环
文章目录0. 问题1.解决办法1.1 使用带标签的break1.2 使用return1.3 使用标志0. 问题默认在select中break是只跳脱了select体,而不是结束for循环for { select{ case <-tick.C: //do someting case <- stop: break //break的不是for循环, 而是跳脱sel...原创 2019-03-19 15:34:30 · 6792 阅读 · 2 评论 -
golang支持tls
前言golang官方默认是不支持tls(Thread Local Storage)的。支持tls的语言也不多,比如C++和GCC-C(gcc的c语言扩展,用于linux)。go官方拒绝实现tls,而为了解决tls问题,引入了上下文context包(闭包一定程度也是一种上下文)。通过上下文参数传递的方式来传递本地变量。这种方式好处就是显式上下文明确,坏处就是每个函数都要多一个上下文参数,传来传去的...原创 2019-03-25 12:42:34 · 1571 阅读 · 0 评论 -
golang exec.Command错误no such file or directory
问题执行out, err := exec.Command("grep 172.0.0.1 ~/.ssh/known_hosts | wc -l").Output()返回RT错误原因exec包func Command(name string, arg ...string) *Cmdname参数一定要注意If name contains no path separators, C...原创 2019-03-29 16:14:57 · 10914 阅读 · 0 评论 -
golang执行命令exit status xxx
文章目录问题解决办法问题exec.Command执行命令的时候,如果存在问题会返回err,打印信息显示 “exit status xxx”直接打印output无详细错误信息,怎么调试呢?解决办法自定义stderr和stdout,如下 cmd := exec.Command("grep", host, "test") var out bytes.Buffer var stderr b...原创 2019-03-29 16:31:47 · 16501 阅读 · 0 评论 -
golang时间字符串和时间戳转换
golang的时间字符串和时间戳处理原创 2017-12-29 16:18:29 · 9768 阅读 · 0 评论