Go语言结构体

ops/2025/3/21 14:40:23/

基本介绍

Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。
结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。

基本使用

定义结构体

结构体定义需要使用 type 和 struct 语句。
struct 语句定义一个新的数据类型,结构体中有一个或多个成员。

	type Person struct {Name stringAge int}

结构体初始化

  1. 按照顺序给相对应的字段赋值
  2. 使用这种方式初始化结构体,必须初始化所有字段
	p1 := Person{"wuhenzhiyi1",20,}fmt.Println(p1)
  1. 显示用字段名来赋值
  2. 使用这种方式初始化,可以省略某些字段,省略的字段默认是类型的零值
	p2 := Person{Name: "wuhenzhiyi2",Age:20,}fmt.Println(p2)

一般来说我们都用第二种,更加清晰明了也不容易出错

访问结构体成员

我们可以用 . 来访问结构体的成员

	fmt.Println(p1.Name) // wuhenzhiyi1fmt.Println(p1.Age) // 20fmt.Println(p2.Name) // wuhenzhiyi2fmt.Println(p2.Age) // 20

结构体成员赋值

	p1.Name = "wuhenzhiyi3"fmt.Println(p1.Name) // wuhenzhiyi3

结构体方法

我们不仅可以给结构体设置成员,还可以给结构体设置方法,类似面向对象类的方法。

  1. 通过在方法前面写上需要接收的结构体类型,就可以给这个结构体设置一个方法。
  2. 访问结构体的方法也是通过 . 的方法
	type Person struct {Name stringAge int}func (p Person) say(){fmt.Printf("my name is %s\n",p.Name)}func main(){p1 := Person{"wuhenzhiyi1",20,}p1.say() // my name is wuhenzhiyi1}

结构体嵌套

结构体里面还可以嵌套结构体类型,达到复用结构体的作用。

	type Person struct {Name stringAge intWork Work}type Work struct {Profession string}p3 := Person{Name: "wuhenzhiyi2",Age:20,Work: Work{Profession: "go",},}fmt.Println(p3)//{wuhenzhiyi2 20 {go}}fmt.Println(p3.Work.Profession) // go

注意事项

  1. 结构体的定义只是一种内存布局的描述,只有当结构体实例化时,才会真正地分配内存。
  2. 结构体的所有字段在内存中是连续的。
  3. 使用 . 来访问结构体的成员变量,结构体成员变量的赋值与普通方法一致。
  4. 使用 new 关键字对类型进行实例化,创建指针类型的结构体。
  5. 取结构体的地址实例化,使用 &
  6. 匿名结构体没有类型名称,无须通过 type 关键字定义就可以直接使用

http://www.ppmy.cn/ops/15015.html

相关文章

SpringBoot集成Sharding-jdbc水平分表分库

SpringBoot集成Sharding-jdbc水平分表分库 1.水平分表分库2.参数配置2.application.properties 3.代码测试3.1 数据插入 1.水平分表分库 概念在之前写章中:Sharding-JDBC笔记1 2.参数配置 2.application.properties # Server port server.port8080# MyBatis con…

基于单片机的变电站潜水泵智能集成控制系统设计

摘要:传统的变电站潜水泵智能集成控制系统在控制过程中稳定性差,很难在短时间内精准地检 测出变电站潜水泵存在的故障。为了解决上述问题,提出基于单片机的变电站潜水泵智能集成控 制系统。系统硬件由电源模块、采集模块、驱动模块、报警模块和显示模块五部分组成,在 AT89C…

Rockylinux安装docker和docker-compose

在Rocky Linux上安装Docker Engine和Docker Compose的步骤如下: 安装Docker Engine 首先,确保系统已经更新到最新状态: sudo dnf update 然后,添加Docker的存储库并安装Docker Engine及相关依赖: # 添加Docker官方…

电子元器件网购指南:从选品到下单

随着互联网的发展,电子元器件网购已经成为越来越流行的采购方式。网购不仅可以省去实体店采购的麻烦,还可以提供更丰富的商品选择和更优惠的价格。然而,对于初次接触电子元器件网购的买家来说,如何才能选到优质的商品并完成安全的…

偏微分方程算法之二阶双曲型方程紧交替方向隐格式

目录 一、研究对象 二、理论推导 2.1 二维紧差格式 2.2 紧交替方向隐格式

明日方舟游戏助手:一键完成日常任务 | 开源日报 No.233

MaaAssistantArknights/MaaAssistantArknights Stars: 11.6k License: AGPL-3.0 MaaAssistantArknights 是一款《明日方舟》游戏的小助手,基于图像识别技术,支持一键完成全部日常任务。 刷理智、掉落识别及上传企鹅物流智能基建换班、自动计算干员效率…

12.Ribbon饥饿加载

Ribbon默认是懒加载的,第一次使用Ribbon访问的时候才会去实例化对象,所以第一次访问比较耗时。 ribbon:eager-load:enabled: true # 开启饥饿加载clients: user-service #对user-service这个服务饥饿加载 多个微服务的写法: ribbon:eager-loa…

表达式求值(后缀表达式)(数据结构)

一、概念 算术表达式是由操作数(运算数)、运算符(操作符)、和界线符(括号)三部分组成,在计算机中进行算术表达式的计算是通过堆栈来实现的。 二后缀表达式的逻辑和实现方式(逆波兰…