Go 語言結(jié)構(gòu)
在我們開始學習 Go 編程語言的基礎(chǔ)構(gòu)建模塊前,讓我們先來了解 Go 語言最簡單程序的結(jié)構(gòu)。
Go Hello World 實例
Go 語言的基礎(chǔ)組成有以下幾個部分:
- 包聲明
- 引入包
- 函數(shù)
- 變量
- 語句 & 表達式
- 注釋
接下來讓我們來看下簡單的代碼,該代碼輸出了"Hello World!":
實例
package main
import "fmt"
func main() {
/* 這是我的第一個簡單的程序 */
fmt.Println("Hello, World!")
}
讓我們來看下以上程序的各個部分:
-
第一行代碼?package main?定義了包名。你必須在源文件中非注釋的第一行指明這個文件屬于哪個包,如:package main。package main表示一個可獨立執(zhí)行的程序,每個 Go 應(yīng)用程序都包含一個名為 main 的包。
-
下一行?import “fmt”?告訴 Go 編譯器這個程序需要使用 fmt 包(的函數(shù),或其他元素),fmt 包實現(xiàn)了格式化 IO(輸入/輸出)的函數(shù)。
-
下一行?func main()?是程序開始執(zhí)行的函數(shù)。main 函數(shù)是每一個可執(zhí)行程序所必須包含的,一般來說都是在啟動后第一個執(zhí)行的函數(shù)(如果有 init() 函數(shù)則會先執(zhí)行該函數(shù))。
-
下一行 /…/ 是注釋,在程序執(zhí)行時將被忽略。單行注釋是最常見的注釋形式,你可以在任何地方使用以 // 開頭的單行注釋。多行注釋也叫塊注釋,均已以 /* 開頭,并以 */ 結(jié)尾,且不可以嵌套使用,多行注釋一般用于包的文檔描述或注釋成塊的代碼片段。
-
下一行?fmt.Println(…)?可以將字符串輸出到控制臺,并在最后自動增加換行字符 \n。
使用 fmt.Print(“hello, world\n”) 可以得到相同的結(jié)果。
Print 和 Println 這兩個函數(shù)也支持使用變量,如:fmt.Println(arr)。如果沒有特別指定,它們會以默認的打印格式將變量 arr 輸出到控制臺。 -
當標識符(包括常量、變量、類型、函數(shù)名、結(jié)構(gòu)字段等等)以一個大寫字母開頭,如:Group1,那么使用這種形式的標識符的對象就可以被外部包的代碼所使用(客戶端程序需要先導入這個包),這被稱為導出(像面向?qū)ο笳Z言中的 public);標識符如果以小寫字母開頭,則對包外是不可見的,但是他們在整個包的內(nèi)部是可見并且可用的(像面向?qū)ο笳Z言中的 protected )。
執(zhí)行 Go 程序
讓我們來看下如何編寫 Go 代碼并執(zhí)行它。步驟如下:
-
打開編輯器如vscode,將以上代碼添加到編輯器中。
-
將以上代碼保存為?test.go
-
打開命令行,并進入程序文件保存的目錄中。
-
輸入命令?go run test.go?并按回車執(zhí)行代碼。
-
如果操作正確你將在屏幕上看到?“Hello World!”?字樣的輸出。
$ go run test.go
Hello, World! -
我們還可以使用?go build?命令來生成二進制文件:
$ go build test.go
$ ls
hello????test.go
$ ./test
Hello, World!
注意
需要注意的是?{?不能單獨放在一行,所以以下代碼在運行時會產(chǎn)生錯誤:
錯誤實例
package main
import "fmt"
func main()
{ // 錯誤,{ 不能在單獨的行上
fmt.Println("Hello, World!")
}
補充
當前的調(diào)試部分可以使用?go run filename.go?來執(zhí)行。
可以生成一個?build.sh?腳本,用于在指定位置產(chǎn)生已編譯好的 可執(zhí)文件:
#!/usr/bin/env bash
CURRENT_DIR=`pwd`
OLD_GO_PATH="$GOPATH" #例如: /usr/local/go
OLD_GO_BIN="$GOBIN" #例如: /usr/local/go/bin
export GOPATH="$CURRENT_DIR"
export GOBIN="$CURRENT_DIR/bin"
#指定并整理當前的源碼路徑
gofmt -w src
go install test_hello
export GOPATH="$OLD_GO_PATH"
export GOBIN="$OLD_GO_BIN"
Golang1.13 以上版本注意
mian.go:19:2: "./myMata/" is relative, but relative import paths are not supported in module mode
這個錯誤是因為在Go 1.13及以上版本中,相對路徑的導入方式不再被支持。相反,應(yīng)該使用絕對路徑或者使用Go Modules來管理依賴關(guān)系。
如果您使用的是Go Modules,請確保在go.mod
文件中正確地聲明了依賴關(guān)系。例如,如果您的go.mod
文件中包含以下內(nèi)容:
module example.com/myapp
go 1.14
require (
github.com/example/mymath v1.0.0
)
則應(yīng)該使用以下方式來導入mymath
包:
package main
import (
"fmt"
"example.com/myapp/mymath"
)
func main() {
fmt.Println(mymath.Add(1, 2))
fmt.Println(mymath.Sub(1, 2))
}
如果您沒有使用Go Modules,請考慮使用絕對路徑來導入包。例如,如果您的項目結(jié)構(gòu)如下:
myapp/
├── main.go
└── mymath/
└── mathClass.go
則應(yīng)該使用以下方式來導入mathClass
包:文章來源:http://www.zghlxwxcb.cn/news/detail-495804.html
package main
import (
"fmt"
"myapp/mymath"
)
func main() {
fmt.Println(mymath.Add(1, 2))
fmt.Println(mymath.Sub(1, 2))
}
注意,這里使用的是絕對路徑myapp/mymath
來導入包。在命令行中,使用以下命令來編譯和運行該代碼:文章來源地址http://www.zghlxwxcb.cn/news/detail-495804.html
go run main.go
到了這里,關(guān)于Golang:Go語言結(jié)構(gòu)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!