• 结构体

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

    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())
        }
    • 类型内嵌和结构体内嵌

      内嵌的结构体可以直接访问成员变量

      内嵌结构体的字段名是它的类型名

    • 结构体模拟类的继承

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

重温Go语法笔记 | 结构体的更多相关文章

  1. 标记化结构初始化语法 在结构体成员前加上小数点 如 “.open .write .close ”C99编译器 .

    今天在看串口驱动(四)的时候 有这样一个结构体初始化 我很不理解 如下: static struct s3c24xx_uart_port s3c24xx_serial_ports[NR_PORTS] ...

  2. 瘋子C语言笔记(结构体/共用体/枚举篇)

    (一)结构体类型 1.简介: 例: struct date { int month; int day; int year; }; struct student { int num; char name ...

  3. C语言学习笔记--结构体

    结构体定义三种方式: #include<stdio.h> //第一种定义方法 struct point { int x; int y; }; struct point p1,p2; //第 ...

  4. 初学swift笔记 结构体(八)

    import Foundation /* 和类很相似 结构体 -> 封装 属性.方法 结构体是值类型 */ //定义一个LSQ类型的结构体 关键字struct struct LSQ { var ...

  5. Go笔记-结构体

    [定义] type identifier struct{ field1 type1 field2 type2 ... } // 声明 var s identifier identifier.field ...

  6. go学习笔记-结构体

    结构体 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合 定义 格式 type struct_variable_type struct { member definition; member ...

  7. C语言语法教程-结构体

    2018-09-30 结构体中成员变量地址是连续的,结构体用于描述记录. Create a struct //---------------------------- //struct1.c //创建 ...

  8. C学习笔记-结构体

    结构体的定义和初始化 结构体是简单数据类型的综合 struct man { char name[100]; int age; }; struct man m = { "tom", ...

  9. C学习笔记-结构体与二进制文件增删改查

    使用结构体整理数据,然后利用二进制存储文件,这样存储的文件类似于数据库,可以实现文件的增删改查 定义结构体 struct student { unsigned int ID; char name[20 ...

  10. c语言学习笔记 - 结构体位域

    在学习结构体的时候遇到了位域这个概念,位域主要是为了节省内存空间,比如用一个32位,4个字节的int存储一个开关变量时,会造成空间浪费,于是干脆就考虑在这个32划分不同的区域来存储数据,例如划出1位存 ...

随机推荐

  1. Lattice、Xilinx FPGA reg初始化赋值问题

    一.起因 最近在开发Lattice的一款低功耗FPGA时,遇到了reg初始化复位问题,经过在网上搜寻相关资料整理如下: 二.FPGA中reg的初始化方式 在定义时初始化,例如: reg r_test ...

  2. 使用Boost.asio与Boost.beast基于协程连接ws

    目录 目录 前言 准备工作 实现 初始化io_context并监听信号 启动连接ws的线程并启动io_context 建立tcp链接(以下步骤皆位于ws函数中) ws握手 传输数据 效果 总结 前言 ...

  3. mysql热迁移

    0.背景 XtraBackup 优势 在线热备:支持在不停止数据库的情况下进行 InnoDB 和 XtraDB 的热备份,适合高可用环境. 增量备份:支持增量备份,能够显著减少备份时间和存储空间需求. ...

  4. 剖析Air724UG的硬件设计,有大发现?04篇

    ​ 接下来分享第四部分. 5.4 功耗 5.4.1 模块工作电流 测试仪器:综测仪 R&S CMW500,程控电源 安捷伦 66319D 测试条件:VBAT=3.8V,环境温度 25℃,插入白 ...

  5. 『玩转Streamlit』--图像与媒体组件

    Streamlit中的图像与媒体组件,主要是st.image.st.audio和st.video. 它们是专为在Streamlit Web应用程序中嵌入和展示多媒体内容而设计的,这些组件不仅丰富了应用 ...

  6. 【一步步开发AI运动小程序】十八、如何识别用户上传图片中的人体、运动、动作、姿态?

    [云智AI运动识别小程序插件],可以为您的小程序,赋于人体检测识别.运动检测识别.姿态识别检测AI能力.本地原生识别引擎,内置10余个运动,无需依赖任何后台或第三方服务,有着识别速度快.体验佳.扩展性 ...

  7. Java并发基础构建模块简介

    在实际并发编程中,可以利用synchronized来同步线程对于共享对象的访问,用户需要显示的定义synchronized代码块或者方法.为了加快开发,可以使用Java平台一些并发基础模块来开发. 注 ...

  8. .NET9 EFcore支持早期MSSQL数据库 ROW_NUMBER()分页

    前言 NET程序员是很幸福的,MS在上个月发布了NET9.0RTM,带来了不少的新特性,但是呢,我们是不是还有很多同学软硬件都还没更上,比如,自己的电脑还在跑Win7,公司服务器还在跑MSSQL200 ...

  9. 导航管理工具之OneNav

    github:https://github.com/helloxz/onenav 解决痛点:经常使用的链接,时常被问起, 还要翻找之前的很老的记录,反反复复比较浪费平常的开发时间, 如果可以把这些常用 ...

  10. 新型大语言模型的预训练与后训练范式,苹果的AFM基础语言模型

    前言:大型语言模型(LLMs)的发展历程可以说是非常长,从早期的GPT模型一路走到了今天这些复杂的.公开权重的大型语言模型.最初,LLM的训练过程只关注预训练,但后来逐步扩展到了包括预训练和后训练在内 ...