複習完 package 之後,注意到「輸出文字」的 Println 綁在這個模組內
import "fmt"
想說這個 fmt 是不是類似 C 的 stdio.h,查了之後發現 fmt 主要管理的是「格式化 I/O」,fmt 其實就是 format,看來都是屬於標準庫,只是功能更專一。
不過發現一件神奇的事,我隨便一查就查到了三種 print 的方式:
嚴格來說還有第四個,Go 極少數的 builtin "println",不過在官方文件明確指出這是 "for debugging",短期內我也不要去亂用會比較好...
慢慢推敲太麻煩了,直接讓 GPT 整理出這三種 Print 的差異:
| 功能 | Println | Printf | |
|---|---|---|---|
| 自動空格 | ✅ | ✅ | ❌ |
| 自動換行 | ✅ | ❌ | ❌ |
| 格式控制 | ❌ | ❌ | ✅ |
對比 Python 一個 print 魔法打天下,Go 的 functions 真的是拆得非常明確...
寫 Python 寫多來寫這個可能會感到厭煩呢,不過隨著專案越來越大,好像還是這樣更好一點,查都查了就來實操一遍。
package main
import (
"fmt"
"math/rand"
)
func main() {
fmt.Println("My favorite number is", rand.Intn(10))
fmt.Print("My favorite number is", rand.Intn(10))
fmt.Printf("\nMy favorite number is %d and %d", rand.Intn(10), rand.Intn(10))
}
[Running] go run "d:\Program FIles\GoNote\hello.go"
My favorite number is 9
My favorite number is9
My favorite number is 0 and 0
有一些沒看過的佔位符,這邊紀錄一下:
| 符號 | 意思 |
|---|---|
%v |
數值(任意型別) |
%T |
型別本身 |
總算是可以繼續往下學了,來到 Packages, variables, and functions.,沒想到 Go 的型別是寫在參數後面,甚至 function 的形式有好幾種,感覺還蠻酷的
func add(x int, y int) int {
return x + y
}
func divide(a, b int) (int, int) {
return a / b, a % b
}
甚至還可以預先命名回傳的參數,return 後面就不用指定參數了,感覺我會非常喜歡這個寫法!
func split(sum int) (x, y int) {
x = sum * 4 / 9
y = sum - x
return
}
[Running] go run "d:\Program FIles\GoNote\hello.go"
7 10
還有跟 Python 一樣的符號 ":=",不過用途有點差異,這個符號只能在 function 內使用,而且是 declare + assign,所以應該就是拿來快速宣告區域內一些過度用的變數,像是迴圈:
func main() {
sum := 0
for i := 0; i < 10; i++ {
sum += i
}
fmt.Println(sum)
}
這樣看下來真的是比 C 方便很多,又比 Python 嚴謹很多,感覺挺奇妙的。
而且 Go 只有 for 這個迴圈敘述,把 for 三個元素之間的分號去掉,只留中間條件式,就變成了 while:
func main() {
sum := 1
for sum < 1000 {
sum += sum
}
fmt.Println(sum)
}
1024
if else 就沒有什麼特別的了,今天進度總算是多了一點點,Tour of Go 內甚至還有例題可以寫,把 for 的寫完就可以休息了~