golang

Golang之go 命令用法

不问归期 提交于 2019-12-25 01:11:23
Go 命令 Go 命令 Go语言自带有一套完整的命令操作工具,你可以通过在命令行中执行 go 来查看它们: 图1.3 Go命令显示详细的信息 这些命令对于我们平时编写的代码非常有用,接下来就让我们了解一些常用的命令。 go build 这个命令主要用于编译代码。在包的编译过程中,若有必要,会同时编译与之相关联的包。 如果是普通包,就像我们在1.2节中编写的 mymath 包那样,当你执行 go build 之后,它不会产生任何文件。如果你需要在 $GOPATH/pkg 下生成相应的文件,那就得执行 go install 。 如果是 main 包,当你执行 go build 之后,它就会在当前目录下生成一个可执行文件。如果你需要在 $GOPATH/bin 下生成相应的文件,需要执行 go install ,或者使用 go build -o 路径/a.exe 。 如果某个项目文件夹下有多个文件,而你只想编译某个文件,就可在 go build 之后加上文件名,例如 go build a.go ; go build 命令默认会编译当前目录下的所有go文件。 你也可以指定编译输出的文件名。例如1.2节中的 mathapp 应用,我们可以指定 go build -o astaxie.exe ,默认情况是你的package名(非main包),或者是第一个源文件的文件名(main包)。 (注

golang module

。_饼干妹妹 提交于 2019-12-24 16:16:08
一、使用手册 1. 使用方法: go mod <command> [arguments] 2. 具体命令 download: download modules to local cache(下载依赖包) edit: edit go.mod from tools or scripts(编辑 go.mod) graph: print module requirement graph(打印模块依赖图) init: initialize new module in current directory(在当前目录初始化 mod) tidy: add missing and remove unused modules(拉取缺少的模块,移除不用的模块) vendor: make vendored copy of dependencies(将依赖复制到vendor下) verify: verify dependencies have expected content(验证依赖是否正确) why: explain why packages or modules are needed(解释为什么需要依赖) 二、使用前准备 1. 终端输入 export GO111MODULE=on 2. GO111MODULE 说明 GO111MODULE 有三个值: off , on 和 auto(默认值) (1

Golang FlameGraph(火焰图)

混江龙づ霸主 提交于 2019-12-24 14:48:03
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 简介 初学golang(一个月多),之前主要用其他语言,如有问题欢迎指出。 安装 go get github.com/uber/go-torch # 再安装 brendangregg/FlameGraph export PATH=$PATH:/absolute/path/FlameGraph-master # 还需要安装一个graphviz用来画内存图 yum install graphviz 代码修改 import "net/http" import _ "net/http/pprof" func main() { // 主函数中添加 go func() { http.HandleFunc("/program/html", htmlHandler) // 用来查看自定义的内容 log.Println(http.ListenAndServe("0.0.0.0:8080", nil)) }() } 使用 # 用 -u 分析CPU使用情况 ./go-torch -u http://127.0.0.1:8080 # 用 -alloc_space 来分析内存的临时分配情况 ./go-torch -alloc_space http://127.0.0.1:8080/debug/pprof/heap --colors

golang 如何排查和定位GC问题

你离开我真会死。 提交于 2019-12-24 14:47:48
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 最近在做文本处理的时候遇到一个很奇怪的现象。串行执行脚本可能只需要几秒钟,但是如果想给每行开个协程并发处理的话,执行时间却从几十秒到几十分钟不等,关键是执行的过程中cpu的占用并不高。经过一系列的分析之后确认是gc导致的。所以想讲一下排查gc问题的一些小技巧,之后也会给出一些case: 一。如何查看程序运行过程中的GC信息呢? 设置gctrace的变量值为1即可,这个既可以设置成环境变量,也可以选择按如下方式执行: GODEBUG=gctrace=1 go run main.go //GODEBUG=gctrace=1 ./main GODEBUG=gctrace=1 代表只针对这个进程开启gc追踪功能。程序输出如下: 对于上面每一行每一列的具体含义: gc 1 @0.038s 1%: 0.55+0.12+0.081 ms clock, 2.2+0/0.42/1.1+0.32 ms cpu, 4->4->0 MB, 5 MB goal, 4 P。 1 表示第一次执行 @0.038s 表示程序执行的总时间 1% 垃圾回收时间占用总的运行时间百分比 0.018+1.3+0.076 ms clock 垃圾回收的时间,分别为STW(stop-the-world)清扫的时间, 并发标记和扫描的时间,STW标记的时间 0

golang的channel实现

夙愿已清 提交于 2019-12-23 23:41:27
golang 的 channel 实现位于 src/runtime/chan.go 文件。 golang 中的 channel 对应的结构是 : // Invariants: // At least one of c.sendq and c.recvq is empty, // except for the case of an unbuffered channel with a single goroutine // blocked on it for both sending and receiving using a select statement, // in which case the length of c.sendq and c.recvq is limited only by the // size of the select statement. // // For buffered channels, also: // c.qcount > 0 implies that c.recvq is empty. // c.qcount < c.dataqsiz implies that c.sendq is empty. type hchan struct { qcount uint // total data in the queue dataqsiz uint

【GoLang】golang 报管理工具 Godep 介绍

大城市里の小女人 提交于 2019-12-23 01:18:07
使用方法: 提交: cd ${GOPATH}/src/github.com/junneyang/xcloud godep save -v ./... rm -rf vendor/ git checkout --force git init git pull https://github.com/junneyang/xcloud.git master git add --all git commit -m "initial commit" git remote add origin https://github.com/junneyang/xcloud.git git push origin master 使用: mkdir -p ${GOPATH}/src/github.com/junneyang cd $_ && git clone https://github.com/junneyang/xcloud.git -b release3.1 cd ${GOPATH}/src/github.com/junneyang/xcloud godep get -v ./... godep/None go install -v ./... godep/None go test -v ./... 参考开源项目codis https://github.com/CodisLabs/codis

Go Hello World!

情到浓时终转凉″ 提交于 2019-12-22 06:17:01
有些事应该坚持去做 当你半途而废的时候意味着你又要重新开始。那么 Golang Hello world! Java Android 新手 学习 Golang First Day ! go 语言下载: https://golang.org/dl go 项目环境配置: GOPATH: 我的是在G盘 G:\GoProject ok 配置完毕 wind+R, cmd go env查看: 接下来 用运行hello world 在GOProject 里面新建Hello.go文件 不是txt 文件 记事本或者Notepad++打开 package main import "fmt" func main(){ fmt.Printf("hello,Girl\n")//个人习惯 嘿嘿 } (接下来用Sublime Text3 hello Go! 下载地址 : http://www.sublimetext.com/3 比较 轻量级 这一点比较爽 AS好占内存的 == View + Show Console : https://packagecontrol.io/installation#st3 复制 Sublime Text 3 部分代码 enter。 靠 安装Go sublime的时候卡住了 算了 用liteide算了 上面那种工具有时间在折腾吧(明天找到原因自己补上)).

把别人的Tcl/Tk代码加入到Go语言里13 游戏6 消除方块

偶尔善良 提交于 2019-12-21 23:42:28
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> a 首先打开网页 http://wiki.tcl.tk/10287 b 把网页里提到的tcl/tk代码复制到如下go源代码的init_script字符串常量里 package main import "github.com/nsf/gothic" const init_script = ` #把Tcl/Tk源代码复制到这个常量里 ` func main() { ir := gothic . NewInterpreter ( init_script ) <- ir . Done } c 在LiteIDE里或命令行里go run go代码文件,运行效果如下 来源: oschina 链接: https://my.oschina.net/u/2315579/blog/414273

GO_05_2:Golang 中 panic、recover、defer 的用法

旧时模样 提交于 2019-12-21 15:10:02
函数 defer   1. 它的执行方式类似其他语言中的折构函数,在函数体执行结束后按照调用顺序的 相反顺序 逐个执行   2. 即使函数发生 严重错误 也会被执行,类似于 java 中 try{...} catch(){} finally{} 结构的 finally   3. 支持匿名函数的调用   4. 常用于资源清理、文件关闭、解锁以及记录时间等善后操作   5. 通过与匿名函数配合可在 return 之后修改函数计算结果   6. 如果函数体内某个变量作为 defer 时匿名函数的参数,则在定义 defer 时即已经获得了拷贝,否则则是引用某个变量的地址   7. 需要注意,Go 没有异常机制,但有 panic/recover 模式来处理错误   8. panic 可以在任何地方引发,但 recover 只有在 defer 调用的函数中有效 首先我们来验证一下 defer函数的执行顺序 package main import "fmt" func main() { fmt.Println("a") defer fmt.Println("b") defer fmt.Println("c") defer fmt.Println("d") } a d c b 我们从结果就可以看出来 defer函数 执行顺序为倒着来的,即和栈相似,先进后出的顺序。 panic/recover 函数

使用 Elastic Stack 来监控和调优 Golang 应用程序

吃可爱长大的小学妹 提交于 2019-12-21 04:03:10
Golang 因为其语法简单,上手快且方便部署正被越来越多的开发者所青睐,一个 Golang 程序开发好了之后,势必要关心其运行情况,今天在这里就给大家介绍一下如果使用 Elastic Stack 来分析 Golang 程序的内存使用情况,方便对 Golang 程序做长期监控进而调优和诊断,甚至发现一些潜在的内存泄露等问题。 Elastic Stack 其实是一个集合,包含 Elasticsearch、Logstash 和 Beats 这几个开源软件,而 Beats 又包含 Filebeat、Packetbeat、Winlogbeat、Metricbeat 和新出的 Heartbeat,呵呵,有点多吧,恩,每个 beat 做的事情不一样,没关系,今天主要用到 Elasticsearch、Metricbeat 和 Kibana 就行了。 Metricbeat 是一个专门用来获取服务器或应用服务内部运行指标数据的收集程序,也是 Golang 写的,部署包比较小才10M 左右,对目标服务器的部署环境也没有依赖,内存资源占用和 CPU 开销也较小,目前除了可以监控服务器本身的资源使用情况外,还支持常见的应用服务器和服务,目前支持列表如下: Apache Module Couchbase Module Docker Module HAProxy Module kafka Module