最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Makefile構(gòu)建Golang項目示例詳解

 更新時間:2022年07月25日 12:17:25   作者:六號積極分子  
這篇文章主要為大家介紹了Makefile構(gòu)建Golang項目的過程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

背景

構(gòu)建和測試大型項目時都會很耗時,且容易出錯。開發(fā)者在開發(fā)過程中需要不斷執(zhí)行g(shù)o build、go run 、go test等相關(guān)命令。還可能需要多個命令來構(gòu)建不同平臺的二進制文件。在正式部署時候,我們可能還需要安裝一些依賴項,或者在發(fā)布之前進行代碼覆蓋率測試等相關(guān)前置工作。

整個過程需要很多步驟,但我們有一種簡單的方法可以解決這些復雜瑣碎的步驟。使用 Make 進行自動執(zhí)行任務(wù)。它通過單個命令簡化開發(fā)并自動執(zhí)行重復性任務(wù)。

Make 可以幫我們做很多事情:測試、構(gòu)建、清理、安裝 Go 項目。

創(chuàng)建項目并運行

首先我們先創(chuàng)建一個簡單的項目,創(chuàng)建一個 main.go 文件。為了運行項目,我們需要構(gòu)建項目并運行二進制文件:

go build main.go

當我們創(chuàng)建 Go 項目然后會遇到需要不同的二進制名稱并且需要在特定的操作系統(tǒng)中創(chuàng)建構(gòu)建,那么可以通過指定環(huán)境進行構(gòu)建:

# 指定 macos系統(tǒng)
GOARCH=amd64 GOOS=darwin go build -o hello-darwin main.go
# 指定 Linux 操作系統(tǒng)
GOARCH=amd64 GOOS=linux go build -o hello-linux main.go
go run hello

如果在開發(fā)部署過程中,我們不僅要記住這些命令然后遇到不同環(huán)境輸入命令執(zhí)行。在這個過程中你可能會發(fā)生輸錯命令等行為。

使用 Makefile 可以協(xié)助我們高效工作,因為它可以幫助我們簡化上述命令,甚至可以為特定命令指定規(guī)則并運行簡單的 make 命令,這樣不僅可以讓你免去記住這些命令和環(huán)境的關(guān)系。

添加 Makefile 文件

在當前項目的根目錄下創(chuàng)建一個 Makefile 文件,設(shè)置內(nèi)容如下:

BINARY_NAME=hello
build:
 GOARCH=amd64 GOOS=darwin go build -o hello-darwin main.go
 GOARCH=amd64 GOOS=linux go build -o hello-linux main.go
run:
 ./${BINARY_NAME}
build_and_run:build run
clean:
  go clean
  rm ${BINARY_NAME}-darwin
  rm ${BINARY_NAME}-linux

創(chuàng)建完 Makefile 文件后,就可以通過這些簡單的命令進行編譯和運行你的 Go 項目:

make run
make build
# 也可以使用在 makefile 中定義的一個命令:build_and_run
make build_and_run
# 使用清除命令清除二進制文件
make clean

以上命令相對于一開始的命令更簡單,使用簡單,也可以避免因輸出命令導致的相關(guān)錯誤。

Makefile

概念

make 命令都是來源于 Makefile 文件的。其都是由一系列的規(guī)則構(gòu)成。每條規(guī)則都是由目標、依賴項、命令組成。

  • 目標 Target:make 命令通過目標名稱執(zhí)行具體命令。如上的 make run
  • 依賴項 Dependencies:目標可以具有需要在運行目標之前執(zhí)行的依賴項
  • 配方 recipe:運行目標時將執(zhí)行的實際命令

變量

Makefiles 也有使用變量的機制。在以上的 Makefile 文件中,可以看到 ${BINARY_NAME} 的變量。所以當我們有相同的內(nèi)容時可以通過添加變量進行替換。

可以使用 = 或 := 定義變量。

= 將遞歸擴展變量。 這將替換它被替換時的值。以下例子在運行 all 命令時,它會將 x 的值替換為最后更新的值。因此將打印:later bar。 例如:

x = foo
y = $(x) bar
x = later
all:
 echo $(y)

但是當你使用 := 進行變量賦值時,將打印第一次的值,比如:

x := foo
y := $(x) bar
x := later
all:
 echo $(y)
> foo bar

更多使用 makefile 命令,可以參考:makefiletutorial.com/

使用 Makefile 自動化任務(wù)

在開發(fā)項目時,可以將一些測試,運行測試覆蓋,管理依賴等工作,我們都可以創(chuàng)建一個 Makefile ,并在文件中包含自動化這些任務(wù)的所有規(guī)則:

BINARY_NAME=hello
build:
 GOARCH=amd64 GOOS=linux go build -o ${BINARY_NAME}-linux main.go
run:
 ./${BINARY_NAME}
build_and_run: build run
clean:
 go clean
 rm ${BINARY_NAME}-linux
test:
 go test ./...
test_coverage:
 go test ./... -coverprofile=coverage.out
dep:
 go mod download
vet:
 go vet
lint:
 golangci-lint run --enable-all

使用這個簡單的 Makefile,您現(xiàn)在可以輕松地執(zhí)行命令來運行任務(wù)。這樣就輕松自動化解決工作。

make test
make test_coverage
make dep
make vet
make lint

參考資料:

http://m.fzitv.net/article/256709.htm

tutorialedge.net/golang/make…

以上就是Makefile構(gòu)建Golang項目示例詳解的詳細內(nèi)容,更多關(guān)于Makefile構(gòu)建Golang的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 一文詳解Golang中new和make的區(qū)別

    一文詳解Golang中new和make的區(qū)別

    在Go語言中,new和make是兩個用于創(chuàng)建對象的內(nèi)建函數(shù)。本文將詳細介紹new和make的區(qū)別,并通過多個方面的分析和代碼示例,幫助大家理解它們的使用場景
    2023-05-05
  • Golang數(shù)組的傳遞詳解

    Golang數(shù)組的傳遞詳解

    今天小編就為大家分享一篇關(guān)于Golang數(shù)組的傳遞詳解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Golang使用Decimal庫避免運算中精度損失詳細步驟

    Golang使用Decimal庫避免運算中精度損失詳細步驟

    decimal是為了解決Golang中浮點數(shù)計算時精度丟失問題而生的一個庫,使用decimal庫我們可以避免在go中使用浮點數(shù)出現(xiàn)精度丟失的問題,下面這篇文章主要給大家介紹了關(guān)于Golang使用Decimal庫避免運算中精度損失的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • go中sync.RWMutex的源碼解讀

    go中sync.RWMutex的源碼解讀

    本文主要介紹了go中sync.RWMutex的源碼解讀,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-04-04
  • golang獲取變量或?qū)ο箢愋偷膸追N方式總結(jié)

    golang獲取變量或?qū)ο箢愋偷膸追N方式總結(jié)

    在golang中并沒有提供內(nèi)置函數(shù)來獲取變量的類型,但是通過一定的方式也可以獲取,下面這篇文章主要給大家介紹了關(guān)于golang獲取變量或?qū)ο箢愋偷膸追N方式,需要的朋友可以參考下
    2022-12-12
  • Go語言讀取文件的方法小結(jié)

    Go語言讀取文件的方法小結(jié)

    寫程序時經(jīng)常需要從一個文件讀取數(shù)據(jù),然后輸出到另一個文件,這篇文章主要為大家詳細介紹了Go語言讀取文件的幾種方法,希望對大家有所幫助
    2024-01-01
  • 詳解go如何優(yōu)雅的使用接口與繼承

    詳解go如何優(yōu)雅的使用接口與繼承

    Go語言中的接口和嵌套結(jié)構(gòu)體是兩種重要的代碼設(shè)計方式,接口定義了一組方法簽名,使得不同的類型能夠以相同的方式進行交互,本文將給大家介紹go語言如何優(yōu)雅的使用接口與繼承,文中有詳細的代碼供大家參考,需要的朋友可以參考下
    2024-06-06
  • Go語言遍歷循環(huán)的幾種方法

    Go語言遍歷循環(huán)的幾種方法

    遍歷循環(huán)主要用于迭代數(shù)組、切片、映射(map)、字符串等數(shù)據(jù)結(jié)構(gòu),本文主要介紹了Go語言遍歷循環(huán)的幾種方法,下面就來介紹一下,具有一定的參考價值,感興趣的可以了解一下
    2025-03-03
  • Go語言Zap日志庫使用教程

    Go語言Zap日志庫使用教程

    在項目開發(fā)中,經(jīng)常需要把程序運行過程中各種信息記錄下來,有了詳細的日志有助于問題排查和功能優(yōu)化;但如何選擇和使用性能好功能強大的日志庫,這個就需要我們從多角度考慮
    2023-02-02
  • Golang標準庫os/exec執(zhí)行外部命令并獲取其輸出包代碼示例

    Golang標準庫os/exec執(zhí)行外部命令并獲取其輸出包代碼示例

    這篇文章主要為大家介紹了Golang標準庫os/exec執(zhí)行外部命令并獲取其輸出包代碼示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12

最新評論

和平县| 青田县| 宝应县| 大同市| 阿荣旗| 丽江市| 新营市| 普定县| 永德县| 东至县| 温州市| 志丹县| 平邑县| 阳原县| 宜丰县| 德州市| 新竹市| 文昌市| 黄浦区| 虹口区| 沙雅县| 广宁县| 神木县| 厦门市| 额济纳旗| 谢通门县| 岢岚县| 南雄市| 莎车县| 隆回县| 日土县| 台州市| 元氏县| 石门县| 潞西市| 贵溪市| 盐津县| 宜宾县| 高青县| 蒙阴县| 金寨县|