Go語言的構建方法總結

2021-09-26 04:01:34 字數 3390 閱讀 2619

趁著近期要換工作的空閒時間,看了一下go語言,與c++相比,go語言的確在不少地方輕便了不少,例如:增加了內建的字串型別、多個返回值、支援協程、簡單的構建方法等等。使得在生產效率方面有了不少的提高。今天這裡對go語言的構建方法做個簡單的總結。

在c/c++的工程中,極少使用單個命令來編譯**,一般是通過一些工具來進行自動化的編譯,剛開始的時候手動寫makefile,再後來是繁複的autotools,之後又出現了cmake,按照時間的推移,所需我們做的工作越來越少,例如在autotools我們大致需要如下工作:

autoscan掃瞄工作目錄,之後手動修改生成的configure.ac。

使用aclocal命令,通過configure.ac來生成aclocal.m4。

使用autoconf命令生成configure指令碼。

使用autoheader命令生成config.h.in。

手動建立makefile.am檔案,按照工程需要配置後再使用automake命令來生成makefile.in檔案。

再執行configure指令碼,最後生成makefile。

完成上述步驟後,才可以make,make install 來完成工程的編譯的安裝。而之後的cmake則簡便不少,只需要配置幾個cmakelist.txt,之後執行cmake命令,即可生成編譯和安裝所需的makefile檔案。

雖然隨著技術的發展,c/c++會有更好的構建方法出現。但目前看來,是擺脫不了makefile的,而在go1發布時,捨棄了makefile,直接引入了更為方便的方法:**go命令列工具**。

go命令列工具直接捨棄的工程檔案的概念,只通過目錄結構和包的名字來推倒工程結構和構建順序,下面我們使用乙個簡單的例子(取自《go語言程式設計》)來說明下go中的基本工程管理方法。

這個例子是乙個基於命令列的計算器。基本用法如下所示:

$calc help

usage: calc command [argument] ...

the command are:

sqrt square root of a non-negative value

add addation of two values

$ calc sqrt

4#對4進行開方

2$ calc add 12

3

根據需求,我們可以把工程分為兩個部分,主程式和演算法庫,這樣,當我們演算法進行更新的時候,只修改實現就可以了,而不用修改對外的介面,這樣就可以達到低耦合。工程目錄如下所示:

calculator

|----src

|----calc

|----calc.go

|----******math

|----add.go

|----add_test.go

|----sqrt.go

|----sqrt_test.go

|----bin

|----pkg

在上面,斜體表示目錄,正常文章表示檔案,**xx_test.go表示是對xx.go的單元測試檔案**,這是go工程的命名規則。同時,工程下的目錄src表示是原始碼目錄,bin表示安裝後的可執行程式目錄,pkg表示包目錄,這也是go工程的命名規則。下面就是這個工程的**了。

calc.go

// calc.go
package main
import (
"fmt"
"os"
"******math"
"strconv"
)
var usage = func()
func main()
switch args[0]
v1, err1 := strconv.atoi(args[1])
v2, err2 := strconv.atoi(args[2])
if err1 != nil || err2 != nil
ret := ******math.add(v1, v2)
fmt.println("result: ", ret)
case "sqrt":
if len(args) != 2
v, err := strconv.atoi(args[1])
if err != nil
ret := ******math.sqrt(v)
fmt.println("result: ", ret)
default:
usage()
}
}

add.go

1 

2package ******math

34 func add(a int, b int) int

add_test.go

1 //add_test.go

2package ******math

34 import "testing"

56 func testadd1(t *testing.t)

11 }

sqrt.go

1 

2package ******math

34 import "math"

56 func sqrt(i int) int

由於篇幅問題,sqrt的單元測試**在此省略。

完成**後,就要進行編譯了。首先需要設定環境變數**gopath**的值,將**calcuator的目錄賦給gopath**,儲存後重新載入即可。假設calcuator的目錄是"~/gobuild",那麼在linux下可以執行以下命令:

export gopath=~/gobuild/calcuator

source ~/.bashrc

設定完環境變數後,就可以開始構建工程了,進入calcuator的目錄,執行命令:

cd bin

go build calc

之後就可以在目錄下發現名字為calc的可執行程式。按照先前的功能進行試驗,即可以看到對應的執行結果。

以上就是go進行構建的過程,按照go的要求組織好目錄後,真正進行構建的就只是**go build calc**這條命令。可以說是非常簡單快捷。而同樣,進行單元測試,在bin目錄下執行命令:

go test ******math即可。

以上就是go進行構建的乙個簡單總結。由於是剛開始接觸go語言,如果有錯誤的地方,請指正。謝謝

xiaoniu

[2/30]

Go語言的方法

目錄 方法概述 巢狀結構體中的方法呼叫 方法變數 方法表示式 封裝 儘管go沒有統一的物件導向程式設計 oop 的定義,但依然支援方法 c 中常叫做成員函式 因為對我們來說,物件就是乙個值或變數,並且擁有其方法,而方法是某種特定型別的函式。oop就是使用方法來描述每個資料結構的屬性和操作。go語言的...

Go語言構建自己的區塊鏈

區塊 block.go package core import crypto sha256 encoding hex time 區塊結構 type block struct 計算雜湊值 func calculatehash b block string 生成新的區塊 func generatenew...

go語言 方法

go 語言中沒有類,但是是有方法。方法的定義 func recevier type methodname 引數列表 返回值列表 type school struct func newschool name,addr string school func s school getname string...