1. package import和export
GO語言中package用於封裝一個相對獨立的功能提供給外部使用。package有如下特徵
1.1 package會對應一個目錄
這點與Java類似
1.2 package中的原始碼存放目錄是package最後一個/結束的准,如package math/rand,那麼所原始碼都在rand目錄下
1.3 main是一個特殊的package名字,類似Java的main函數,GO的可執行程式必須在main package下
1.4 package中的原始碼存放目錄是package最後一個/結束的准,如package math/rand,那麼所原始碼都在rand目錄下
1.5 原始碼檔案中,以大寫字母開頭的函數才會被匯出(外部存取)。這點類似Java和存取權限控制,只是太隱晦了。
但是比Python的約定底線(_)開頭的函數是內建函式但是外部還是可以訪問有進步一些。
1.6 import package兩種形式
import "fmt"
import "math/rand"
import(
"fmt"
"mat/rand"
)
2. function
2.1 函數申明可以沒有參數,但是函數申明最末尾必須要有括弧
這點不像Ruby那麼靈活,函數申明和調用都可以省略到括弧。 Python在某個版本中也可以省略,但是後來發現代碼風格不統一,所以在Python3.0裡面肯定不支援不帶括弧的函數申明和調用了。
package main
import "fmt"
func main() {
fmt.Println(add(42, 13))
}
2.2 函數的參數和傳回值類型,都是寫在最後
這點與Java,C完全是反的,所以也好記。當然也沒有什麼對與錯,習慣就好了。
package main
import "fmt"
func add(x int, y int) int {
return x + y
}
2.3 參數類型如果相同,前面類型申明可以省略,只在最後定義前面所有變數類型
package main
import "fmt"
func add(int, y int) int {
return x + y
}
2.4 可以返回多個值
這個是進階語言必須的。Java,C這種不支援多傳回型別的,當通過返回數組來替代時,然後通過index取數組的值又是魔鬼數字,這時候真抓狂!
package main
import "fmt"
func swap(x, y string) (string, string) {
return y, x
}
func main() {
a, b := swap("hello", "world")
fmt.Println(a, b)
}
2.5 函數體內的變數可以通過在函數申明中作為函數傳回值
package main
import "fmt"
func split(sum int) (x, y int) {
x = sum * 4 / 9
y = sum - x
return
}
func main() {
fmt.Println(split(17))
}