Map即是一種利用Key-Value方式來對應的資料格式,有點類似於Python的dict
。
意指裡頭的資料結構皆是由一組關鍵字
對應一個值
(Key-Value
)的方式存在。
var Variable = map[Type]Type{}
可以像這樣bool
對應到string
package main
import "fmt"
func main() {
var prize = map[int]string{
1: "First",
2: "Second",
}
fmt.Println(prize[1])
}
運行後可得以下結果
First
透過for range
關鍵字,遍歷造訪結構內的每個元素
package main
import "fmt"
func main() {
var prize = map[int]string{
1: "First",
2: "Second",
}
for key, value := range prize {
fmt.Println(key, value)
}
}
運行後可得以下結果
1 First
2 Second
Struct就是種有著類似物件導向觀念的物件集合體,你可以定義該資料集合內資料組成的結構與型別,與Python中的class
類似。
結構裡面可以放多個變數(int
、string
、slice
、map
..etc)、物件甚至是結構。
首先介紹一個簡單的範例:
package main
import (
"fmt"
)
type Point struct {
x float64
y float64
}
func main() {
p := Point{x: 3.0, y: 4.0}
fmt.Println(p.x)
fmt.Println(p.y)
n := new(Point)
fmt.Println(n)
fmt.Println(n.x)
fmt.Println(n.y)
}
運行後得以下結果
3
4
&{0 0}
0
0
我們可以得知使用struct
的宣告與取值相當的簡單,此外new一個新的struct object之後,若無賦予裡頭變數值,會依照他的type給預設值。
此外,幾種宣告Struct的方式如下:
package main
import "fmt"
type Res struct {
Status string `json:"status"`
Msg string `json:"msg"`
}
func main() {
res1 := new(Res)
var res2 = new(Res)
var res3 *Res
res4 := &Res{
Status: "failed",
}
fmt.Println(res1, res2, res3, res4)
fmt.Printf("%+v %+v %+v %+v",res1, res2, res3, res4)
}
運行後可得以下結果
&{ } &{ } <nil> &{failed }
&{Status: Msg:} &{Status: Msg:} <nil> &{Status:failed Msg:}
package main
import (
"fmt"
)
type Box struct {
Pencil string
Eraser string
}
type Bag struct {
Box
Book string
}
func main() {
var bag = Bag{
Box{Pencil: "Big Pencil", Eraser: "White White"},
"Ironman-2021-Go",
}
fmt.Printf("%+v", bag)
}
運行後得以下結果
{Box:{Pencil:Big Pencil Eraser:White White} Book:Ironman-2021-Go}
我們可以利用struct
做到多層次的巢狀結構!
如果將main()
中的var Bag
改成 &Bag
package main
import (
"fmt"
)
type Box struct {
Pencil string
Eraser string
}
type Bag struct {
Box
Book string
}
func main() {
var bag = &Bag{
Box{Pencil: "Big Pencil", Eraser: "White White"},
"Ironman-2021-Go",
}
fmt.Printf("%+v", *bag)
}
印出bag 就要透過*
來取值
{Box:{Pencil:Big Pencil Eraser:White White} Book:Ironman-2021-Go}
如果將Bag裡的Box
改成*Box
package main
import (
"fmt"
)
type Box struct {
Pencil string
Eraser string
}
type Bag struct {
*Box
Book string
}
func main() {
var bag = Bag{
&Box{Pencil: "Big Pencil", Eraser: "White White"},
"Ironman-2021-Go",
}
fmt.Printf("%+v", bag)
}
這樣子就會印出bag
的位址
{Box:0xc000054020 Book:Ironman-2021-Go}
這章節為大家演繹了兩種經常使用的資料結構,分別為map
與struct
,那在下個章節會在介紹function
與interface
給大家認識,敬請期待。