当前位置: 首页 > article >正文

Go语言之定义结构体(Struct)-《Go语言实战指南》

结构体(struct)是 Go 中的一种复合数据类型,它允许你将多个不同类型的字段组合成一个类型,类似于 C 语言的结构体或面向对象语言中的类。


一、结构体的基本定义

type 结构体名 struct {字段名 字段类型...
}
示例:
type Person struct {Name stringAge  int
}

这里定义了一个 Person 类型,包含两个字段:Name 和 Age


二、创建结构体实例

你可以用多种方式创建结构体实例。

1. 使用字面量(推荐)
p := Person{Name: "Alice", Age: 30}
2. 指针形式(使用 &
p := &Person{Name: "Bob", Age: 25}
fmt.Println(p.Name) // 自动解引用,等价于 (*p).Name
3. 使用 new 关键字(不推荐)
p := new(Person)
p.Name = "Charlie"
p.Age = 22

三、访问与修改字段

p := Person{Name: "Dave", Age: 40}
fmt.Println(p.Name) // 输出:Davep.Age = 41
fmt.Println(p.Age)  // 输出:41

结构体字段是公开(以大写字母开头)还是私有(以小写字母开头)由字段名的首字母决定。


四、结构体的零值

结构体的零值由每个字段的零值组成:

var p Person
fmt.Println(p.Name) // ""
fmt.Println(p.Age)  // 0

五、结构体比较(==)

结构体可以直接用 == 比较,但前提是所有字段类型也支持比较。

p1 := Person{"Tom", 18}
p2 := Person{"Tom", 18}
fmt.Println(p1 == p2) // true

如果结构体中含有 map、slice、function 等不可比较类型,则不能直接用 ==


六、结构体嵌套(组合)

type Address struct {City  stringState string
}type Employee struct {Name    stringAge     intAddress Address
}

使用时:

e := Employee{Name: "Eva",Age:  30,Address: Address{City:  "Beijing",State: "China",},
}
fmt.Println(e.Address.City) // 输出:Beijing

七、结构体标签(Tag)

结构体字段可以带标签(如用于 JSON 编码):

type User struct {ID   int    `json:"id"`Name string `json:"name"`
}

配合标准库 encoding/json 可用于序列化与反序列化。


八、小结

特性说明
定义结构体type StructName struct {}
创建实例使用字面量 {},或 new,或 &{}
字段访问instance.field 或 ptr.field
支持嵌套结构体内可嵌套另一个结构体作为字段
支持比较仅当所有字段可比较时可使用 ==
可加标签(Tag)用于 JSON、DB 映射等反射相关应用场景

相关文章:

Go语言之定义结构体(Struct)-《Go语言实战指南》

结构体(struct)是 Go 中的一种复合数据类型,它允许你将多个不同类型的字段组合成一个类型,类似于 C 语言的结构体或面向对象语言中的类。 一、结构体的基本定义 type 结构体名 struct {字段名 字段类型... } 示例: …...

mediapipe标注视频姿态关键点(基础版加进阶版)

前言 手语视频流的识别有两种大的分类,一种是直接将视频输入进网络,一种是识别了关键点之后再进入网络。所以这篇文章我就要来讲讲如何用mediapipe对手语视频进行关键点标注。 代码 需要直接使用代码的,我就放这里了。环境自己配置一下吧&…...

PCtoLCD2002如何制作6*8字符

如何不把“等比缩放”前的打勾取消,则无法修改为对应英文字符为6*8。 取消之后就可以更改了!...

SmartPlayer与VLC播放RTMP:深度对比分析延迟、稳定性与功能

随着音视频直播技术的发展,RTMP(实时消息传输协议)成为了广泛应用于实时直播、在线教育、视频会议等领域的重要协议。为了确保优质的观看体验,RTMP播放器的选择至关重要。大牛直播SDK的SmartPlayer和VLC都是在行业中广受欢迎的播放…...

Qt QPaintEvent绘图事件painter使用指南

绘制需在paintEvent函数中实现 用图片形象理解 如果加了刷子再用笔就相当于用笔画过的区域用刷子走 防雷达&#xff1a; 源文件 #include "widget.h" #include "ui_widget.h" #include <QDebug> #include <QPainter> Widget::Widget(QWidget…...

伪创新-《软件方法》全流程引领AI-第1章 04

《软件方法》全流程引领AI-第1章 ABCD工作流-01 对PlantUML们的评价-《软件方法》全流程引领AI-第1章 02 AI辅助的建模步骤-《软件方法》全流程引领AI-第1章 03 第1章 ABCD工作流 1.5 警惕和揭秘伪创新 初中数学里要学习全等三角形、相似三角形、SSS、SAS……&#xff0c;到…...

win11如何重启

在 Windows 11 中重启电脑有多种方法&#xff0c;以下是其中几种常见方法&#xff1a; 开始菜单重启&#xff1a; 点击屏幕左下角的“开始”按钮&#xff08;Windows 图标&#xff09;。 在开始菜单中&#xff0c;点击“电源”图标。 选择“重启”选项。 使用快捷键&#xf…...

【iOS】 锁

iOS 锁 文章目录 iOS 锁前言线程安全锁互斥锁pthread_mutexsynchronized (互斥递归锁)synchronized问题:小结 NSLockNSRecursiveLockNSConditionNSConditionLock 自旋锁OSSpinLock(已弃用)atomicatomic修饰的属性绝对安全吗?os_unfair_lock 读写锁互斥锁和自旋锁的对比 小结使…...

uni-app学习笔记十五-vue3页面生命周期(一)

页面生命周期概览 vue3页面生命周期如下图所示&#xff1a; onLoad 此时页面还未显示&#xff0c;没有开始进入的转场动画&#xff0c;页面dom还不存在。 所以这里不能直接操作dom&#xff08;可以修改data&#xff0c;因为vue框架会等待dom准备后再更新界面&#xff09;&am…...

Flink核心概念小结

文章目录 前言引言数据流API基于POJO的数据流基本源流配置示例基本流接收器数据管道与ETL(提取、转换、加载)一对一映射构建面向流映射的构建键控流进行分组运算RichFlatMapFunction对于流的状态管理连接流的使用流式分析水位的基本概念和示例侧道输入的基本概念和示例Process …...

《软件工程》第 14 章 - 持续集成

在软件工程的开发流程中&#xff0c;持续集成是保障代码质量与开发效率的关键环节。本章将围绕持续集成的各个方面展开详细讲解&#xff0c;结合 Java 代码示例与可视化图表&#xff0c;帮助读者深入理解并实践相关知识。 14.1 持续集成概述 14.1.1 持续集成的相关概念 持续集…...

大模型 Agent 中的通用 MCP 机制详解

1. 引言 大模型(Large Language Model,LLM)技术的迅猛发展催生了一类全新的应用范式:LLM Agent(大模型 Agent)。简单来说,Agent 是基于大模型的自治智能体,它不仅能理解和生成自然语言,还能通过调用工具与环境交互,从而自主地完成复杂任务。ChatGPT 的出现让人们看到…...

Navicat 17 SQL 预览时表名异常右键表名,点击设计表->SQL预览->另存为的SQL预览时,表名都是 Untitled。

&#x1f9d1;‍&#x1f4bb; 用户 Navicat 17 SQL 预览时表名异常右键表名&#xff0c;点击设计表->SQL预览->另存为的SQL预览时&#xff0c;表名都是 Untitled。 &#x1f9d1;‍&#x1f527; 官方技术中心 了解到您的问题&#xff0c;这个显示是正常的&#xff0c…...

Orpheus-TTS:AI文本转语音,免费好用的TTS系统

名人说&#xff1a;博观而约取&#xff0c;厚积而薄发。——苏轼《稼说送张琥》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、Orpheus-TTS&#xff1a;重新定义语音合成的标准1. 什么是Orpheus-TTS&#xff…...

Python爬虫实战:研究Goose框架相关技术

一、引言 随着互联网的迅速发展,网络上的信息量呈爆炸式增长。从海量的网页中提取有价值的信息成为一项重要的技术。网络爬虫作为一种自动获取网页内容的程序,在信息收集、数据挖掘、搜索引擎等领域有着广泛的应用。本文将详细介绍如何使用 Python 的 Goose 框架构建一个完整…...

webpack优化方法

以下是Webpack优化的系统性策略&#xff0c;涵盖构建速度、输出体积、缓存优化等多个维度&#xff0c;配置示例和原理分析&#xff1a; 一、构建速度优化 1. 缩小文件搜索范围 module.exports {resolve: {// 明确第三方模块的路径modules: [path.resolve(node_modules)],// …...

STM32 Keil工程搭建 (手动搭建)流程 2025年5月27日07:42:09

STM32 Keil工程搭建 (手动搭建)流程 觉得麻烦跳转到最底部看总配置图 1.获取官方标准外设函数库 内部结构如下: 文件夹功能分别为 图标(用不上)库函数(重点) Libraries/ ├── CMSIS/ # ARM Cortex-M Microcontroller Software Interface Standard…...

MyBatis 框架使用与 Spring 集成时的使用

MyBatis 创建项目mybatis项目&#xff0c;首先需要使用maven导入mybatis库 poml.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema…...

OpenGL Chan视频学习-7 Writing a Shader inOpenGL

bilibili视频链接&#xff1a; 【最好的OpenGL教程之一】https://www.bilibili.com/video/BV1MJ411u7Bc?p5&vd_source44b77bde056381262ee55e448b9b1973 函数网站&#xff1a; docs.gl 说明&#xff1a; 1.之后就不再整理具体函数了&#xff0c;网站直接翻译会更直观也会…...

顶会新方向:卡尔曼滤波+目标检测

卡尔曼虑波&#xff0b;目标检测创新结合&#xff0c;新作准确率突破100%! 一个有前景且好发论文的方向:卡尔曼滤波&#xff0b;目标检测! 这种创新结合&#xff0c;得到学术界的广泛认可&#xff0c;多篇成果陆续登上顶会顶刊。例如无人机竞速系统 Swift&#xff0c;登上nat…...

数据库相关问题

1.保留字 1.1错误案例&#xff08;2025/5/27&#xff09; 报错&#xff1a; java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near condition, sell…...

一起学数据结构和算法(二)| 数组(线性结构)

数组&#xff08;Array&#xff09; 数组是最基础的数据结构&#xff0c;在内存中连续存储&#xff0c;支持随机访问。适用于需要频繁按索引访问元素的场景。 简介 数组是一种线性结构&#xff0c;将相同类型的元素存储在连续的内存空间中。每个元素通过其索引值&#xff08;数…...

Linux基本指令篇 —— touch指令

touch是Linux和Unix系统中一个非常基础但实用的命令&#xff0c;主要用于操作文件的时间戳和创建空文件。下面我将详细介绍这个命令的用法和功能。 目录 一、基本功能 1. 创建空文件 2. 同时创建多个文件 3. 创建带有空格的文件名&#xff08;需要使用引号&#xff09; 二、…...

【后端高阶面经:消息队列篇】23、Kafka延迟消息:实现高并发场景下的延迟任务处理

一、延迟消息的核心价值与Kafka的局限性 在分布式系统中,延迟消息是实现异步延迟任务的核心能力,广泛应用于订单超时取消、库存自动释放、消息重试等场景。 然而,Apache Kafka作为高吞吐的分布式消息队列,原生并不支持延迟消息功能,需通过业务层或中间层逻辑实现。 1.1…...

Mac安装MongoDB数据库以及MongoDB Compass可视化连接工具

目录 一、安装 MongoDB 社区版 1、下载 MongoDB 2、配置环境变量 3、配置数据和日志目录 4、启动MongoDB服务 5、使用配置文件启动 6、验证服务运行 二、MongoDB可视化工具MongoDB Compass 一、安装 MongoDB 社区版 1、下载 MongoDB 大家可以直接在官方文档下安装Mo…...

城市地下“隐形卫士”:激光甲烷传感器如何保障燃气安全?

城市“生命线”面临的安全挑战 城市地下管网如同人体的“血管”和“神经”&#xff0c;承载着燃气、供水、电力、通信等重要功能&#xff0c;一旦发生泄漏或爆炸&#xff0c;将严重影响城市运行和居民安全。然而&#xff0c;由于管线老化、违规施工、监管困难等问题&#xff0…...

MySQL推出全新Hypergraph优化器,正式进军OLAP领域!

在刚刚过去的 MySQL Summit 2025 大会上&#xff0c;Oracle 发布了一个用于 MySQL 的全新 Hypergraph&#xff08;超图&#xff09;优化器&#xff0c;能够为复杂的多表查询生成更好的执行计划&#xff0c;从而优化查询性能。 这个功能目前只在 MySQL HeatWave 云数据库中提供&…...

飞牛fnNAS手机相册备份及AI搜图

目录 一、相册安装应用 二、手机开启自动备份 三、开始备份 四、照片检索 五、AI搜图设置 六、AI搜图测试 七、照片传递 现代的手机,已经成为我们最亲密的“伙伴”。自从手机拍照性能提升后,手机已经完全取代了简单的卡片相机,而且与入门级“单反”相机发起了挑战。在…...

消费类,小家电产品如何做Type-C PD快充快速充电

随着快充技术的快速发展现在市场上的产品接口都在逐渐转为Type-C接口&#xff0c;Type-C可以支持最大20V100W的功率。未来Type-C大概会变成最通用的接口&#xff0c;而你的产品却还是还在用其他的接口必然会被淘汰, 而要使小家电用到PD快充&#xff0c;就需要使用到Type-C快充诱…...

连接表、视图和存储过程

1. 视图 1.1. 视图的概念 视图&#xff08;View&#xff09;&#xff1a;虚拟表&#xff0c;本身不存储数据&#xff0c;而是封装了一个 SQL 查询的结果集。 用途&#xff1a; 只显示部分数据&#xff0c;提高数据访问的安全性。简化复杂查询&#xff0c;提高复用性和可维护…...