ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

重温Go语法笔记 | 结构体

2022-09-11 14:30:20  阅读:206  来源: 互联网

标签:struct person int 重温 语法 Person func Go 结构


  • 结构体

    多个任意类型聚合成的复合类型

    1.字段拥有自己的类型和值
    2.字段名必须唯一
    3.字段可以是结构体
    

    结构体的定义是一种内存布局的描述
    只有实例化才会真正分配内存,必须实例化之后才能使用结构体的字段

    • 结构体的实例化

      type Point struct {
        X int
        Y int
      }
      var p Point
      p.X = 10
      p.Y = 20
      
    • 指针类型的结构体

      Go访问结构体指针使用了语法糖,将ins.Name形式转化成(*ins).Name

      type Point struct {
        X int
        Y int
      }
      p := new(Point)
      p.X = 10
      p.Y = 20
      
    • 指针类型的结构体与结构体的区别?

    • 取结构体的地址实例化

      取地址实例化是最广泛的一种结构体实例化方式

      type Person struct {
        Name string
        Age  int
        Sex  int
      }
      
      func main() {
        person := &Person{}
        person.Name = "mkl"
        person.Age = 10
        person.Sex = 1
      }
      
    • 键值对初始化结构体

      type Person struct {
        Name  string
        Age   int
        Sex   int
        child *Person
      }
      
      func main() {
        person := &Person{
          Name: "mkl",
          Age:  20,
          Sex:  1,
          child: &Person{
            Name: "bob",
            Age:  10,
            Sex:  0,
          },
        }
        fmt.Printf("%#v", person)
      }
      
    • 列表初始化结构体

      type Person struct {
        Name  string
        Age   int
        Sex   int
        child *Person
      }
      
      func main() {
        person := &Person{"mkl", 10, 1, &Person{"bob", 11, 0, nil}}
        fmt.Printf("%#v", person)
      }
      
    • 初始化匿名结构体

      func main() {
        person := &struct {
          id   int
          data string
        }{
          id:   1,
          data: "hello",
        }
        fmt.Printf("%#v", person)
      }
      
    • Go方法和接收器

      方法是接收器上的一个函数
      方法的作用对象是接收器,函数没有作用对象

      • 为结构体添加方法

        面向过程

        type Bag struct {
          items []string
        }
        
        func Insert(b *Bag, item string) {
          b.items = append(b.items, item)
        }
        
        func main() {
          bag := Bag{}
          Insert(&bag, "foo")
        }
        

        面向对象

        type Bag struct {
          items []string
        }
        
        func (b *Bag) Insert(item string) {
          b.items = append(b.items, item)
        }
        
        func main() {
          bag := new(Bag)
          bag.Insert("foo")
        }
        
      • 指针接收器

        指针接收器

        type Property struct {
          value int
        }
        
        // 设置属性值
        func (p *Property) Set(v int) {
          p.value = v
        }
        
        // 获取属性值
        func (p *Property) Get() int {
          return p.value
        }
        
        func main() {
          p := new(Property)
          p.Set(10)
          fmt.Println(p.Get())
        }
        
    • 类型内嵌和结构体内嵌

      内嵌的结构体可以直接访问成员变量
      内嵌结构体的字段名是它的类型名

    • 结构体模拟类的继承

      以组合的方式实现继承特性

标签:struct,person,int,重温,语法,Person,func,Go,结构
来源: https://www.cnblogs.com/miaokela/p/16683939.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有