GO (0) - Hello world 和相對引用 package
1. Hello world:
Go 的 Hello world 如下:
package main import ( "fmt" ) func main() { fmt.Println("Hello world") }
簡單執行 main.go:
$ go run main.go
Hello world 有三個重點:
- 定義名為 main 的 package,裡面包含一個名為 main() 的 function
- import 需要的 lib。fmt 類似其他語言 console lib,可以將訊息 print 出來
- 呼叫 fmt.Println(), function 的開頭第一個字為大寫
2. 建立簡單的 package:
我們建立一個簡單的 greet package,專案架構如下:
. ├── libs │ └── greet │ └── hi.go └── main.go
hi.go 的程式碼如下,開頭的 package greet 表示它是屬於 greet。
然後定義一個簡單的 Hi(),它會 print 出 "Hi world"
package greet import "fmt" func Hi() { fmt.Println("Hi world") }
在 main 中導入 greet package,導入的方式使用相對路徑。
導入 greet package 後,可以使用 greet package 中定義的 function。
package main import ( "./libs/greet" ) func main() { greet.Hi() }
相對導入是以相對路徑的方式輸入路徑。若改為 libs/greet,程式會變成在 GOPATH 中搜尋 libs 這個 package
3. package 命名規則及限制:
package 命名規則:
- 全小寫命名
- 不用複數s,如:urls 應改成 url
- 盡量簡潔
package 的限制:
- 一個資料夾裡的原始檔必須屬於同個 package
- 同個 package 不可分散到不同資料夾下
考慮一割專案架構如下。hello.go 和 hi.go 都是 greet package,因為同個資料夾只能包含一個 package。
. ├── libs │ └── greet │ ├── hello.go │ └── hi.go └── main.go
4. package 和 import 的關係:
package 名稱和包含 package 的資料夾名字可以不同。
假設我們把資料夾名稱由 greet 改成 foo,但 hello 和 hi 仍屬於 greet。
. ├── libs │ └── foo │ ├── hello.go │ └── hi.go └── main.go
因為 import 需要的是一個資料夾路徑所以在 main 裡會變成 package 名稱和相對路徑:
import greet "./libs/foo"
使用時還是用 package 呼叫 function:
greet.Hi()
留言
張貼留言