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

Go 语言结构体

Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。

结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。

结构体表示一项记录,比如保存图书馆的书籍记录,每本书有以下属性:

  • Title :标题
  • Author : 作者
  • Subject:学科
  • ID:书籍ID

定义结构体

结构体定义需要使用 type 和 struct 语句。struct 语句定义一个新的数据类型,结构体中有一个或多个成员。type 语句设定了结构体的名称。结构体的格式如下:

type struct_variable_type struct { member definition member definition ... member definition }

一旦定义了结构体类型,它就能用于变量的声明,语法格式如下:

variable_name := structure_variable_type {value1, value2...valuen} 或 variable_name := structure_variable_type { key1: value1, key2: value2..., keyn: valuen}

实例如下:

实例

package main

import “fmt”

type Books struct {
title string
author string
subject string
book_id int
}

func main () {

// 创建一个新的结构体
fmt.Println (Books { “Go 语言”,“www.runoob.com”,“Go 语言教程”,6495407 })

// 也可以使用 key => value 格式
fmt.Println (Books { title:“Go 语言”, author:“www.runoob.com”, subject:“Go 语言教程”, book_id:6495407 })

// 忽略的字段为 0 或 空
fmt.Println (Books { title:“Go 语言”, author:“www.runoob.com” })
}

输出结果为:

{Go 语言 www.runoob.com Go 语言教程 6495407} {Go 语言 www.runoob.com Go 语言教程 6495407} {Go 语言 www.runoob.com 0}

访问结构体成员

如果要访问结构体成员,需要使用点号 . 操作符,格式为:

结构体.成员名"

结构体类型变量使用 struct 关键字定义,实例如下:

实例

package main

import “fmt”

type Books struct {
title string
author string
subject string
book_id int
}

func main () {
var Book1 Books /* 声明 Book1 为 Books 类型 */
var Book2 Books /* 声明 Book2 为 Books 类型 */

/* book 1 描述 */
Book1.title = “Go 语言”
Book1.author = “www.runoob.com”
Book1.subject = “Go 语言教程”
Book1.book_id = 6495407

/* book 2 描述 */
Book2.title = “Python 教程”
Book2.author = “www.runoob.com”
Book2.subject = “Python 语言教程”
Book2.book_id = 6495700

/* 打印 Book1 信息 */
fmt.Printf ("Book 1 title: %s \n ", Book1.title)
fmt.Printf ("Book 1 author: %s \n ", Book1.author)
fmt.Printf ("Book 1 subject: %s \n ", Book1.subject)
fmt.Printf ("Book 1 book_id: %d \n ", Book1.book_id)

/* 打印 Book2 信息 */
fmt.Printf ("Book 2 title: %s \n ", Book2.title)
fmt.Printf ("Book 2 author: %s \n ", Book2.author)
fmt.Printf ("Book 2 subject: %s \n ", Book2.subject)
fmt.Printf ("Book 2 book_id: %d \n ", Book2.book_id)
}

以上实例执行运行结果为:

Book 1 title : Go 语言 Book 1 author : www.runoob.com Book 1 subject : Go 语言教程 Book 1 book_id : 6495407 Book 2 title : Python 教程 Book 2 author : www.runoob.com Book 2 subject : Python 语言教程 Book 2 book_id : 6495700

结构体作为函数参数

你可以像其他数据类型一样将结构体类型作为参数传递给函数。并以以上实例的方式访问结构体变量:

实例

package main

import “fmt”

type Books struct {
title string
author string
subject string
book_id int
}

func main () {
var Book1 Books /* 声明 Book1 为 Books 类型 */
var Book2 Books /* 声明 Book2 为 Books 类型 */

/* book 1 描述 */
Book1.title = “Go 语言”
Book1.author = “www.runoob.com”
Book1.subject = “Go 语言教程”
Book1.book_id = 6495407

/* book 2 描述 */
Book2.title = “Python 教程”
Book2.author = “www.runoob.com”
Book2.subject = “Python 语言教程”
Book2.book_id = 6495700

/* 打印 Book1 信息 */
printBook (Book1)

/* 打印 Book2 信息 */
printBook (Book2)
}

func printBook ( book Books ) {
fmt.Printf ("Book title: %s \n ", book.title)
fmt.Printf ("Book author: %s \n ", book.author)
fmt.Printf ("Book subject: %s \n ", book.subject)
fmt.Printf ("Book book_id: %d \n ", book.book_id)
}

以上实例执行运行结果为:

Book title : Go 语言 Book author : www.runoob.com Book subject : Go 语言教程 Book book_id : 6495407 Book title : Python 教程 Book author : www.runoob.com Book subject : Python 语言教程 Book book_id : 6495700

结构体指针

你可以定义指向结构体的指针类似于其他指针变量,格式如下:

var struct_pointer *Books

以上定义的指针变量可以存储结构体变量的地址。查看结构体变量地址,可以将 & 符号放置于结构体变量前:

struct_pointer = &Book1

使用结构体指针访问结构体成员,使用 “.” 操作符:

struct_pointer.title

接下来让我们使用结构体指针重写以上实例,代码如下:

实例

package main

import “fmt”

type Books struct {
title string
author string
subject string
book_id int
}

func main () {
var Book1 Books /* 声明 Book1 为 Books 类型 */
var Book2 Books /* 声明 Book2 为 Books 类型 */

/* book 1 描述 */
Book1.title = “Go 语言”
Book1.author = “www.runoob.com”
Book1.subject = “Go 语言教程”
Book1.book_id = 6495407

/* book 2 描述 */
Book2.title = “Python 教程”
Book2.author = “www.runoob.com”
Book2.subject = “Python 语言教程”
Book2.book_id = 6495700

/* 打印 Book1 信息 */
printBook (&Book1)

/* 打印 Book2 信息 */
printBook (&Book2)
}
func printBook ( book * Books ) {
fmt.Printf ("Book title: %s \n ", book.title)
fmt.Printf ("Book author: %s \n ", book.author)
fmt.Printf ("Book subject: %s \n ", book.subject)
fmt.Printf ("Book book_id: %d \n ", book.book_id)
}

以上实例执行运行结果为:

Book title : Go 语言 Book author : www.runoob.com Book subject : Go 语言教程 Book book_id : 6495407 Book title : Python 教程 Book author : www.runoob.com Book subject : Python 语言教程 Book book_id : 6495700
http://www.jsqmd.com/news/88878/

相关文章:

  • 当卷积网络遇上双向记忆:玩转时间序列预测新姿势
  • 【开题答辩全过程】以 高校篮球社团管理系统 为例,包含答辩的问题和答案
  • JavaScript闭包终极指南:从原理到实战(2025版)
  • 【开题答辩全过程】以 基于PHP的公司员工管理系统为例,包含答辩的问题和答案
  • 第八周学习
  • Week 29: 深度学习补遗:MoE的稳定性机制与路由策略实现
  • 有关C语言中自加和自减与计算机底层硬件的关糸
  • Arbess从初级到进阶(3) - 利用Arbess+GitLab+SonarQube搭建Java计划自动化部署
  • 告别机房管理噩梦,首码磁控U位系统来“救场”
  • 课程设计(自主选题)
  • 南昌航空大学-软件学院-余思莹-第二次blog作业
  • 深入解析:Vue中的provide与inject
  • 面试题目 —— 就业考察 —— 大模型
  • 基于django智慧农业管理系统
  • 抗体人源化:降低免疫原性、赋能临床转化的关键技术
  • 基于SVM-RFE-LSTM的特征选择算法结合LSTM神经网络的多输入单输出回归预测python代码
  • django用Python设计自主学习系统
  • 25年12月14日复盘总结,大盘方向,操作建议,板块机会,实用干货
  • what?动态规划?
  • 解码 Qt 核心技术 —— 组件、数据操作与多界面开发
  • Java基础大厂高频后台开发-面试常考八股题
  • JS 中的跨域(CORS)与预检请求(Preflight):OPTIONS 请求为何总是先于 POST 发送?
  • 基于深度学习的脑肿瘤检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
  • 实习面试题-聚合搜索项目面试题
  • Linux的shell命令
  • 浏览器缓存策略与 JS 文件的关联:强缓存、协商缓存对 JS 加载速度的影响
  • Django 学生成绩管理系统
  • 跨标签页通信的五种方案:LocalStorage、BroadcastChannel 与 SharedWorker
  • 实习面试题-游戏服务端开发面试题
  • 探索 BMS 仿真:搭建电池管理系统的 Matlab 模型