PJCHENder 未整理筆記

[Golang] 資料型別 Data Type

2020-06-04

[Golang] 資料型別 Data Type

Value vs Reference Types

⚠️ 在 Go 中雖然都是 pass by value,但要不要使用 Pointer 端看該變數的型別,某些型別會表現得類似 pass by reference(Reference Types),例如 slice,這時候就可以不用使用 Pointer 即可修改原變數的值。

  • 為什麼有些型別會表現的類似 pass by reference 可以參考「Array and Slice」的內容。

Imgur

Concrete vs Interface Type

  • concrete type 指的是可以被賦值的型別,例如,map, struct, int, string、一些自訂的 type。
  • interface type 無法直接賦值的型別

Zero values

Zero values @ A Tour of Gp

在 GO 中,如果宣告了某個變數但沒有賦值的話,會使用 zero value

Data Type Zero Value
int 0
float64 0
bool false
String “”

型別轉換(Type Conversion)

T(v) 這種方式,可以把 v 的值轉換成 T 這個型別。舉例來說:

1
2
3
4
5
6
7
func main() {
i := 42 // int
f := float64(i) // int 轉成 float64
u := uint(f) // float 64 轉成 uint

fmt.Println(i, f, u)
}

golang

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
func main() {
hello := "Hello World"
helloSlice := string2ByteSlice(hello)
fmt.Println(helloSlice)

helloString := byteSlice2String(helloSlice)
fmt.Println(helloString)
}

// byte slice 轉成 string
func byteSlice2String(b []byte) string {
return string(b)
}

// string 轉成 byte slice
func string2ByteSlice(s string) []byte {
return []byte(s)
}

自定義資料型別

1
2
3
4
5
6
7
8
// 定義 cards 這個型別,它的本質是 slice of strings
type cards []string

// 定義 person 這個型別,它的本質是 struct
type person struct {
firstName string
lastName string
}

透過 function receiver 為該 type 添加方法

我們可以針對自定義的 data type 透過 function receiver 去建立方法,可以參考「[Golang] 函式 function」中的內容。

參考

Tags: Go

掃描二維條碼,分享此文章