golang
文章平均质量分 94
go语言深度解析
Ethan3014
头发多睡眠足有妹子的程序员
展开
-
OOP with golang
OOP with golang原创 2021-05-24 10:52:38 · 380 阅读 · 0 评论 -
golang interface实现
https://research.swtch.com/interfaces其实看这一个图片就明白了,直接使用interface定义的函数效率是很高的,跟c++的虚函数表一样。itable的填充是在某个具体的值赋值给interface的时候发生的原创 2020-10-10 13:09:05 · 234 阅读 · 1 评论 -
golang option用法
以etcd clientv3为例定义保存参数的结构体// Op represents an Operation that kv can execute.type Op struct { t opType key []byte end []byte}结构体需要导出,但是成员变量不能导出,所以使用方就只能用withoption生成的参数来修改配置,而不能自己生成一个一个Option来修改配置定义Option函数type OpOption func(*Op)定义具体的withxxxo原创 2020-08-26 10:58:59 · 1019 阅读 · 0 评论 -
golang type
golang是强类型的语言,哪怕两个package type xxx struct {yyy}定义的struct内容一摸一样,他们也是不同的type,同理,同一个package里的不同type定义的同一个struct也不一样,测试代码func main() { var i1, i2 interface{} i1 = s1{} i2 = s2{} i3 := struct{}{} m := map[interface{}]string{ i1: "i1", i2:原创 2020-08-20 14:53:23 · 132 阅读 · 0 评论 -
Golang 中哪些值是不可以寻址的
不可以寻址, 指的是不能通过&获得其地址。golang中不能寻址的可以总结为:不可变的,临时结果和不安全的。只要符合其中任何一个条件,它就是不可以寻址的。具体为:常量的值。基本类型值的字面量算术操作的结果值对各种字面量的索引表达式和切片表达式的结果值:不过有一个例外,对切片字面量的索引结果值却是可寻址的。对字符串变量的索引表达式和切片表达式的结果值。对字典变量的索引表达式...原创 2020-05-07 10:33:03 · 996 阅读 · 0 评论 -
golang 官方FAQ
起源项目的目的充分使用多核,并发安全垃圾回收,简单易用快速编译来源于实践,解决google软件开发中的低效问题Clear dependenciesClear syntaxClear semanticsComposition over inheritanceSimplicity provided by the programming model (garbage collect...原创 2020-03-18 16:35:33 · 353 阅读 · 0 评论 -
golang Diagnostics
方法profiling:查看内存和cpu的使用率,定位高频率的函数,发现性能瓶颈tracing:从整个请求的角度看,观察请求穿过的所有span,定位请求延迟,尤其是在链路很长的分布式系统中很有用debugging:可以暂停程序的执行,观察执行过程中的变量和调用栈。最常见的logging无需暂停程序Runtime statistics and events:类似于prometheus暴露的...原创 2020-03-09 16:14:14 · 242 阅读 · 0 评论 -
垃圾回收机制
常见 GC 算法趁着这个机会我总结了一下常见的 GC 算法。分别是:引用计数法、Mark-Sweep法、三色标记法、分代收集法。引用计数法原理是在每个对象内部维护一个整数值,叫做这个对象的引用计数,当对象被引用时引用计数加一,当对象不被引用时引用计数减一。当引用计数为 0 时,自动销毁对象。目前引用计数法主要用在 c++ 标准库的 std::shared_ptr 、微软的 COM 、O...转载 2020-02-13 01:53:58 · 114 阅读 · 0 评论 -
golang调度器
概述go通过goroutine实现用户态的执行流切换,goroutine有几个好处用户态切换(网络或者channel,mutex等),不占用资源可变大小的栈,占用资源少隐藏底层poller(主要是epoll实现的netpoller细节)和调度细节,使用起来简单,以同步方式实现异步的性能G M PG: goroutine,就是平常提到的go中的协程M: machine,线程,就是平...原创 2020-02-13 01:43:20 · 250 阅读 · 0 评论 -
Effective Go
新语言golang是一门新的语言,它有自己的特性和规则,如果直接照搬照抄c++或者java语言的编程经验,而不是根据go语言提供的特性来写程序,那么写出来的程序必定不伦不类。比如我看到一个网络proxy库的作者,对每一个客户端发来的网络请求缓存到一个channel里面,然后开启指定个数的worker去处理这些请求。这完全是没必要的。每个客户端请求直接去访问后端请求就行了,因为go语言已经做了异步...原创 2020-02-07 13:08:35 · 128 阅读 · 0 评论 -
go build条件编译
官方信息pkg/go/buildbuild tagA build constraint, also known as a build tag, is a line comment that begins// +buildthat lists the conditions under which a file should be included in the package必须在文件的...原创 2020-01-22 15:40:48 · 1528 阅读 · 0 评论 -
go test
Usage:go test [build/test flags] [packages] [build/test flags & test binary flags]The go tool will ignore a directory named "testdata", making it available to hold ancillary data needed by the t...原创 2020-01-08 11:31:25 · 137 阅读 · 0 评论 -
go mod
Usage:go mod <command> [arguments]The commands are:download download modules to local cacheedit edit go.mod from tools or scripts graph print module requirement graphinit ...原创 2020-01-08 10:50:04 · 113 阅读 · 0 评论 -
go list
Usage:go list [-f format] [-json] [-m] [list flags] [build flags] [packages]go list其实是列出某一个pkg的详细信息,eg:go list -json github.com/stretchr/testify,最常使用的就是go list ./...列出当前目录的所有packageflags-m flag ca...原创 2020-01-07 11:57:44 · 241 阅读 · 0 评论 -
go get
Usage:go get [-d] [-t] [-u] [-v] [-insecure] [build flags] [packages]Note that package patterns are allowed and are expanded after resolving the module versions. For example, ‘go get golang.org/x/pe...原创 2020-01-07 11:42:15 · 142 阅读 · 0 评论 -
go clean
Usage:go clean [clean flags] [build flags] [packages]删除某一个package的cache,一般来说我们不需要做这个是,go编译会自动分析依赖。但是当某一个依赖彼岸花了很多次的时候,我们可以用这个来清理依赖,eg:go clean -modcache -r google.golang.org/grpcflagsThe -i flag c...原创 2020-01-07 11:16:49 · 455 阅读 · 0 评论 -
go build
文章目录命令featuresbuild flags-a-n-p n-race-msan-v-work-x-asmflags '[pattern=]arg list'-buildmode mode-compiler name-gccgoflags '[pattern=]arg list'-gcflags '[pattern=]arg list'-installsuffix suffix-ldflag...原创 2020-01-05 21:05:00 · 580 阅读 · 0 评论 -
golang 安装
普通安装直接下载tarballtar -C /usr/local -xzf go$VERSION.$OS-$ARCH.tar.gzexport PATH=$PATH:/usr/local/go/binmac有package图形化安装,不推荐多版本安装查看自己想下载的版本, link$ go get golang.org/dl/go1.10.7$ go1.10.7 download...原创 2019-12-27 19:00:58 · 109 阅读 · 0 评论 -
go module
含有go.mod目录下的所有子package构成一个模块。所以我们要import某一个模块下的package也需要下载这整个模块go get带版本版本语义版本import子模块不推荐使用子模块版本不兼容和间接依赖可以使用go mod why来查看间接依赖用go replace来替换不能获取的package因为某些未知原因,并不是所有的包都能直接用go...原创 2019-10-09 11:45:48 · 101 阅读 · 0 评论 -
golang lint
确定要lint的packagego list -f '{{ .ImportPath }}' ./...官方lint这个功能相当强大,建议总是启用–enable-allgithubUsage of golint: golint [flags] # runs on package in current directory golint [flags] [packages] golin...原创 2019-10-10 14:25:11 · 1202 阅读 · 0 评论 -
go test禁止并行执行
go test 默认在每个pkg是串行的除非test文件使用了t.Paranell(),但是在各个pkg之间是并行的。当运行 go test -v ./…等会出现并行。使用 -p 1阻止并行go help testgo help buildThe build flags are shared by the build, clean, get, install, list, run,an...原创 2019-12-04 15:08:26 · 3111 阅读 · 0 评论 -
golang grpc以及gateway
标准protobbufhttps://github.com/golang/protobuf标准grpchttps://github.com/grpc/grpc-gohttps://grpc.io/docs/quickstart/go/go语言增强的gogoprotobufhttps://github.com/gogo/protobuf/使用扩展https://github.com/...原创 2019-12-26 12:02:55 · 642 阅读 · 0 评论 -
go交叉编译
CGO_ENABLED=0 GOOS=xx GOARCH=yy go buildGOOS:目标平台的操作系统(darwin、freebsd、linux、windows)GOARCH:目标平台的体系架构(386、amd64、arm)交叉编译不支持 CGO 所以要禁用它...原创 2019-12-27 11:50:41 · 252 阅读 · 0 评论 -
go语言introduction
官网: link.Go is expressive, concise, clean, and efficient.Its concurrency mechanisms make it easy to write programs that get the most out of multicore and networked machines, while its novel type sy...原创 2019-12-27 11:46:07 · 235 阅读 · 0 评论