iT邦幫忙

2021 iThome 鐵人賽

DAY 3
0

昨天已經能夠透過 Go 印出 Hello World 了,今天要來認識資料型別,
如果都準備妥妥的,那我們就開始吧 ─=≡Σ(((っ゚∀゚)っ

資料型別

由於 Go 在宣告變數或是函式前,會有加上型別的需求,因此了解有哪些常用的型別非常重要。

基本型別

字串 string : "Hello""Amazing"
布林值 bool : TrueFalse
整數 int : 12328825252
浮點數 float64 : 0.314100.002

字串及數字的型別還能再分得更多更細,但在接下來的學習過程可能不會使用到,就先跳過不提。

集合型別

array 與 slice

array 和 slice 在資料的結構上基本上是相同的,但是 array 需要在 [] 指定值的數量,因此長度會是固定的。

// [n]type {data}
// n 陣列元素數量、type 陣列元素類型、data 值

[]int
[5]int {1, 2, 3, 4, 5}

初次碰到 array 竟然會指定長度這件事嚇了好大一跳,想說資料不可能每次都固定長度啊,我不想學了...(開玩笑的)

但其實 slice 才更像平常常用的陣列形式,slice 不需要指定長度,使用上更具彈性及實用性。而兩者相同的部分在於陣列內的資料的屬性必須相同,因此字串只能是字串,數字就只能是數字。

關於更詳細的 slice 使用方式,後續會再花篇幅解釋(・ω・)b

// slice

[]string {"Hello", "It's", "Amazing!"}
[]int {5, 2, 0}

map

map 是以 key: value 為組合的集合,可以透過 key 找到對應的 value。
特別需要注意的是 key 的資料型別必須一致,value 的資料型別也必須一致。

// [] 內放 key 的資料型態,外面放 value 的資料型態
map[string]string{} // => 得到一個空 map

// {} 內的值必須符合定義的型別
map[string]string{"name": "Ba", "age": "18"}

函式

函式在程式語言的輸入輸出中扮演了很重要的角色,Go 的 package 也是依賴函式在做輸出,就來看看函式是如何宣告及應用吧:

// 最基本的起手式
func plus(){
    // to do...
}

// 如果想要有輸入參數,則需要規定傳入的型態
func plus(a int, b int) {
    fmt.Println(a + b)
}

// 如果有 return 值,也要幫他加上型態
func plus(a int, b int) int {
    return a + b
}

Pointer 指標

指標是用來指向值所存放記憶體位置,並非值本身。因此可以透過記憶體位置,取得在那個記憶體位置的值。

*T 為 type 的指標

var p *int

& 會指向該變數的記憶體位置,如果有透過指標更改變數的值的話,原本在記憶體位置內的值就會被更動。

i := 10
p = &i

fmt.Println(*p) // => 10
*p = 21
fmt.Println(i) // => 21

Struct

可以作為自定義型別來使用。

type Cat struct {
    Name string
    Age  int
}

fat := Cat{"BuiBui", 5}

結論

這次沒講到的 goroutine 以及 channel 可以說是 Go 相當大的特色,由於還沒好好了解,待後續篇章再來好好了解及解釋。

今天先到這邊,有任何建議及問題都歡迎與我討論 :)


上一篇
Day2 # Hello World
下一篇
Day4# 變數宣告
系列文
30 天學 Golang?Go 啦哪次不 Go20
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言