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 有三個重點:

  1. 定義名為 main 的 package,裡面包含一個名為 main() 的 function
  2. import 需要的 lib。fmt 類似其他語言 console lib,可以將訊息 print 出來
  3. 呼叫 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 命名規則:

  1. 全小寫命名
  2. 不用複數s,如:urls 應改成 url
  3. 盡量簡潔

package 的限制:

  1. 一個資料夾裡的原始檔必須屬於同個 package
  2. 同個 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()

留言

熱門文章