《Go語(yǔ)言教程系列》Hello World | Go主題月

回復(fù)“Go語(yǔ)言”即可獲贈(zèng)Python從入門到進(jìn)階共10本電子書(shū)
大家好,我是 @洛竹
本文首發(fā)于 洛竹的官方網(wǎng)站
本文翻譯自 Part 1: Introduction and Installation
本文同步于公眾號(hào)洛竹早茶館,轉(zhuǎn)載請(qǐng)聯(lián)系作者。
這是《Golang 教程系列》的第二篇。如果還沒(méi)有,你可能需要先看一下我們的上一篇教程 Golang 介紹和環(huán)境安裝 以了解一下 Golang 是什么以及如何下載 Golang。
這篇教程是基于 Go 1.16 以上的版本。
學(xué)習(xí)編程語(yǔ)言沒(méi)有比讓自己滿手沾滿代碼的血 ?? 更有效的方法了。讓我們一起開(kāi)始第一個(gè) Go 程序吧。(First Blood)
設(shè)置開(kāi)發(fā)環(huán)境
讓我們先創(chuàng)建一個(gè)編寫(xiě) hello world 程序的文件夾。請(qǐng)打開(kāi)命令行然后運(yùn)行下面的命令:
mkdir?~/Desktop/learngo/
上面的命令將會(huì)在用戶桌面創(chuàng)建一個(gè)名為 learngo 的文件夾(譯者開(kāi)發(fā)環(huán)境為 Macbook Pro)。你可以在任意位置創(chuàng)建目錄編寫(xiě)代碼。
Hello World
使用你喜愛(ài)的文本編輯器在 learngo 文件夾中創(chuàng)建一個(gè)名為 main.go 的文件并寫(xiě)入以下內(nèi)容:
package?main
import?"fmt"
func?main()?{
??fmt.Println("Hello?World")
}
在 Go 中將包含 main 函數(shù)的文件命名為 main.go 是約定俗稱的,但是其他名稱也是可以使用。
運(yùn)行一個(gè)程序
有幾種不同的方式來(lái)運(yùn)行 Go 程序。讓我們一一看一下。
1. go install
第一個(gè)運(yùn)行 Go 程序的方法是使用 go install 命令。讓我們來(lái)使用 cd 命令進(jìn)入剛創(chuàng)建的 learngo 目錄
cd?~/Desktop/learngo/
接著運(yùn)行下面的命令。
go?install
上面的命令將編譯當(dāng)前程序并將其安裝(拷貝)二進(jìn)制可執(zhí)行文件到 ~/go/bin 目錄。二進(jìn)制可執(zhí)行文件的名字是包含 main.go 文件的文件夾名。在我們示例中,它將被命名為 learngo。
當(dāng)你嘗試安裝程序時(shí),你可能會(huì)遇到以下錯(cuò)誤。
go:?cannot?find?main?module;?see?'go?help?modules'
上面的錯(cuò)誤實(shí)際上意味著,go install 無(wú)法找到 main 模塊,這是因?yàn)槲覀儧](méi)有初始化 go modules,我們使用以下命令初始化模塊:
go?mod?init?github.com/youngjuning/learngo
上面的命令會(huì)在 learngo 目錄下創(chuàng)建一個(gè) go.mod 文件,該文件是程序模塊定義的地方,作用類似于 Node 的 package.json 文件。然后我再執(zhí)行 go install 便可以成功。
你可以在命令行輸入 ls -al ~/go/bin/learngo,然后你會(huì)發(fā)現(xiàn) go install 實(shí)際上是把二進(jìn)制可執(zhí)行文件放在了 ~/go/bin 中。
現(xiàn)在讓我們運(yùn)行編譯后的二進(jìn)制可執(zhí)行文件。
~/go/bin/learngo
上面的命令將運(yùn)行 learngo 并打印出以下內(nèi)容:
Hello?World
恭喜你!你已經(jīng)成功地運(yùn)行了你的第一個(gè) Go 程序。
如果你不想每次都輸入完整的 ~/go/bin/learngo 路徑來(lái)運(yùn)行程序,你可以添加 ~/go/bin/ 到你的 PATH 中。
export?GOPATH=~/.go
export?PATH=${PATH}:$GOPATH/bin
現(xiàn)在你可以在命令行中只輸入 learngo 來(lái)運(yùn)行程序。
你可能想知道,當(dāng) learngo 目錄包含多個(gè) Go 文件而不只是只有 main.go 時(shí)會(huì)發(fā)生什么。在這種情況下,go install 將如何工作?請(qǐng)繼續(xù)往下看,我們將在了解軟件包和 Go 模塊時(shí)討論這些內(nèi)容。
2. go build
運(yùn)行程序的第二個(gè)選項(xiàng)是使用 go build。go build 與 go install 非常相似,不同之處在于它不會(huì)將編譯的二進(jìn)制文件安裝(拷貝)到路徑 ~/go/bin/,而是在 go build 所在的文件夾下創(chuàng)建二進(jìn)制文件:
在命令行輸入以下命令來(lái)切換當(dāng)前目錄到 learngo:
cd?~/Desktop/learngo/
然后輸入下面的命令:
go?build
上面的命令將會(huì)在當(dāng)前目錄下創(chuàng)建一個(gè)名為 learngo 的二進(jìn)制可執(zhí)行文件。ls -al 命令可以證實(shí)名為 learngo 的文件被創(chuàng)建了。
輸入 ./learngo 來(lái)運(yùn)行程序,將會(huì)輸入和前面一樣的內(nèi)容:
Hello?World
到此,我們用 go build 也成功地運(yùn)行了我們的第一個(gè) Go 程序 ??
3. go run
第三個(gè)運(yùn)行程序的方法是使用 go run 命令。
在命令行輸入 cd ~/Desktop/learngo 命令來(lái)改變當(dāng)前目錄為 learngo。
然后輸入以下命令。
go?run?main.go
輸入以上命令后,我們也可以看到一樣的輸出:
Hello?World
go run 命令和 go build 或 go install 命令之間的一個(gè)細(xì)微差別是,go run 要求使用 .go 文件的名稱作為參數(shù)。
在引擎蓋下,go run 的工作原理與 go build 非常相似。無(wú)需將程序編譯并安裝到當(dāng)前目錄,而是將文件編譯到一個(gè)臨時(shí)位置并從該位置運(yùn)行文件。如果你想知道 go run 將文件編譯到的位置,請(qǐng)使用 --work 參數(shù)運(yùn)行 go run。
go?run?--work?main.go
在我的場(chǎng)景中,運(yùn)行以上命令會(huì)輸出下面的內(nèi)容:
WORK=/var/folders/mf/_fk8g5jn23gcw970pypqlv4m0000gn/T/go-build3519209434
Hello?World
WORK 的值表示程序?qū)⒈痪幾g到的一個(gè)臨時(shí)位置。
就我的場(chǎng)景而言,程序被編譯到 /var/folders/mf/_fk8g5jn23gcw970pypqlv4m0000gn/T/go-build3519209434 。這可能因你的情況而異 ??
4. Go Playground
運(yùn)行程序的最后一種方法是使用 go playground。盡管此方法有一些限制,但由于我們可以使用瀏覽器并且不需要在本地本地安裝 Go:我已經(jīng)為 Hello World 程序創(chuàng)建了一個(gè) playground。點(diǎn)擊此處 以在線運(yùn)行該程序。
你還可以使用 Go Playground 與他人分享你的源代碼。
既然我們知道 4 種不同的方式來(lái)運(yùn)行程序,那么你可能會(huì)很困惑該使用哪種方法。答案是,當(dāng)我想快速檢查邏輯或找出標(biāo)準(zhǔn)庫(kù)函數(shù)如何工作時(shí),通常使用 playground。在大多數(shù)其他情況下,我更喜歡 go install,因?yàn)樗鼮槲姨峁┝藦慕K端中任何目錄運(yùn)行程序的選項(xiàng),因?yàn)樗鼘⑺谐绦蚓幾g到標(biāo)準(zhǔn)的 ~/go/bin/ 路徑。
對(duì) Hello World 程序的簡(jiǎn)短解析
這是我們剛剛創(chuàng)建的簡(jiǎn)單的 hello world 程序:
package?main
import?"fmt"
func?main()?{
??fmt.Println("Hello?World")
}
我們將簡(jiǎn)要討論該程序的每一行的作用。在接下來(lái)的教程中,我們將深入研究程序的每個(gè)部分。
「package main」 - 每個(gè) go 文件都必須以 package name 開(kāi)始。Packages 用于提供代碼分隔和可重用性。此處使用包名稱 main。主要功能應(yīng)始終保留在 main package 中。
「import "fmt"」 - import 語(yǔ)句用于導(dǎo)入其他軟件包。在我們的例子中,fmt 包被導(dǎo)入,它將在 main 函數(shù)中用于將文本打印到標(biāo)準(zhǔn)輸出。
「func main()」 - func 關(guān)鍵字標(biāo)記函數(shù)的開(kāi)始。main 是一個(gè)特殊函數(shù)。程序從 main 函數(shù)開(kāi)始執(zhí)行。大括號(hào) { 和 } 表示 main 函數(shù)的開(kāi)始和結(jié)束。
「fmt.Println("Hello World")」 - fmt 軟件包的 PrintIn 函數(shù)用于將文本寫(xiě)入標(biāo)準(zhǔn)輸出。package.function() 是在包中調(diào)用函數(shù)的語(yǔ)法。
本文的實(shí)例代碼可以在 github 下載。
-------------------?End?-------------------
歷史文章推薦:

歡迎大家點(diǎn)贊,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持
想加入學(xué)習(xí)群請(qǐng)?jiān)诤笈_(tái)回復(fù)【入群】
萬(wàn)水千山總是情,點(diǎn)個(gè)【在看】行不行
