Go筆記-Go命令

go generate

一個簡單的例子:mkdir

package main

//go:generate mkdir ~/test

import (
	"fmt"
)

func main() {
	fmt.Println("go generate test finished.")
}

在命令行中執行shell

go generate -v -n -x /代碼路徑/main.go

輸出:json

go/code/src/main.go
mkdir ~/test

test文件夾也生成了。bash

在程序中執行命令

cmd := exec.Command("hugo", "-t=hyde")
	cmd.Dir = "D:/work/hugo/mysite"
	out, err := cmd.CombinedOutput()
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(string(out))

go test

go test internal/config -run=TestKindsString
  • 在src目錄的父目錄下
  • config是目錄,下面有一些 *_test.go 文件
  • -run 能夠指定執行哪一個測試函數。

go fmt

格式化整個項目並將結果寫入文件: gofmt -l -d -w src/abc函數

golint

golint不能對目錄的子目錄執行,對全部目錄執行的shell方法:測試

find src/push-sms -name "*.go" -exec golint {} \;

go build

ldflags

採用:go build -ldflags "-s -w" 這種方式編譯。優化

解釋一下參數的意思:ui

  • -ldflags: 表示將後面的參數傳給鏈接器(5/6/8l)
  • -s:去掉符號信息
  • -w:去掉DWARF調試信息 注意:

-s 去掉符號表(這樣panic時,stack trace就沒有任何文件名/行號信息了,這等價於普通C/C+=程序被strip的效果)命令行

-w 去掉DWARF調試信息,獲得的程序就不能用gdb調試了3d

兩個能夠分開使用調試

參數列表能夠使用下面的語句查看:

go tool compile -help

gcflags

關閉編譯器代碼優化

go build -gcflags "-N" -o test test.go

關閉函數內聯

go build -gcflags "-l" -o test test.go

同時制定

go build -gcflags "-N -l" -o test test.go

查看編譯優化信息

go build -gcflags "-m" test.go

go list

查看項目引用包

go list -json

go tool objdump

查看生成的彙編代碼

package main

import "fmt"

func main() {
	fmt.Println(*test())
}

func test() *int {
	x := new(int)
	*x = 0xAABB
	return x
}
go tool objdump -s "main\.test" test

輸出:

TEXT main.test(SB) /Users/zhangyuchen/tmp/test.go
	test.go:9	0x20f0	65488b0c25a0080000	GS MOVQ GS:0x8a0, CX
	test.go:9	0x20f9	483b6110		CMPQ 0x10(CX), SP
	test.go:9	0x20fd	7639			JBE 0x2138
	test.go:9	0x20ff	4883ec18		SUBQ $0x18, SP
	test.go:9	0x2103	48896c2410		MOVQ BP, 0x10(SP)
	test.go:9	0x2108	488d6c2410		LEAQ 0x10(SP), BP
	test.go:10	0x210d	488d054c700800		LEAQ 0x8704c(IP), AX
	test.go:10	0x2114	48890424		MOVQ AX, 0(SP)
	test.go:10	0x2118	e8c3c90000		CALL runtime.newobject(SB)
	test.go:10	0x211d	488b442408		MOVQ 0x8(SP), AX
	test.go:11	0x2122	48c700bbaa0000		MOVQ $runtime.mapaccess2_fast64+459(SB), 0(AX)
	test.go:12	0x2129	4889442420		MOVQ AX, 0x20(SP)
	test.go:12	0x212e	488b6c2410		MOVQ 0x10(SP), BP
	test.go:12	0x2133	4883c418		ADDQ $0x18, SP
	test.go:12	0x2137	c3			RET
	test.go:9	0x2138	e803c90400		CALL runtime.morestack_noctxt(SB)
	test.go:9	0x213d	ebb1			JMP main.test(SB)
	:-1		0x213f	cc			INT $0x3
相關文章
相關標籤/搜索