Go語言學習草稿 5 結構體

2021-10-23 16:18:06 字數 2440 閱讀 5500

package main

import

("encoding/json"

"fmt"

)type myint int32

// 自定義乙個myint型別, 實際是int32

type intalias =

int64

// 型別別名

func

customtypetest()

// 定義person結構體. 結構體是值型別

type person struct

func

persontest()

fmt.

printf

("%#v\n"

, zf)

// 輸出main.person

}// 匿名結構體

func

anonymousstructtest()

fmt.

printf

("%#v\n"

, zf)

// 輸出struct

}// 結構體指標

func

structpointertest()

}// 結構體初始化賦值

func

structinittest()

fmt.

println

(p1)

var p2 = person

fmt.

println

(p2)

var p3 =

&person

fmt.

println

(p3)

}// 建構函式是返回結構體物件的函式

func

newperson

(name string

, age int32

)*person

}// 結構體的成員函式, 函式名字左邊的是接收者.

// 下面的例子是值接收者.

// 類名和函式名, 如果首字母是大寫, 就有公有(可以被別的包呼叫), 否則就是私有

// 公有類和函式必須有注釋

func

(p person)

printname()

func

printnametest()

// 值接收者會有結構體拷貝過程. 指標接收者就沒有, 例子如下

func

(p *person)

printage()

func

printagetest()

// 只能給本包的自定義型別新增方法

func

(m myint)

printmyint()

func

printmyinttest()

// 匿名字段

// 成員名可以省略, 直接用型別名訪問

type dog struct

func

dogtest()

fmt.

println

(d.int)}

// 結構體巢狀

type cat struct

func

cattest()

,}fmt.

println

(c)// 輸出 }

fmt.

println

(c.person.name)

// 輸出 張飛

// 匿名欄位+結構體巢狀可以直接訪問person中的變數

// 使用匿名結構體巢狀要防止字段衝突

fmt.

println

(c.name)

// 輸出 張飛

}// 通過結構體巢狀模擬"繼承"

func

(p person)

work()

func

simulateextension()

,}// 可以直接訪問匿名巢狀結構體字段的方法

c.work()

// 輸出 張飛正在工作

}// 結構體轉換成json

type person struct

func

structtojson()

str, err := json.

marshal

(p)if err !=

nilelse

fmt.

printf

("%#v\n"

,string

(str)

)// 輸出 ""}}

// json轉換成結構體

func

jsontostruct()

`var p person

err := json.

unmarshal([

]byte

(str)

,&p)

if err !=

nilelse

}}

Go語言學習5 結構體 方法

結構體是使用者定義的型別,表示若干個欄位的集合。有時應該把資料整合在一起,而不是讓這些資料沒有聯絡。go 語言中沒有類的概念,結構體就像是類的一種簡化形式。package main import fmt type employee struct func main creating structur...

Go語言學習草稿 12 測試

package main import strings 待測試的字串切割函式 func split str string sep string string ret ret,str return ret func main 單元測試的檔名必須是原檔名 test package main import...

go語言學習筆記 結構體

go語言中,結構體的宣告非常類似c語言,具體定義方法如下 初始化方法有三種 package main import fmt 定義乙個結構體型別 type student struct func main fmt.println s1 s1 2.部分成員初始化,未初始化的變數被賦值為0 s2 stud...