七、Go语言——struct

1 struct

  • Go 中的struct与C中的struct非常相似,并且Go没有class
  • 使用 type struct{} 定义结构,名称遵循可见性规则
  • 支持指向自身的指针类型成员
  • 支持匿名结构,可用作成员或定义成员变量
  • 匿名结构也可以用于map的值
  • 可以使用字面值对结构进行初始化
  • 允许直接通过指针来读写结构成员
  • 相同类型的成员可进行直接拷贝赋值
  • 支持 == 与 !=比较运算符,但不支持 > 或 <
  • 支持匿名字段,本质上是定义了以某个类型名为名称的字段
  • 嵌入结构作为匿名字段看起来像继承,但不是继承
  • 可以使用匿名字段指针
package main

import "fmt"

type person struct {
    Name string
    Age  int
}

func main() {
    a := person{}
    a.Name = "John"
    a.Age = 19
    fmt.Println(a)
}

这里写图片描述

package main

import "fmt"

type person struct {
    Name string
    Age  int
}

func main() {
    a := person{
        Name:"Mark",
        Age:20,
    }
    fmt.Println(a)
}
package main

import "fmt"

type person struct {
    Name string
    Age  int
}

func main() {
    a := person{
        Name:"Mark",
        Age:20,
    }
    fmt.Println(a)
    A(a)
    fmt.Println(a)
}
//值拷贝
func A(per person){
    per.Age=10
    fmt.Println("A函数",per)
}

这里写图片描述

package main

import "fmt"

type person struct {
    Name string
    Age  int
}

func main() {
    a := &person{
        Name: "Mark",
        Age:  20,
    }
    a.Name = "George"
    fmt.Println(a)
    A(a)
    fmt.Println(a)
}

func A(per *person) {
    per.Age = 10
    fmt.Println("A函数", per)
}

这里写图片描述

2 匿名结构

package main

import "fmt"

func main() {
    //匿名结构
    a:= struct{
        Name string
        Age int
    }{
        Name:"Mark",
        Age:20,
    }

    fmt.Println(a)
}

这里写图片描述

package main

import "fmt"

type person struct {
    Name    string
    Age     int
    Contact struct {
        Phone, City string
    }
}

func main() {
    a := person{
        Name: "John",
        Age:  18,
    }
    a.Contact.Phone = "1231414"
    a.Contact.City = "NewYork"

    fmt.Println(a)
}

这里写图片描述

3 匿名字段

package main

import "fmt"

type person struct {
    string
    int
}

func main() {
    a := person{"John", 18}
    var b person
    b = a
    fmt.Println(b)
}

3.2 “继承”

package main

import "fmt"

type human struct {
    Sex int
}

type teacher struct {
    human
    Name string
    Age  int
}

type student struct {
    human
    Name string
    Age  int
}

func main() {
    a := teacher{Name: "John", Age: 18, human:human{Sex:0}}
    b := student{Name: "john", Age: 18, human:human{Sex:1}}
    fmt.Println(a, b)
}

这里写图片描述

package main

import "fmt"

type human struct {
    Sex int
}

type teacher struct {
    human
    Name string
    Age  int
}

type student struct {
    human
    Name string
    Age  int
}

func main() {
    a := teacher{Name: "John", Age: 18, human:human{Sex:0}}
    a.Name="Mark"
    a.Age=20
    a.Sex=100
    fmt.Println(a)
}

这里写图片描述

3.3 匿名字段和外层字段有同名字段

package main

import "fmt"

type A struct{
    B
    Name string
}

type B struct{
    Name string
}

func main() {
    a:=A{Name:"A",B:B{Name:"B"}}
    fmt.Println(a.Name,a.B.Name)
}

这里写图片描述

猜你喜欢

转载自blog.csdn.net/u012292754/article/details/80384512
今日推荐