介紹
按照慣例,本文從 “ Hello,World!”開始。這是一個(gè)簡(jiǎn)單而完整的第一個(gè)程序,也是確保正確配置環(huán)境的好方法。
我們將完成在Go中創(chuàng)建該程序的過程,如下所示:
Output
Please enter your name. Alex Hello, Alex! I'm Go!
準(zhǔn)備條件
在開始本教程之前,您將需要在計(jì)算機(jī)上設(shè)置本地開發(fā)環(huán)境,如果你是mac系統(tǒng),可以參見我之前的介紹:
Go語(yǔ)言學(xué)習(xí):如何在macOS上安裝Go并設(shè)置本地編程環(huán)境
其他系統(tǒng)差別不大,請(qǐng)自行準(zhǔn)備。
第1步-構(gòu)建“ Hello,World!”程序的基本結(jié)構(gòu)
一個(gè)完整的go程序,需要制定一個(gè)清晰的目錄結(jié)構(gòu),良好的結(jié)構(gòu)可以幫助我們導(dǎo)航代碼,了解重要內(nèi)容并快速定位需要修改的內(nèi)容。
良好的項(xiàng)目結(jié)構(gòu)將使您的代碼庫(kù)更容易擴(kuò)展。
項(xiàng)目結(jié)構(gòu)沒有約定的規(guī)范,個(gè)人根據(jù)自己的情況設(shè)定,一般來說,下面是一個(gè)比較好的結(jié)構(gòu):
cmd/ binaryname/ main.go # a small file glueing things together internal/ data/ types.go types_test.go # unit tests are right here (...) pkg/ api/ types.go # REST API input and output types test/ smoketest.py ui/ index.html README.md Makefile
第2步-編寫基本的“ Hello,World!”程序
我們進(jìn)入cmd 目錄,要編寫“ Hello,World!”程序,請(qǐng)打開一個(gè)命令行文本編輯器,例如nano并創(chuàng)建一個(gè)新文件:
$cd ./cmd $nano main.go
在終端窗口中打開文本文件后,您將輸入程序:
hello.go
$nano main.go
讓我們分解代碼的不同組成部分。
package是Go 關(guān)鍵字,用于定義此文件屬于哪個(gè)軟件包。每個(gè)文件夾只能有一個(gè)軟件包,并且每個(gè).go文件都必須在其文件頂部聲明相同的軟件包名稱。在此示例中,代碼屬于main包。
import是Go 關(guān)鍵字,它告訴Go編譯器您要在此文件中使用哪些其他軟件包。在這里,您可以導(dǎo)入fmt等軟件包。fmt軟件包提供了格式化和打印功能,這些功能在開發(fā)時(shí)非常有用。
fmt.Println是包裝中的Go 功能,fmt它告訴計(jì)算機(jī)在屏幕上打印一些文本。
您可以在fmt.Println函數(shù)后加上一系列"Hello, World!"用引號(hào)引起來的字符,例如。引號(hào)內(nèi)的任何字符都稱為字符串。fmt.Println程序運(yùn)行時(shí),該函數(shù)會(huì)將此字符串打印到屏幕上。
nano通過鍵入保存并退出CTRL + X,在提示保存文件時(shí),按Y。
現(xiàn)在我們來測(cè)試下程序。
第3步-運(yùn)行Go程序
編寫“ Hello,World!”程序后,就可以運(yùn)行該程序了。您將使用go命令,后跟剛剛創(chuàng)建的文件的名稱。
- go run main.go
程序?qū)?zhí)行并顯示以下輸出:
Output
Hello, World!
讓我們看看代碼運(yùn)行的情況。
Go程序需要在運(yùn)行之前進(jìn)行編譯。go run在這種情況下main.go,使用文件名進(jìn)行調(diào)用時(shí),該go命令將編譯應(yīng)用程序,然后運(yùn)行生成的二進(jìn)制文件。對(duì)于用編譯的編程語(yǔ)言編寫的程序,編譯器將獲取程序的源代碼并生成另一種較低級(jí)別的代碼(例如機(jī)器代碼)以生成可執(zhí)行程序。
Go應(yīng)用程序需要一個(gè)main程序包和一個(gè) main()功能作為應(yīng)用程序的入口點(diǎn)。該main函數(shù)不接受任何參數(shù),也不返回任何值。相反,它告訴Go編譯器該程序包應(yīng)編譯為可執(zhí)行程序包。
編譯后,通過main()入口來執(zhí)行代碼。它執(zhí)行fmt.Println("Hello, World!")通過調(diào)用該fmt.Println函數(shù)。的字符串值Hello, World!,然后傳遞給函數(shù)。在此示例中,該字符串Hello, World!也稱為參數(shù),因?yàn)樗莻鬟f給方法的值。
Hello, World!屏幕上不會(huì)顯示兩邊的引號(hào),因?yàn)槟褂盟鼈儊砀嬖VGo字符串的開始和結(jié)束位置。
在此步驟中,您已經(jīng)使用Go創(chuàng)建了一個(gè)有效的“ Hello,World!”程序。
在下一步中,您將探索如何使程序更具交互性。
第4步 —提示用戶輸入
每次運(yùn)行程序時(shí),它都會(huì)產(chǎn)生相同的輸出。在此步驟中,您可以將其添加到程序中,以提示用戶輸入其名稱。然后,您將在輸出中使用它們的名稱。
無需修改現(xiàn)有程序,而是greeting.go使用nano編輯器創(chuàng)建一個(gè)新程序:
- nano greeting.go
首先,添加以下代碼,提示用戶輸入其名稱:
greeting.go
package main import ( "fmt" ) func main() { fmt.Println("Please enter your name.") }
可以使用該fmt.Println功能在屏幕上打印一些文本。
現(xiàn)在添加代碼來存儲(chǔ)用戶的輸入:
greeting.go
package main import ( "fmt" ) func main() { fmt.Println("Please enter your name.") var name string }
該var name string行將使用var 關(guān)鍵字創(chuàng)建一個(gè)新變量。您為變量命名name,它將是類型string。
然后,添加突出顯示的行以捕獲用戶的輸入:
greeting.go
package main import ( "fmt" ) func main() { fmt.Println("Please enter your name.") var name string fmt.Scanln(&name) }
該fmt.Scanln方法告訴計(jì)算機(jī)等待鍵盤輸入以新行或(n)結(jié)尾的字符。這將暫停程序,允許用戶輸入所需的任何文本。當(dāng)用戶按下ENTER鍵盤上的鍵時(shí),程序?qū)⒗^續(xù)。ENTER然后捕獲所有擊鍵,包括擊鍵,并將其轉(zhuǎn)換為字符串。
您想在程序的輸出中使用這些字符,因此可以通過將它們寫入名為的字符串變量中來保存這些字符name。Go將該字符串存儲(chǔ)在計(jì)算機(jī)的內(nèi)存中,直到程序運(yùn)行完畢。
最后,在程序中添加以下突出顯示的行以打印輸出:
greeting.go
package main import ( "fmt" ) func main() { fmt.Println("Please enter your name.") var name string fmt.Scanln(&name) fmt.Printf("Hi, %s! I'm Go!", name) }
fmt.Printf函數(shù)采用字符串,并使用特殊的打印動(dòng)詞(%s)將值name插入字符串。這樣做是因?yàn)镚o不支持字符串插值,因?yàn)樽址逯悼梢宰屇@取分配給變量的值并將其放在字符串中。
nano通過按保存并退出CTRL + X,然后Y在提示保存文件時(shí)按。
現(xiàn)在運(yùn)行程序。系統(tǒng)將提示您輸入名稱,請(qǐng)輸入名稱,然后按ENTER。輸出結(jié)果可能與您期望的不完全相同:
Output
Please enter your name. Sammy Hi, Sammy ! I'm Go!
而不是Hi, Sammy! I'm Go!,名稱后面有一個(gè)換行符。
該程序捕獲了我們所有的按鍵輸入,包括ENTER鍵來告知程序繼續(xù)的鍵。
greeting.go在編輯器中打開文件:
- nano greeting.go
程序現(xiàn)在將包含以下內(nèi)容:
greeting.go
package main import ( "fmt" "strings" ) func main() { fmt.Println("Please enter your name.") var name string fmt.Scanln(&name) fmt.Printf("Hi, %s! I'm Go!", name) name = strings.TrimSpace(name) }
保存并退出nano。按CTRL + X,然后Y在提示保存文件時(shí)按。
再次運(yùn)行程序:
- go run greeting.go
這次,在輸入名稱并按之后ENTER,您將獲得預(yù)期的輸出:
Output
Please enter your name. Sammy Hi, Sammy! I'm Go!
現(xiàn)在,您有了一個(gè)Go程序,該程序可以從用戶處獲取輸入并將其打印回屏幕。
結(jié)論
這是一個(gè)簡(jiǎn)單的入門程序,您可以嘗試使用其他的技術(shù)來創(chuàng)建一個(gè)Go程序。
點(diǎn)擊關(guān)注,如果發(fā)現(xiàn)任何不正確的地方,或者想分享有關(guān)上述主題的更多信息,歡迎反饋。