介紹
按照慣例,本文從 “ Hello,World!”開始。這是一個簡單而完整的第一個程序,也是確保正確配置環境的好方法。
我們將完成在Go中創建該程序的過程,如下所示:
Output
Please enter your name. Alex Hello, Alex! I'm Go!
準備條件
在開始本教程之前,您將需要在計算機上設置本地開發環境,如果你是mac系統,可以參見我之前的介紹:
Go語言學習:如何在macOS上安裝Go并設置本地編程環境
其他系統差別不大,請自行準備。
第1步-構建“ Hello,World!”程序的基本結構
一個完整的go程序,需要制定一個清晰的目錄結構,良好的結構可以幫助我們導航代碼,了解重要內容并快速定位需要修改的內容。
良好的項目結構將使您的代碼庫更容易擴展。
項目結構沒有約定的規范,個人根據自己的情況設定,一般來說,下面是一個比較好的結構:
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!”程序
我們進入cmd 目錄,要編寫“ Hello,World!”程序,請打開一個命令行文本編輯器,例如nano并創建一個新文件:
$cd ./cmd $nano main.go
在終端窗口中打開文本文件后,您將輸入程序:
hello.go
$nano main.go
讓我們分解代碼的不同組成部分。
package是Go 關鍵字,用于定義此文件屬于哪個軟件包。每個文件夾只能有一個軟件包,并且每個.go文件都必須在其文件頂部聲明相同的軟件包名稱。在此示例中,代碼屬于main包。
import是Go 關鍵字,它告訴Go編譯器您要在此文件中使用哪些其他軟件包。在這里,您可以導入fmt等軟件包。fmt軟件包提供了格式化和打印功能,這些功能在開發時非常有用。
fmt.Println是包裝中的Go 功能,fmt它告訴計算機在屏幕上打印一些文本。
您可以在fmt.Println函數后加上一系列"Hello, World!"用引號引起來的字符,例如。引號內的任何字符都稱為字符串。fmt.Println程序運行時,該函數會將此字符串打印到屏幕上。
nano通過鍵入保存并退出CTRL + X,在提示保存文件時,按Y。
現在我們來測試下程序。
第3步-運行Go程序
編寫“ Hello,World!”程序后,就可以運行該程序了。您將使用go命令,后跟剛剛創建的文件的名稱。
- go run main.go
程序將執行并顯示以下輸出:
Output
Hello, World!
讓我們看看代碼運行的情況。
Go程序需要在運行之前進行編譯。go run在這種情況下main.go,使用文件名進行調用時,該go命令將編譯應用程序,然后運行生成的二進制文件。對于用編譯的編程語言編寫的程序,編譯器將獲取程序的源代碼并生成另一種較低級別的代碼(例如機器代碼)以生成可執行程序。
Go應用程序需要一個main程序包和一個 main()功能作為應用程序的入口點。該main函數不接受任何參數,也不返回任何值。相反,它告訴Go編譯器該程序包應編譯為可執行程序包。
編譯后,通過main()入口來執行代碼。它執行fmt.Println("Hello, World!")通過調用該fmt.Println函數。的字符串值Hello, World!,然后傳遞給函數。在此示例中,該字符串Hello, World!也稱為參數,因為它是傳遞給方法的值。
Hello, World!屏幕上不會顯示兩邊的引號,因為您使用它們來告訴Go字符串的開始和結束位置。
在此步驟中,您已經使用Go創建了一個有效的“ Hello,World!”程序。
在下一步中,您將探索如何使程序更具交互性。
第4步 —提示用戶輸入
每次運行程序時,它都會產生相同的輸出。在此步驟中,您可以將其添加到程序中,以提示用戶輸入其名稱。然后,您將在輸出中使用它們的名稱。
無需修改現有程序,而是greeting.go使用nano編輯器創建一個新程序:
- nano greeting.go
首先,添加以下代碼,提示用戶輸入其名稱:
greeting.go
package main import ( "fmt" ) func main() { fmt.Println("Please enter your name.") }
可以使用該fmt.Println功能在屏幕上打印一些文本。
現在添加代碼來存儲用戶的輸入:
greeting.go
package main import ( "fmt" ) func main() { fmt.Println("Please enter your name.") var name string }
該var name string行將使用var 關鍵字創建一個新變量。您為變量命名name,它將是類型string。
然后,添加突出顯示的行以捕獲用戶的輸入:
greeting.go
package main import ( "fmt" ) func main() { fmt.Println("Please enter your name.") var name string fmt.Scanln(&name) }
該fmt.Scanln方法告訴計算機等待鍵盤輸入以新行或(n)結尾的字符。這將暫停程序,允許用戶輸入所需的任何文本。當用戶按下ENTER鍵盤上的鍵時,程序將繼續。ENTER然后捕獲所有擊鍵,包括擊鍵,并將其轉換為字符串。
您想在程序的輸出中使用這些字符,因此可以通過將它們寫入名為的字符串變量中來保存這些字符name。Go將該字符串存儲在計算機的內存中,直到程序運行完畢。
最后,在程序中添加以下突出顯示的行以打印輸出:
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函數采用字符串,并使用特殊的打印動詞(%s)將值name插入字符串。這樣做是因為Go不支持字符串插值,因為字符串插值可以讓您獲取分配給變量的值并將其放在字符串中。
nano通過按保存并退出CTRL + X,然后Y在提示保存文件時按。
現在運行程序。系統將提示您輸入名稱,請輸入名稱,然后按ENTER。輸出結果可能與您期望的不完全相同:
Output
Please enter your name. Sammy Hi, Sammy ! I'm Go!
而不是Hi, Sammy! I'm Go!,名稱后面有一個換行符。
該程序捕獲了我們所有的按鍵輸入,包括ENTER鍵來告知程序繼續的鍵。
greeting.go在編輯器中打開文件:
- nano greeting.go
程序現在將包含以下內容:
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在提示保存文件時按。
再次運行程序:
- go run greeting.go
這次,在輸入名稱并按之后ENTER,您將獲得預期的輸出:
Output
Please enter your name. Sammy Hi, Sammy! I'm Go!
現在,您有了一個Go程序,該程序可以從用戶處獲取輸入并將其打印回屏幕。
結論
這是一個簡單的入門程序,您可以嘗試使用其他的技術來創建一個Go程序。
點擊關注,如果發現任何不正確的地方,或者想分享有關上述主題的更多信息,歡迎反饋。