
go语言入坑
jigetage
这个作者很懒,什么都没留下…
展开
-
mysql转go struct
这个工具挺好用的https://dev.ataotaoa.com,在线将mysql建表语句转golang的struct结构体原创 2020-01-14 15:45:25 · 1154 阅读 · 0 评论 -
mysql建表语句转go struct结构体在线工具
这个工具挺好用的https://dev.ataotaoa.com,在线将mysql建表语句转golang的struct结构体原创 2020-01-13 13:43:45 · 6258 阅读 · 6 评论 -
一文彻底弄懂go中的调度GMP
一文彻底弄懂go中的调度GMP先说,协程的本质是用户态的线程,用户对其有控制权限,内存占用少,切换代价低。再来解释一下MPG是什么意思。M代表内核线程,所有的G都要放在M上才能运行。P代表控制器,调度G到M上,其维护了一个队列,存储了所有需要它来调度的G。G代表一个go routine单元。补充几点常见的调度策略:1,如果某个M陷入阻塞呢?当一个OS线程...原创 2019-12-02 15:52:09 · 5857 阅读 · 2 评论 -
对go中defer机制的理解
看下面一道题。package mainimport "fmt"func calc(index string, a, b int) int { ret := a + b fmt.Println(index, a, b, ret) return ret}func main() { a := 3 b := 2 defer calc...原创 2019-04-14 23:52:28 · 480 阅读 · 0 评论 -
go中channel缓冲和非缓冲区别
分析下面一道题目,再次感受channel的缓冲和非缓冲的区别// 错误写法func (set *threadSafeSet) Iter() <-chan interface{} { ch := make(chan interface{}) go func() { set.RLock() for elem := range set.s { ch <- elem ...原创 2019-04-15 00:09:18 · 497 阅读 · 0 评论 -
在docker alpine上运行cgo项目
问题:在docker的alpine镜像上运行cgo项目会出现问题,提示panic: standard_init_linux.go:175: exec user process caused "no such file or directory"问题。原因是当cgo开启时,默认是按照动态库的方式来链接so文件的,但alpine只支持静态链接,所以会出错。解决方案:通过设置CGO_EN...原创 2019-05-20 17:12:04 · 2476 阅读 · 1 评论 -
goswagger调用失败
通过 swagger generate spec -o ./swagger.json命令生成swagger.json文件,命令运行失败,提示在GOROOT和GOPATH中都找不到各种go依赖包,原因是goswagger在寻找依赖包时不会从go的环境变量中寻找GOROOT GOPATH路径,而是在系统的环境变量中找GOROOT和GOPATH路径,所以需要设置系统环境变量。Linux下编辑vim ~/...原创 2019-05-22 14:16:49 · 923 阅读 · 0 评论 -
windows如何在go1.12中添加多个GOPATH
在当前终端中,先设置临时环境变量GOPATH,只为这一次编译。set GOPATH=C:\Users\lenovo\go;C:\Codes\cloudapp_vrcae然后开始go build即可。亲测有效。以前的那种在系统环境变量中添加多个GOPATH的方法无效了。...原创 2019-05-27 15:28:51 · 2590 阅读 · 0 评论 -
opentrace jager elastic search 调用监控
基于open tracing和uber/jaeger,展示整个分布式系统的调用链,实现微服务性能的实时监控。docker 安装jaeger-query:docker run -it --rm --name jaeger-query -e SPAN_STORAGE_TYPE=elasticsearch -e ES_SERVER_URLS=http://ip:port -e ES_U...原创 2019-06-01 19:07:07 · 788 阅读 · 0 评论 -
方法的接收者是对象类型和指针类型的区别
方法的接收者是对象类型和指针类型的区别1,当一个方法的接收者是对象类型时,不论调用者是对象还是指针,该方法修改的都是副本,都不能修改自身;接收者是指针类型时,不论调用者是对象还是指针,修改的都是自身。2,对于接口而言,如果接口方法绑定在对象类型上,则该类型的指针没有实现接口,如果接口方法绑定在了指针类型上,则该类型的对象没有实现接口。...原创 2019-07-22 16:53:16 · 481 阅读 · 0 评论 -
go数组和切片的区别
Go数组和切片区别当作为参数传给函数时,如果在函数内部被修改了,那么数组是临时修改,即出了函数后,原来的数据还是原来的数据,而切片是永久修改,即出了函数后,原来的数据已经变了,变成了修改后的数据。例子:``package mainimport "fmt"func f0(a [3]int64) { a[0] += 1 fmt.Println(a[0]) ...原创 2019-08-30 15:28:56 · 369 阅读 · 0 评论 -
go build后加文件和目录的区别
go build + xxx.go:生成以xxx命名的可执行文件go build + dir / go build . / go build:生成以目录名命名的可执行文件原创 2019-04-22 11:14:45 · 4105 阅读 · 0 评论 -
windows下通过cgo引用静态库
结论:windows下引用.lib形式的静态库是不可以的。在go build的时候,会出现# command-line-arguments Warning: corrupt .drectve at end of def file错误。在运行的时候,会出现Segmentation fault错误。补充:windows下通过cgo引用.dll形式的动态库,没有任何问题。虽然wi...原创 2019-04-21 17:30:41 · 3533 阅读 · 1 评论 -
如何理解go语言中的闭包
对于闭包的理解,按照下面2点切入即可:1,闭包函数的返回值是函数2,返回的函数绑定在闭包函数内一个变量上。对于第2条如果不好理解的话,可以这么理解。把外层的函数去掉,把函数内定义的变量想象成全局变量,把返回的函数想象成普通函数。本质上,就是返回了一个函数,这个函数内操作的变量是在另一个函数中定义的,而且是以引用的形式被调用。一个闭包只有没有外界引用时,才会连同状态一起被销毁。典...原创 2019-03-07 16:07:50 · 975 阅读 · 0 评论 -
mac下vscode安装go扩展失败的解决方法
网上搜索了很多方法来解决安装go扩展失败的问题,很多回答都比较乱,自己按照下面的步骤解决了问题。// 路径下创建此文件mkdir -p $GOPATH/src/golang.org/x// 切换到此目录cd $GOPATH/src/golang.org/x// 通过git安装 toolsgit clone https://github.com/golang/tools....原创 2019-03-10 22:56:40 · 3170 阅读 · 4 评论 -
go中如何实现继承
go中面向对象归纳为2方面,结构体struct和接口interface。对于结构体struct,通过匿名成员的方式实现继承,比如,Student继承了Mentype Men struct { name string age int}type Student struct { Men score int}对于接口interface,通过直接引入另...原创 2019-04-04 15:54:00 · 1569 阅读 · 0 评论 -
go语言如何引用别的文件的内容
go不同文件之间的相互引用靠包来实现,总结下来就是:1,文件夹就是包,文件夹名就是包名2,同一文件夹(包)下的所有文件可以视为同一文件,也就是可以随意拆分或者合并为一个或多个 go 文件都没有影响,文件名对程序也没有影响3,同一文件夹(包)下的所有文件, package name 必须一致。4,如果要使用其他文件夹(包)下的资源,使用 import 导包, import 导包的路径...原创 2019-03-27 00:04:08 · 20689 阅读 · 2 评论 -
go中的面向对象
在开发go的时候,不免与c++进行对比,发现确实有先进之处。就拿面向对象来举例吧。go中通过struct关键字实现类似于c++中的类这个概念。通过在struct中添加匿名字段的方式,来实现类似于c++中的继承。通过在struct对象,或者struct指针对象上绑定函数,此时的函数在go中称作method,来实现c++中类的成员方法。总结就是,c++中的成员变量通过struct内的字段来实现,c...原创 2019-04-10 15:05:06 · 245 阅读 · 0 评论 -
如何理解go中的interface接口
对于go语言中interface接口的理解,有一个疑问:既然接口只保存了函数,那么他到底有没有操作实际对象呢?如果操作的话,是怎么操作实际对象的?答案:是。怎么操作的,请看一层一层的解释。1,假设有一个结构体,通过绑定method的形式,实现了一个接口所需要的所有方法。那么它就可以理解为一个接口的实现。本身结构体中除了method以外,还有别的字段,那么就可以通过method修改字段的值,...原创 2019-04-10 16:39:04 · 217 阅读 · 0 评论 -
go语言实现session管理架构图
原创 2019-04-10 23:44:51 · 533 阅读 · 0 评论 -
go语言如何编译成库
将go语言编译成自己想要的库,需要经历下面几个步骤:1,代码首行package的名字就是所期望的库的名字2,代码所在文件夹的名字和package名字必须保持一致3,在文件夹下运行go install命令,完成库的编译和安装4,安装之后的目录是GOPATH/pkg + 源码所在文件夹相对于GOPATH/src的路径...原创 2019-04-08 22:46:55 · 2843 阅读 · 0 评论 -
对go中defer机制的理解
看下面一道题。package mainimport "fmt"func calc(index string, a, b int) int { ret := a + b fmt.Println(index, a, b, ret) return ret}func main() { a := 3 b := 2 defer calc("1", a, calc("10", a...原创 2019-04-15 09:58:57 · 1636 阅读 · 0 评论 -
go在实现对象和指针上同时调用method的闪光点
对于go语言而言,通过对象和指针这两种方式调用method都可以,因为Go知道receiver是指针,他自动帮你转了。也就是说:如果一个method的receiver是*T,你可以在一个T类型的实例变量V上面调用这个method,而不需要&V去调用这个method类似的如果一个method的receiver是T,你可以在一个*T类型的变量P上面调用这个method,而...原创 2019-04-09 23:40:57 · 236 阅读 · 0 评论 -
【go入坑教程】go中的接口到底是什么?
前提条件:对go中函数和方法这个概念有了解。go接口描述:接口类型是由一组方法定义的集合。如何理解?接口的类型是一个集合,这个集合里面包含各种各样的方法。 接口类型的值可以存放实现这些方法的任何值。如何理解?定义一个接口类型的变量,这个变量可以被赋值为任何实现了接口类型中方法的类型的对象。代码讲解:package mainimport ( "fmt" "mat...原创 2019-01-02 10:36:26 · 739 阅读 · 0 评论