Go 結構 學習筆記

衣舞晨風發表於2017-08-12

結構struct

  • Go 中的struct與C中的struct非常相似,並且Go沒有class
  • 使用 type struct{} 定義結構,名稱遵循可見性規則
  • 支援指向自身的指標型別成員
  • 支援匿名結構,可用作成員或定義成員變數
  • 匿名結構也可以用於map的值
  • 可以使用字面值對結構進行初始化
  • 允許直接通過指標來讀寫結構成員
  • 相同型別的成員可進行直接拷貝賦值
  • 支援 == 與 !=比較運算子,但不支援 > 或 <
  • 支援匿名欄位,本質上是定義了以某個型別名為名稱的欄位
  • 嵌入結構作為匿名欄位看起來像繼承,但不是繼承
  • 可以使用匿名欄位指標

1、結構值、引用拷貝

package main

import (
    "fmt"
)

type Person struct {
    name string
    age  int
}

func main() {
//這裡也可以通過新增&Person,來實現地址引用
    per := Person{
        name: "jiankunking",
        age:  18,
    }
    fmt.Println(per)
    //傳遞的是值拷貝
    B(per)
    fmt.Println(per)
    C(&per)
    fmt.Println(per)
}

func B(per Person) {
    per.name = "B"
    per.age = 2
    fmt.Println(per)
}

func C(per *Person) {
    per.name = "C"
    per.age = 3
    fmt.Println("per", per)
    fmt.Println("*per", *per)
}

輸出結果:
這裡寫圖片描述

package main

import (
    "fmt"
)

type Person struct {
    name string
    age  int
}

func main() {
    per := Person{
        name: "jiankunking",
        age:  18,
    }
    //不取地址 則傳遞的是值拷貝
    per2222 := per
    per2222.age = 23
    fmt.Println("per", per)
    fmt.Println("per2222", per2222)
}

輸出結果:
這裡寫圖片描述

2、匿名結構

package main

import (
    "fmt"
)

func main() {
    per := &struct {
        name string
        age  int
    }{
        name: "hello",
        age:  12,
    }

    fmt.Println(per)
}

輸出結果:
這裡寫圖片描述

3、巢狀結構

package main

import (
    "fmt"
)

type Person struct {
    name    string
    age     int
    contact struct {
        tel int
        add string
    }
}

func main() {
    per := &Person{
        name: "jiankunking",
        age:  18,
    }
    per.contact.add = "lao shan"
    per.contact.tel = 24923498239489
    fmt.Println(per)
}

輸出結果:
這裡寫圖片描述

4、組合結構

package main

import (
    "fmt"
)

type humman struct {
    sex string
}

type Person struct {
    humman
    name string
    age  int
}

func main() {
    per := Person{
        name: "jiankunking",
        age:  18,
        humman: humman{
            sex: "nan",
        },
    }
    per.sex = "gril"
    fmt.Println("per", per)
}

輸出結果:
這裡寫圖片描述

本文參考整理自:《Go 程式設計基礎》

個人微信公眾號:
這裡寫圖片描述

作者:jiankunking 出處:http://blog.csdn.net/jiankunking

相關文章