欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

背景

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

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

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

創(chuàng)建項(xiàng)目并運(yùn)行

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

go build main.go

當(dāng)我們創(chuàng)建 Go 項(xiàng)目然后會(huì)遇到需要不同的二進(jìn)制名稱并且需要在特定的操作系統(tǒng)中創(chuàng)建構(gòu)建,那么可以通過(guò)指定環(huán)境進(jì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

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

使用 Makefile 可以協(xié)助我們高效工作,因?yàn)樗梢詭椭覀兒?jiǎn)化上述命令,甚至可以為特定命令指定規(guī)則并運(yùn)行簡(jiǎn)單的 make 命令,這樣不僅可以讓你免去記住這些命令和環(huán)境的關(guān)系。

添加 Makefile 文件

在當(dāng)前項(xiàng)目的根目錄下創(chuàng)建一個(gè) 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 文件后,就可以通過(guò)這些簡(jiǎn)單的命令進(jìn)行編譯和運(yùn)行你的 Go 項(xiàng)目:

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

以上命令相對(duì)于一開(kāi)始的命令更簡(jiǎn)單,使用簡(jiǎn)單,也可以避免因輸出命令導(dǎo)致的相關(guān)錯(cuò)誤。

Makefile

概念

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

  • 目標(biāo) Target:make 命令通過(guò)目標(biāo)名稱執(zhí)行具體命令。如上的 make run
  • 依賴項(xiàng) Dependencies:目標(biāo)可以具有需要在運(yùn)行目標(biāo)之前執(zhí)行的依賴項(xiàng)
  • 配方 recipe:運(yùn)行目標(biāo)時(shí)將執(zhí)行的實(shí)際命令

變量

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

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

= 將遞歸擴(kuò)展變量。 這將替換它被替換時(shí)的值。以下例子在運(yùn)行 all 命令時(shí),它會(huì)將 x 的值替換為最后更新的值。因此將打印:later bar。 例如:

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

但是當(dāng)你使用 := 進(jìn)行變量賦值時(shí),將打印第一次的值,比如:

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

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

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

在開(kāi)發(fā)項(xiàng)目時(shí),可以將一些測(cè)試,運(yùn)行測(cè)試覆蓋,管理依賴等工作,我們都可以創(chuàng)建一個(gè) Makefile ,并在文件中包含自動(dòng)化這些任務(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

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

make test
make test_coverage
make dep
make vet
make lint

參考資料:

http://www.dbjr.com.cn/article/256709.htm

tutorialedge.net/golang/make…

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

相關(guān)文章

  • go for range遍歷二維數(shù)組的示例

    go for range遍歷二維數(shù)組的示例

    今天小編就為大家分享一篇關(guān)于go for range遍歷二維數(shù)組的示例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-04-04
  • Golang實(shí)現(xiàn)HTTP編程請(qǐng)求和響應(yīng)

    Golang實(shí)現(xiàn)HTTP編程請(qǐng)求和響應(yīng)

    本文主要介紹了Golang實(shí)現(xiàn)HTTP編程請(qǐng)求和響應(yīng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 淺析Go語(yǔ)言中的同步與異步處理

    淺析Go語(yǔ)言中的同步與異步處理

    在開(kāi)發(fā)過(guò)程中,當(dāng)需要同時(shí)處理多個(gè)操作時(shí),開(kāi)發(fā)者經(jīng)常面臨同步和異步兩種處理方式的選擇,下面小編就來(lái)和大家詳細(xì)介紹一下Go語(yǔ)言中的同步與異步處理吧
    2023-11-11
  • Go項(xiàng)目的目錄結(jié)構(gòu)詳解

    Go項(xiàng)目的目錄結(jié)構(gòu)詳解

    這篇文章主要介紹了Go項(xiàng)目的目錄結(jié)構(gòu),對(duì)基礎(chǔ)目錄做了講解,對(duì)項(xiàng)目開(kāi)發(fā)中的其它目錄也一并做了介紹,需要的朋友可以參考下
    2014-10-10
  • Go語(yǔ)言string,int,int64 ,float之間類型轉(zhuǎn)換方法

    Go語(yǔ)言string,int,int64 ,float之間類型轉(zhuǎn)換方法

    Go語(yǔ)言中int類型和string類型都是屬于基本數(shù)據(jù)類型,兩種類型的轉(zhuǎn)化都非常簡(jiǎn)單。下面通過(guò)本文給大家分享Go語(yǔ)言string,int,int64 ,float之間類型轉(zhuǎn)換方法,感興趣的朋友一起看看吧
    2017-07-07
  • Go語(yǔ)言struct類型介紹

    Go語(yǔ)言struct類型介紹

    這篇文章主要介紹了Go語(yǔ)言struct類型介紹,本文講解了struct的2種聲明方式,struct的匿名字段等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • 一文詳解在Go中如何使用Viper來(lái)管理配置

    一文詳解在Go中如何使用Viper來(lái)管理配置

    Viper 是一個(gè)功能齊全的 Go 應(yīng)用程序配置庫(kù),支持很多場(chǎng)景。在本文中,我們將深入探討 Viper 的各種用法和使用場(chǎng)景,以幫助讀者更好地了解和使用 Viper 來(lái)管理應(yīng)用程序配置,感興趣的同學(xué)可以參考閱讀
    2023-05-05
  • Go語(yǔ)言七篇入門教程三函數(shù)方法及接口

    Go語(yǔ)言七篇入門教程三函數(shù)方法及接口

    這篇文章主要為大家介紹了Go語(yǔ)言的函數(shù)方法及接口的示例詳解,本文是Go語(yǔ)言七篇入門系列文章,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • Go關(guān)鍵字defer的使用和底層實(shí)現(xiàn)

    Go關(guān)鍵字defer的使用和底層實(shí)現(xiàn)

    defer是Go語(yǔ)言的關(guān)鍵字,一般用于資源的釋放和異常的捕捉,defer語(yǔ)句后將其后面跟隨的語(yǔ)句進(jìn)行延遲處理,就是說(shuō)在函數(shù)執(zhí)行完畢后再執(zhí)行調(diào)用,也就是return的ret指令之前,本文給大家介紹了Go關(guān)鍵字defer的使用和底層實(shí)現(xiàn),需要的朋友可以參考下
    2023-11-11
  • Go?語(yǔ)言sort?中的sortInts?方法

    Go?語(yǔ)言sort?中的sortInts?方法

    這篇文章主要介紹了Go?語(yǔ)言sort?中的sortInts?方法,Go?的?sort?包實(shí)現(xiàn)了內(nèi)置和用戶定義類型的排序。我們將首先查看內(nèi)置函數(shù)的排序,西瓦嗯更多相關(guān)資料需要的小伙伴可以參考一下
    2022-04-04

最新評(píng)論