1. 程式人生 > 其它 >RK audio 撥號同時輸出Speaker和USB音訊

RK audio 撥號同時輸出Speaker和USB音訊

結構體定義

    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)

注意事項

  1. 兩者不能混用
  2. 沒有賦值的欄位會使用對應型別的零值

結構體指標

結構體是值型別,賦值的時候都是拷貝
當結構體欄位較多的時候,為了減少記憶體消耗可以傳遞結構體指標

建構函式

返回一個結構體變數的函式,為了例項化結構體的到時候更省事

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的值
}