真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Go語(yǔ)言之開發(fā)工具

在Go語(yǔ)言中,我們很多操作都是通過go命令進(jìn)行的,比如我們要執(zhí)行g(shù)o文件的編譯,就需要使用go build命令,除了build命令之外,還有很多常用的命令,這一次我們就統(tǒng)一進(jìn)行介紹,對(duì)常用命令有一個(gè)了解,這樣我們就可以更容易地開發(fā)我們的Go程序了。

創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供東寶網(wǎng)站建設(shè)、東寶做網(wǎng)站、東寶網(wǎng)站設(shè)計(jì)、東寶網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、東寶企業(yè)網(wǎng)站模板建站服務(wù),十多年東寶做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。


Go 開發(fā)工具概覽

go這個(gè)工具,別看名字短小,其實(shí)非常強(qiáng)大,是一個(gè)強(qiáng)大的開發(fā)工具,讓我們打開終端,看看這個(gè)工具有哪些能力。

  ~ go                                                                                                          
Go is a tool for managing Go source code.

Usage:

    go command [arguments]

The commands are:

    build       compile packages and dependencies
    clean       remove object files
    doc         show documentation for package or symbol
    env         print Go environment information
    bug         start a bug report
    fix         run go tool fix on packages
    fmt         run gofmt on package sources
    generate    generate Go files by processing source
    get         download and install packages and dependencies
    install     compile and install packages and dependencies
    list        list packages
    run         compile and run Go program
    test        test packages
    tool        run specified go tool
    version     print Go version
    vet         run go tool vet on packages

Use "go help [command]" for more information about a command.

Additional help topics:

    c           calling between Go and C
    buildmode   description of build modes
    filetype    file types
    gopath      GOPATH environment variable
    environment environment variables
    importpath  import path syntax
    packages    description of package lists
    testflag    description of testing flags
    testfunc    description of testing functions

Use "go help [topic]" for more information about that topic.

可以發(fā)現(xiàn),go支持的子命令很多,同時(shí)還支持查看一些【主題】。我們可以使用go help [command]或者go help [topic]查看一些命令的使用幫助,或者關(guān)于某個(gè)主題的信息。大部分go的命令,都是接受一個(gè)全路徑的包名作為參數(shù),比如我們經(jīng)常用的go build。


go build

go build,是我們非常常用的命令,它可以啟動(dòng)編譯,把我們的包和相關(guān)的依賴編譯成一個(gè)可執(zhí)行的文件。

usage: go build [-o output] [-i] [build flags] [packages]

go build的使用比較簡(jiǎn)潔,所有的參數(shù)都可以忽略,直到只有go build,這個(gè)時(shí)候意味著使用當(dāng)前目錄進(jìn)行編譯,下面的幾條命令是等價(jià)的:

go build

go build .

go build hello.go

以上這三種寫法,都是使用當(dāng)前目錄編譯的意思。因?yàn)槲覀兒雎粤?code>packages,所以自然就使用當(dāng)前目錄進(jìn)行編譯了。從這里我們也可以推測(cè)出,go build本質(zhì)上需要的是一個(gè)路徑,讓編譯器可以找到哪些需要編譯的go文件。packages其實(shí)是一個(gè)相對(duì)路徑,是相對(duì)于我們定義的GOROOTGOPATH這兩個(gè)環(huán)境變量的,所以有了packages這個(gè)參數(shù)后,go build就可以知道哪些需要編譯的go文件了。

go build flysnow.org/tools

這種方式是指定包的方式,這樣會(huì)明確地編譯我們這個(gè)包。當(dāng)然我們也可以使用通配符。

go build flysnow.org/tools/...

3個(gè)點(diǎn)表示匹配所有字符串,這樣go build就會(huì)編譯tools目錄下的所有包。

講到go build編譯,不能不提跨平臺(tái)編譯,Go提供了編譯鏈工具,可以讓我們?cè)谌魏我粋€(gè)開發(fā)平臺(tái)上,編譯出其他平臺(tái)的可執(zhí)行文件。

默認(rèn)情況下,都是根據(jù)我們當(dāng)前的機(jī)器生成的可執(zhí)行文件,比如你的是Linux 64位,就會(huì)生成Linux 64位下的可執(zhí)行文件,比如我的Mac;可以使用go env查看編譯環(huán)境,以下截取重要的部分。

  ~ go env
GOARCH="amd64"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"

注意里面兩個(gè)重要的環(huán)境變量GOOS和GOARCH,其中GOOS指的是目標(biāo)操作系統(tǒng),它的可用值為:

  1. darwin

  2. freebsd

  3. linux

  4. windows

  5. android

  6. dragonfly

  7. netbsd

  8. openbsd

  9. plan9

  10. solaris

一共支持10種操作系統(tǒng)。GOARCH指的是目標(biāo)處理器的架構(gòu),目前支持的有:

  1. arm

  2. arm64

  3. 386

  4. amd64

  5. ppc64

  6. ppc64le

  7. mips64

  8. mips64le

  9. s390x

一共支持9種處理器的架構(gòu),GOOS和GOARCH組合起來(lái),支持生成的可執(zhí)行程序種類很多,具體組合參考:

https://golang.org/doc/install/source#environment

如果我們要生成不同平臺(tái)架構(gòu)的可執(zhí)行程序,只要改變這兩個(gè)環(huán)境變量就可以了,比如要生成Linux 64位的程序,命令如下:

GOOS=linux GOARCH=amd64 go build flysnow.org/hello

前面兩個(gè)賦值,是更改環(huán)境變量,這樣的好處是只針對(duì)本次運(yùn)行有效,不會(huì)更改我們默認(rèn)的配置。

以上這些用法差不多夠我們用的了,更多關(guān)于go build的用戶可以通過以下命令查看:

go help build


go clean

在我們使用go build編譯的時(shí)候,會(huì)產(chǎn)生編譯生成的文件,尤其是在我們簽入代碼的時(shí)候,并不想把我們生成的文件也簽入到我們的Git代碼庫(kù)中,這時(shí)候我們可以手動(dòng)刪除生成的文件,但是有時(shí)候會(huì)忘記,也很麻煩,不小心還是會(huì)提交到Git中。要解決這個(gè)問題,我們可以使用go clean,它可以清理我們編譯生成的文件,比如生成的可執(zhí)行文件,生成obj對(duì)象等。

usage: go clean [-i] [-r] [-n] [-x] [build flags] [packages]

用法和go build基本一樣,這樣不再進(jìn)行詳細(xì)舉例演示,可以參考go build的使用,更多關(guān)于go clean的使用,可以使用如下命令查看:

go help clean


go run

go build是先編譯,然后我們?cè)賵?zhí)行可以執(zhí)行文件來(lái)運(yùn)行我們的程序,需要兩步。go run這個(gè)命令就是可以把這兩步合成一步的命令,節(jié)省了我們錄入的時(shí)間,通過go run命令,我們可以直接看到輸出的結(jié)果。

  ~ go help run
usage: go run [build flags] [-exec xprog] gofiles... [arguments...]

Run compiles and runs the main package comprising the named Go source files.
A Go source file is defined to be a file ending in a literal ".go" suffix.

By default, 'go run' runs the compiled binary directly: 'a.out arguments...'.
If the -exec flag is given, 'go run' invokes the binary using xprog:
    'xprog a.out arguments...'.
If the -exec flag is not given, GOOS or GOARCH is different from the system
default, and a program named go_$GOOS_$GOARCH_exec can be found
on the current search path, 'go run' invokes the binary using that program,
for example 'go_nacl_386_exec a.out arguments...'. This allows execution of
cross-compiled programs when a simulator or other execution method is
available.

For more about build flags, see 'go help build'.

go run命令需要一個(gè)go文件作為參數(shù),這個(gè)go文件必須包含main包和main函數(shù),這樣才可以運(yùn)行,其他的參數(shù)和go build差不多。 在運(yùn)行go run的時(shí)候,如果需要的話,我們可以給我們的程序傳遞參數(shù),比如:

package main

import (
    "fmt"
    "os"
)


func main() {
    fmt.Println("輸入的參數(shù)為:",os.Args[1])
}

打開終端,輸入如下命令執(zhí)行:

go run main.go 12

這時(shí)候我們就可以看到輸出:

輸入的參數(shù)為: 12


go env

在前面講go build的時(shí)候,我們使用了go env命令查看了我們當(dāng)前的go環(huán)境信息。

  hello go help env
usage: go env [var ...]

Env prints Go environment information.

By default env prints information as a shell script
(on Windows, a batch file).  If one or more variable
names is given as arguments,  env prints the value of
each named variable on its own line.

使用go env查看我們的go環(huán)境信息,便于我們進(jìn)行調(diào)試,排錯(cuò)等,因?yàn)橛袝r(shí)候我們會(huì)遇到一些莫名其妙的問題,比如本來(lái)在Mac上開發(fā),怎么編譯出一個(gè)Linux的可執(zhí)行文件等,遇到這類問題時(shí),先查看我們的go環(huán)境信息,看看有沒有哪里配置錯(cuò)了,一步步排錯(cuò)。


go install

從其名字上我們不難猜出這個(gè)命令是做什么的,它和go build類似,不過它可以在編譯后,把生成的可執(zhí)行文件或者庫(kù)安裝到對(duì)應(yīng)的目錄下,以供使用。

  hello go help install
usage: go install [build flags] [packages]

Install compiles and installs the packages named by the import paths,
along with their dependencies.

它的用法和go build差不多,如果不指定一個(gè)包名,就使用當(dāng)前目錄。安裝的目錄都是約定好的,如果生成的是可執(zhí)行文件,那么安裝在$GOPATH/bin目錄下;如果是可引用的庫(kù),那么安裝在$GOPATH/pkg目錄下。


go get

go get命令,可以從網(wǎng)上下載更新指定的包以及依賴的包,并對(duì)它們進(jìn)行編譯和安裝。

go get github.com/spf13/cobra

以上示例,我們就可以從github上直接下載這個(gè)go庫(kù)到我們GOPATH工作空間中,以供我們使用。下載的是整個(gè)源代碼工程,并且會(huì)根據(jù)它們編譯和安裝,和執(zhí)行go install類似。

go get支持大多數(shù)版本控制系統(tǒng)(VCS),比如我們常用的git,通過它和包依賴管理結(jié)合,我們可以在代碼中直接導(dǎo)入網(wǎng)絡(luò)上的包以供我們使用。

如果我們需要更新網(wǎng)絡(luò)上的一個(gè)go工程,加-u 標(biāo)記即可。

go get -u github.com/spf13/cobra

類似的,啟用-v標(biāo)記,可以看到下載的進(jìn)度以及更多的調(diào)試信息。關(guān)于go get 命令的更多用法,可以使用如下命令查看:

go help get


go fmt

這是go提供的最帥的一個(gè)命令了,它可以格式化我們的源代碼的布局和Go源代碼一樣的風(fēng)格,也就是統(tǒng)一代碼風(fēng)格,這樣我們?cè)僖膊挥脼榇罄ㄌ?hào)要不要放到行尾還是另起一行,縮進(jìn)是使用空格還是tab而爭(zhēng)論不休了,都給我們統(tǒng)一了。

func main() { 
    fmt.Println("輸入的參數(shù)為:", os.Args[1]) }

比如以上代碼,我們執(zhí)行go fmt 格式化后,會(huì)變成如下這樣:

func main() {
    fmt.Println("輸入的參數(shù)為:", os.Args[1])
}

go fmt也是接受一個(gè)包名作為參數(shù),如果不傳遞,則使用當(dāng)前目錄。go fmt會(huì)自動(dòng)格式化代碼文件并保存,它本質(zhì)上其實(shí)是調(diào)用的gofmt -l -w這個(gè)命令,我們看下gofmt的使用幫助。

  hello gofmt -h  
usage: gofmt [flags] [path ...]
  -cpuprofile string
        write cpu profile to this file
  -d    display diffs instead of rewriting files
  -e    report all errors (not just the first 10 on different lines)
  -l    list files whose formatting differs from gofmt's
  -r string
        rewrite rule (e.g., 'a[b:len(a)] -> a[b:]')
  -s    simplify code
  -w    write result to (source) file instead of stdout

go fmt 為我們統(tǒng)一了代碼風(fēng)格,這樣我們?cè)谡麄€(gè)團(tuán)隊(duì)協(xié)作中發(fā)現(xiàn),所有代碼都是統(tǒng)一的,像一個(gè)人寫的一樣。所以我們的代碼在提交到git庫(kù)之前,一定要使用go fmt進(jìn)行格式化,現(xiàn)在有很多編輯器可以在保存的時(shí)候,自動(dòng)幫我們格式化代碼。


go vet

這個(gè)命令不會(huì)幫助開發(fā)人員寫代碼,但是它也很有用,因?yàn)樗鼤?huì)幫助我們檢查我們代碼中常見的錯(cuò)誤。

  1. Printf這類的函數(shù)調(diào)用時(shí),類型匹配了錯(cuò)誤的參數(shù)。

  2. 定義常用的方法時(shí),方法簽名錯(cuò)誤。

  3. 錯(cuò)誤的結(jié)構(gòu)標(biāo)簽。

  4. 沒有指定字段名的結(jié)構(gòu)字面量。

package main

import (
    "fmt"
)

func main() {
    fmt.Printf(" 哈哈",3.14)
}

這個(gè)例子是一個(gè)明顯錯(cuò)誤的例子,新手經(jīng)常會(huì)犯,這里我們忘記輸入了格式化的指令符,這種編輯器是檢查不出來(lái)的,但是如果我們使用go vet就可以幫我們檢查出這類常見的小錯(cuò)誤。

  hello go vet
main.go:8: no formatting directive in Printf call

看,提示多明顯。其使用方式和go fmt一樣,也是接受一個(gè)包名作為參數(shù)。

usage: go vet [-n] [-x] [build flags] [packages]

養(yǎng)成在代碼提交或者測(cè)試前,使用go vet檢查代碼的好習(xí)慣,可以避免一些常見問題。

go test

該命令用于Go的單元測(cè)試,它也是接受一個(gè)包名作為參數(shù),如果沒有指定,使用當(dāng)前目錄。 go test運(yùn)行的單元測(cè)試必須符合go的測(cè)試要求。

  1. 寫有單元測(cè)試的文件名,必須以_test.go結(jié)尾。

  2. 測(cè)試文件要包含若干個(gè)測(cè)試函數(shù)。

  3. 這些測(cè)試函數(shù)要以Test為前綴,還要接收一個(gè)*testing.T類型的參數(shù)。

package main

import "testing"

func TestAdd(t *testing.T) {
    if Add(1,2) == 3 {
        t.Log("1+2=3")
    }

    if Add(1,1) == 3 {
        t.Error("1+1=3")
    }
}

這是一個(gè)單元測(cè)試,保存在main_test.go文件中,對(duì)main包里的Add(a,b int)函數(shù)進(jìn)行單元測(cè)試。 如果要運(yùn)行這個(gè)單元測(cè)試,在該文件目錄下,執(zhí)行go test 即可。

  hello go test
PASS
ok      flysnow.org/hello    0.006s

以上是打印輸出,測(cè)試通過。更多關(guān)于go test命令的使用,請(qǐng)通過如下命令查看。

go help test

以上這些,主要介紹的是go這個(gè)開發(fā)工具常用的命令,熟悉了之后可以幫助我們更好地開發(fā)編碼。


新聞標(biāo)題:Go語(yǔ)言之開發(fā)工具
轉(zhuǎn)載來(lái)于:http://weahome.cn/article/pepisp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部