RK audio 撥號同時輸出Speaker和USB音訊
阿新 • • 發佈:2021-09-06
結構體定義
type 結構體名 struct{
欄位1 欄位1的型別
欄位2 欄位2的型別
}
結構體初始化
先宣告再賦值
var p person // 宣告一個person型別的變數P
p.name = "名字"
p.age = 18
fmt.Println(p)
宣告同時初始化
鍵值對初始化
var p2 = person{
"理想",
100,
}
fmt.Println(p2)
注意事項
- 兩者不能混用
- 沒有賦值的欄位會使用對應型別的零值
結構體指標
結構體是值型別,賦值的時候都是拷貝
當結構體欄位較多的時候,為了減少記憶體消耗可以傳遞結構體指標
建構函式
返回一個結構體變數的函式,為了例項化結構體的到時候更省事
func newPerson(name string,age int)person{
return person{
name: name,
age: age,
}
}
方法
方法是作用於特定型別的函式
方法的定義:
func (接受者變數 接受者型別) 方法名(引數)返回值{
// 方法體
}
接受者
接受者通常使用型別首字母的小寫,不建議使用this和self這樣的
值接受者和指標接受者的區別
使用值接受者的方法不能修改結構體變數
使用指標接收者的方法可以修改結構體的變數
識別符號
// 識別符號:變數名 函式名 型別名 方法名
匿名欄位
沒有名字的欄位
巢狀結構體
type address struct{
province string
city string
}
type company struct{
name string
addr address // 巢狀
}
匿名巢狀結構體
type address struct{
provice string
city string
}
type company struct{
name string
address // 巢狀匿名結構體
}
匿名巢狀結構體的欄位衝突
先在自己結構體找到這個欄位,找不到就去匿名巢狀的結構體中查詢該欄位
type address struct{
province string
city string
}
type workPlace struct{
province string
city string
}
type person struct{
name string
age int
address
workPlace
}
結構體與json
json:一種跨語言的資料格式,多用於不同語言之間傳遞資料
// 1. 序列化:把go語言中的結構體變數 --> json格式的字串
// 2. 反序列化: json格式的字串 --> go語言中能夠識別的結構體變數
type person struct{
Name string `json:"name" db:"name" ini:"name"`
Age int `json:"age"`
}
func main(){
p1 := person{
Name :"名稱",
Age : 18
}
// 序列化
b, err := json.Marsha1(p1)
if err!=nil{
return
}
// 反序列化
str := `{"name":"a","age":18}`
var p2 person
json.Unmarsha1([]byte(str),&p2)
// 傳指標是為了能夠在json.Unmarsha1內部修改p2的值
}