大家好,這是我生平第一次參加鐵人賽,好緊張,好刺激,想要透過比賽來強迫自己學習程式語言,希望可以在30天後學會 go 語言。這一系列文章會參考 Google資深工程師深度講解Go語言 ,以及在之後文章中有引用其他網站之內容或範例的地方,於文末註明參考來源。如果有人發現任何錯誤內容或是未註明參考的地方,請麻煩告訴我,小弟感激不敬。
常用的變數宣告商方式有兩種,分別為 var 與 := 的方式, var 的方式後面會先接變數名稱,然後是資料型態,以這種方式宣告的情況通常是用於未知初始值的狀況或作為全域變數,初始值預設為0或空值,或者同時宣告多個變數;另一種 := 的方式則是先變數名稱,然後 := ,後面接上數值,不用定義資料型態,透過後面的數值會自動賦予資料型態,使用時機通常會用來承接函數所返回的值,或者在已知初始值的情況下使用,但要注意的點是 := 無法作為全域變數的宣告方式,只可在函數中使用,可參考以下範例,想看更詳細的範例可參考 30天學會Golang
// 放在函數外的皆為全域變數,Day04會介紹函數,先不用急
var num int // num = 0
var (
global_num int // global_num = 0
global_str string // global_str = ""
)
func main() {
fmt.Println(num, global_num, global_str) // 透過fmt.Println(...)可看到變數的值
num := 2022 // num = 2022
local_num, local_str := 2, "world" // local_num = 2, local_str = "world"
fmt.Println(num, local_num, local_str)
}
大部分的型態與其他語言類似,就不再贅述,而型態後面的數字就是精確的程度,數字越大,精確程度也越大,但記憶體佔用量也會相對應較大,因此精確的程度可依據需求做調整。其中與其他語言比較不一樣值得一提的是 rune 與 byte 的差異,如果是將英文或數字轉換為 unicode ,那麼 rune 與 byte 看不出差異,但是如果是轉換如中文字,則能看出其差別,例子如下
func main() {
str := "鐵人30day"
fmt.Println([]rune(str)) // [37941 20154 51 48 100 97 121]
fmt.Println([]byte(str)) // [233 144 181 228 186 186 51 48 100 97 121]
}
從上面可以看到 "鐵人30day" 總共有7個字所組成,將其轉換為 rune 的型態,可以看到有7個數字,前面兩個特別大的數字就是"鐵人"轉換出來的數字,而後面接5個2~3位數的數字則是英文與數字所轉換成 unicode 的結果,但是直接轉換成 byte 的型態時,可以看到總共有11個數字,可以看到後面的5個數字都是一樣的,所代表的就是 "30day" ,但是前面的 "鐵人" 兩個字則是由6個數字所組成,這是因為中文字基本是由3~4個字節所組成,因此當在處理中文字轉換成 unicode 的時候,可以透過 rune 的轉換減少出錯的可能
https://github.com/luckyuho/ithome30-golang/tree/main/day01