趁著近期要換工作的空閒時間,看了一下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 helpusage: 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
12package ******math
34 func add(a int, b int) int
add_test.go
1 //add_test.go2package ******math
34 import "testing"
56 func testadd1(t *testing.t)
11 }
sqrt.go
12package ******math
34 import "math"
56 func sqrt(i int) int
由於篇幅問題,sqrt的單元測試**在此省略。
完成**後,就要進行編譯了。首先需要設定環境變數**gopath**的值,將**calcuator的目錄賦給gopath**,儲存後重新載入即可。假設calcuator的目錄是"~/gobuild",那麼在linux下可以執行以下命令:
export gopath=~/gobuild/calcuatorsource ~/.bashrc
設定完環境變數後,就可以開始構建工程了,進入calcuator的目錄,執行命令:
cd bingo 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...