[A Tour of Go 學習筆記] 01 Packages 和 Functions
使用官方教學瞭解 Go 語言基本套件包和函數的基礎
初入 Golang 的世界,首先我們使用官方教學:A Tour of Go
來認識基本的 Golang 使用
本篇包含基本套件包和函數的基礎
Hello World
第一個就是跑不掉的Hello World
package main
import "fmt"
func main() {
fmt.Println("Hello World")
}
Packages
每個 Go 語言程式都是由 packages 組成
程式會從 package main
開始執行
import
底下範例中,引入了fmt
和math/rand
兩個套件包
按照慣例 package 的名稱與導入路徑的最後一個元素相同
例如math/rand
中的方法皆以package rand
開始
package main
import (
"fmt"
"math/rand"
)
func main() {
fmt.Println("My favorite number is", rand.Intn(10))
}
除了將要引入的套件寫在import
括弧內的「分組導入」
還有另一種導入方式是寫成多行的 import,但是分組導入是比較好的做法
package main
import "fmt"
import "math"
func main() {
fmt.Printf("Now you have %g problems.\n", math.Sqrt(7))
}
exported name
在 Go 中如果是以大寫字母開頭,則代表他是被導出的、可以在外部使用的
例如:Pizza
就是一個 exported name,而在math
package 裡的Pi
也一樣
而pizza
和pi
就不是一個 exported name,因為不是使用大寫開頭
當在使用 package 的時候,你只能呼叫 exported name 的內容
無法從外部使用任何非導出的內容!
package main
import (
"fmt"
"math"
)
func main() {
fmt.Println(math.Pi)
}
Functions
和其他語言一樣,一個函數可以不傳入參數或傳入多個參數
範例中的add
函數就接收了兩個int
型別的參數
要注意的是型別是定義在參數「後面」
package main
import "fmt"
func add(x int, y int) int {
return x + y
}
func main() {
fmt.Println(add(42, 13))
}
/*
>>> 55
*/
如果是傳入連續多個同樣型別的參數,可以忽略前面幾個參數的型別宣告
只在最後一個後宣告,把x int, y int
換成x, y int
package main
import "fmt"
func add(x, y int) int {
return x + y
}
func main() {
fmt.Println(add(42, 13))
}
/*
>>> 55
*/
回傳多個值
一個函數可以返回任意數量的結果
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)
}
/*
>>> world hello
*/
也可以對回傳值進行命名
在函數的最上方將回傳值命名後,會被視為函數內的變數
不帶任何參數的return
會回傳已經命名好的回傳值,也就是直接返回(“naked” return)
回傳值命名應具有意義,可以做為文件使用
Naked return 只應該被用在簡短的函數中,因為在比較長的函數中這麼做會影響程式可讀性
package main
import "fmt"
func split(sum int) (x, y int) {
x = sum * 4 / 9
y = sum - x
return
}
func main() {
fmt.Println(split(19))
}
/*
>>> 4 5
*/