go 类型 变量 同名_go常用命令

1-安装go

yum install go  (linux系统中yum安装一般不是latest版本)

2-go version

查看版本

2b04786920f2f0a5517a6569810269e5.png

3-go env

环境变量

a926a31afc0d60031227a2e2307b8b79.png

4-修改某个环境变量,比如关系gosum

go env -w GOSUMDB="off"

850b379edfa6da73f95b44e0cf53ac97.png

5-恢复某个go env

go env -u  "GOSUMDB"

8f1f21cf371be04b776c05faceb74964.png

6-查看go  env使用帮助

go help env

730bdb11b1eab8ed62b40aabeaac8a68.png

7--go中最?�的一个命令(小黑这么认为的)

8269fffbc5a794e2dc5b14ade83f08ae.png

8-go run konglong.go

caa5659a6cbd9ed9215647e47d5fabd0.png

8.0.1--go run -race 判断资源变量竞争,多个goroutine是否并发安全

 1

$ go run -race xxxx.go // to run the source xxx gofile

执行命令以及结果

 1[root@konglong kk2020]# 
2[root@konglong kk2020]# go run -race race_01.go 
3==================
4WARNING: DATA RACE
5Read at 0x00c0000180a8 by goroutine 8:
6  main.main.func2()
7      /root/kk2020/race_01.go:17 +0x38
8
9Previous write at 0x00c0000180a8 by goroutine 7:
10  main.main.func1()
11      /root/kk2020/race_01.go:13 +0x4e
12
13Goroutine 8 (running) created at:
14  main.main()
15      /root/kk2020/race_01.go:16 +0x9c
16
17Goroutine 7 (finished) created at:
18  main.main()
19      /root/kk2020/race_01.go:12 +0x7a
20==================
21结束
22exit status 1
23[root@konglong kk2020]# 
24[root@konglong kk2020]# 

对比之前的konglong001.go

830afeda8ccab76c235cf85339215dc3.png

9-go build konglong.go -o konglong

编译一个go文件为可执行,-o代表目的文件名,默认与main函数文件同名,大哥最好尝试几下子,小弟可能说错了

57bd6a17d39a64644004363d509716fe.png

10-go help build

go build一些参数,比如交叉编译,

go build konglong.go -o konglong -GOOS=

fc92eab70dc5c95f22b9a8868a428a01.png

11-使用go mod,go的一个包管理官方工具

74bcbecf124dcfeade0accc16f97ad16.png

12-go mod 常用几个

0bee6179fabaf0f5dbf9d2ffd80edb19.png

13--go tool,go自带工具

93054b64cad3ff49e34f7096bb9482bf.png

14--go tool之看汇编代码

41e7130f0002f18f1f907c3745cb6f37.png

比如这样式的:

go tool  commpile  -S  konglong.go

e9ea61ec752e0d4fb33f0e3cfd8271c2.png

GOOS=linux GOARCH=amd64 go tool compile -l -N -S 

-l 禁止内联

-N 禁止优化

-S 生成汇编代码

e666318ce23c00759e31ebef1b0de101.png

 7[root@konglong kk2020]# GOOS=linux GOARCH=amd64 go tool compile -l -N -S race_01.go 
8"".main STEXT size=355 args=0x0 locals=0x88
9        0x0000 00000 (race_01.go:10)    TEXT    "".main(SB), ABIInternal, $136-0
10        0x0000 00000 (race_01.go:10)    MOVQ    (TLS), CX
11        0x0009 00009 (race_01.go:10)    LEAQ    -8(SP), AX
12        0x000e 00014 (race_01.go:10)    CMPQ    AX, 16(CX)
13        0x0012 00018 (race_01.go:10)    JLS     345
14        0x0018 00024 (race_01.go:10)    SUBQ    $136, SP
15        0x001f 00031 (race_01.go:10)    MOVQ    BP, 128(SP)

---14.0.1补充----go:xxxxxx-----编译指令-----

1

go:xxxxxx
以//go:开头的注释,是编译指令,作用是指定编译器如何编译这段代码
//go:noescape
noescape禁止逃逸,指定文件中的下一个声明必须是不带主题的func(意味着该声明的实现不是用Go编写的),不允许将作为参数传递的任何指针逃逸到堆或函数的返回值上


//go:nosplit
指定文件中声明的函数不得进行堆栈溢出检查,goroutine的栈可以动态自增的。Runtime会追踪每个stack的使用情况。在运行函数之前会进行检查以确保有足够的栈空间来运行该函数。如果不够,代码先进入runtime扩充stack。nosplit指令禁止stack拆分。如果堆栈耗尽,编译器也必须确保运行函数是安全的,不能因为避免了栈检查的开销就让函数使用比被允许空间更多的内存。so,编译器维护一个名为redzone的缓冲区,768字节的,分配在每个goroutines的堆栈框架底部,保证可用。
编译器会跟踪每个函数的堆栈要求。当它遇到一个nosplit函数时,它会累积该函数对redzone的堆栈分配。


//go:linkname localname [importpath.name]
使用[importpath.name]作为源代码中声明的localname的变量或函数。由于该指令可以破坏类型系统和包模块化。只有引用unsafe包才可使用


//go:nowritebarrierrec
编译器如果发现在下面的函数中包含写屏障, 产生一个错误。(这不能阻止写屏障的产生,这只是个断言)


//go:yeswritebarrierrec与nowritebarrierrec相对,遇write屏障产生错误


//go:noinline
禁止内联,内联简单说是简短的函数在调用它的地方展开,函数调用处替换为被调用函数主体的一种编译器优化手段。
注意gcflags='-l -N' 选项在全局范围内禁止优化,作用范围不同


//go:norace
跳过竞态检测


15--go tool之objdump


go tool objdump
反汇编可执行文件
go tool objdump -s “konglong.\main”   konglong

上面的意思是,解析可执行文件konglong,将其中的 konglong 包的 main 方法转成汇编代码


 1[root@konglong xm01]# cat main.go 
2package main
3
4import "fmt"
5
6func main(){
7   fmt.Println("各位大哥好,这是恐龙的写的一个go,for command,今天晴,冷,无风,叶子还没落完,农历十月十九")
8}
9[root@konglong xm01]# 
10[root@konglong xm01]# 
11[root@konglong xm01]# go tool objdump  -h
12usage: go tool objdump [-S] [-s symregexp] binary [start end]
13
14  -S    print go code alongside assembly
15  -s string
16        only dump symbols matching this regexp //支持正则表达式
17[root@konglong xm01]# 
18[root@konglong xm01]# go tool objdump -S  -s "^main"  main 
19TEXT main.main(SB) /root/kk2020/xm01/main.go
20func main(){
21  0x48ce60              64488b0c25f8ffffff      MOVQ FS:0xfffffff8, CX
22  0x48ce69              483b6110                CMPQ 0x10(CX), SP
23  0x48ce6d              7670                    JBE 0x48cedf
24  0x48ce6f              4883ec58                SUBQ $0x58, SP
25  0x48ce73              48896c2450              MOVQ BP, 0x50(SP)
26  0x48ce78              488d6c2450              LEAQ 0x50(SP), BP
27   fmt.Println("各位大哥好,这是恐龙的写的一个go,for command,今天晴,冷,无风,叶子还没落完,农历十月十九")
28  0x48ce7d              0f57c0                  XORPS X0, X0
29  0x48ce80              0f11442440              MOVUPS X0, 0x40(SP)
30  0x48ce85              488d0554130100          LEAQ 0x11354(IP), AX
31  0x48ce8c              4889442440              MOVQ AX, 0x40(SP)
32  0x48ce91              488d0578c10400          LEAQ 0x4c178(IP), AX
33  0x48ce98              4889442448              MOVQ AX, 0x48(SP)
34        return Fprintln(os.Stdout, a...)
35  0x48ce9d              488b05ec020d00          MOVQ os.Stdout(SB), AX
36  0x48cea4              488d0d35d70400          LEAQ go.itab.*os.File,io.Writer(SB), CX
37  0x48ceab              48890c24                MOVQ CX, 0(SP)
38  0x48ceaf              4889442408              MOVQ AX, 0x8(SP)
39  0x48ceb4              488d442440              LEAQ 0x40(SP), AX
40  0x48ceb9              4889442410              MOVQ AX, 0x10(SP)
41  0x48cebe              48c744241801000000      MOVQ $0x1, 0x18(SP)
42  0x48cec7              48c744242001000000      MOVQ $0x1, 0x20(SP)
43  0x48ced0              e8eb97ffff              CALL fmt.Fprintln(SB)
44  0x48ced5              488b6c2450              MOVQ 0x50(SP), BP
45  0x48ceda              4883c458                ADDQ $0x58, SP
46  0x48cede              c3                      RET
47func main(){
48  0x48cedf              e8ec48fcff              CALL runtime.morestack_noctxt(SB)
49  0x48cee4              e977ffffff              JMP main.main(SB)
50[root@konglong xm01]# 
51[root@konglong xm01]# 

16--go install

go install
   这个命令用于编译安装,然后将编译后的生成的执行文件存放到工程的 bin 目录下,将生成的归档文件(即静态链接库)存放到工程的 pkg 目录下。使用方式类似于 go build,可以在某个代码包目录下直接使用,也可以指定代码包使用。

17--go tool pprof

  性能检查工具

 1package main
2
3import (
4    "fmt"
5    "net/http"
6    _ "net/http/pprof"
7)
8
9func main() {
10    fmt.Println("这是一个go pprof 性能监控小 demo")
11    startHttpSvr002()
12}
13
14func startHttpSvr002() {
15    //导入pprof的包,自动包含一些handler,
16    http.HandleFunc("/aa", hand002)
17    http.ListenAndServe(":8999", nil)
18    //在浏览器输入http://localhost:8999/debug/pprof/
19
20
21}
22
23func hand002(w http.ResponseWriter, r *http.Request) {
24    w.Write([]byte("[konglong]--====>" + r.Method))
25    fmt.Println("r===>", r)
26}

在浏览器输入http://localhost:8999/debug/pprof/

caac96f0ee35250a80b44c9dbfc80fb7.png

18-go fmt格式化代码

19.一个nb的调式工具delve

https://github.com/go-delve/delve/blob/master/Documentation/usage/dlv.md

dlv attach pid

grs

gr 2 选中2号协程

locals  查看局部变量

19---->>> 还请大哥补充........

孔小黑子

3bd509cdc6bdc0613785ce140245f627.png
图注:孔小黑进城

小黑心声

谢谢各位大哥观看小黑弟弟
小黑感恩戴德
欢迎大哥批评指正小黑
由衷的感谢大哥 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值