news 2026/6/15 16:09:05

Go 语言结构体

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 10:32:56

【开题答辩全过程】以 高校篮球社团管理系统 为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

作者头像 李华
网站建设 2026/6/15 10:32:27

告别机房管理噩梦,首码磁控U位系统来“救场”

机房管理痛点大揭秘在机房管理的日常中,想必不少朋友都被这些问题折磨得苦不堪言。盘点时,面对密密麻麻的设备,人工核对不仅效率低下,还常常因为人为疏忽,导致账实不符。一旦出现错误,后续的核对与纠错工作…

作者头像 李华
网站建设 2026/6/15 11:32:56

软件工程期末考试-数据流图、状态图、用例图、类图等怎么画?

分类 概念问答数据流图软件结构图状态图流程图,盒图,pad图白盒测试/黑盒测试用例图类图事件跟踪图项目管理概念问答 1)概念问答什么是软件工程 把系统的、规范的途径应用于软件开发和维护过程,也就是把工程应用于软件研究上面提到的途径什么是…

作者头像 李华
网站建设 2026/6/15 11:36:16

AI应用层革命(七)——智能体的终极形态:认知循环体的诞生

AI应用层革命(七)——智能体的终极形态:认知循环体的诞生本文为《AI应用层革命》系列第七篇,承接前六篇对智能体自主演化、伦理边界与法律框架的系统性探讨。本篇将深入剖析智能体发展的终极方向——认知循环体(Cognit…

作者头像 李华