Go語言學習:如何在Go中編寫第一個程序

Go語言學習:如何在Go中編寫第一個程序

介紹

按照慣例,本文從 “ Hello,World!”開始。這是一個簡單而完整的第一個程序,也是確保正確配置環境的好方法。

我們將完成在Go中創建該程序的過程,如下所示:

Output

Please enter your name. Alex Hello, Alex! I'm Go!

準備條件

在開始本教程之前,您將需要在計算機上設置本地開發環境,如果你是mac系統,可以參見我之前的介紹:


其他系統差別不大,請自行準備。

第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程序。


點擊關注,如果發現任何不正確的地方,或者想分享有關上述主題的更多信息,歡迎反饋。


分享到:


相關文章: