Go 语言编程 — 高级数据类型 — 结构体

举报
云物互联 发表于 2021/08/05 22:57:07 2021/08/05
【摘要】 目录 文章目录 目录结构体访问结构体成员向函数传递结构体结构体指针结构体标签(Struct Tag) 结构体 Golang 中,结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。与 C 语言中的结构体类似,区别在于 Golang 结构体的操作更加精简,方式更加单一。同时,Golang 中结构体变量也类似于 OOP 中对象的概念,可以具有对象的...

目录

结构体

Golang 中,结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。与 C 语言中的结构体类似,区别在于 Golang 结构体的操作更加精简,方式更加单一。同时,Golang 中结构体变量也类似于 OOP 中对象的概念,可以具有对象的成员属性和成员方法。

结构体的定义使用了 type 和 struct 关键字。

  • type 关键字:设定了结构体的名称,表示定义一个新的类型(Type)。
  • struct 关键字:表示定义一个新的结构体数据类型,结构体中有一个或多个成员。

结构体的格式如下:

type struct_variable_type struct { member definition ...
}

  
 

一旦定义了结构体类型,就能用作变量声明的类型标识符,与声明基础数据类型的变量无异。格式:

variable_name := structure_variable_type {value1, value2, ..., valueN}
// or
variable_name := structure_variable_type { key1: value1, key2: value2, ..., keyn: valuen}

  
 

示例:

package main

import "fmt"

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

func main() { /* 全值形式定义结构体。 */ book1 := book_s {"Go 语言", "fanguiju", "Go 语言编程", 1} fmt.Println(book1)

	/* key/value 形式定义结构体。 */ book2 := book_s {title: "Go 语言", author: "fanguiju", subject: "Go 语言编程", book_id: 1} fmt.Println(book2)

	/* 缺省形式定义结构体。 */ book3 := book_s {title: "Go 语言", author: "fanguiju"} fmt.Println(book3)
}

  
 

结果:

{Go 语言 fanguiju Go 语言编程 1}
{Go 语言 fanguiju Go 语言编程 1}
{Go 语言 fanguiju  0}

  
 

访问结构体成员

使用 . 成员访问符,来访问结构体的成员。

package main

import "fmt"

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

func main() { var book1 book_s book1.title = "Go 语言" book1.author = "fanguiju" book1.subject = "Go 语言编程" book1.book_id = 1 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)
}

  
 

结果:

Book 1 title : Go 语言
Book 1 author : fanguiju
Book 1 subject : Go 语言编程
Book 1 book_id : 1

  
 

向函数传递结构体

你可以像其他数据类型一样将结构体类型变量作为参数传递给函数,结构体是作为实参时采用的是值传递。

package main

import "fmt"

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

func print_book_infos(book book_s) { 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)
}

func main() { var book1 book_s book1.title = "Go 语言" book1.author = "fanguiju" book1.subject = "Go 语言编程" book1.book_id = 1 print_book_infos(book1)
}

  
 

结果:

Book title: Go 语言
Book author: fanguiju
Book subject: Go 语言编程
Book book_id: 1

  
 

结构体指针

相对的,将结构体指针类型变量作为函数实参传入时,肯定是引用语义的。Golang 中访问结构体指针类型变量的成员时,依然使用成员访问符 .,而不像 C 语言那样会有特殊的地址访问符 ->

示例:

package main

import "fmt"

type book_s struct { title   string author  string subject string book_id int
}
func print_book_infos(book *book_s) { fmt.Println( "Book title: %s", book.title) fmt.Println( "Book author: %s", book.author) fmt.Println( "Book subject: %s", book.subject) fmt.Println( "Book book_id: %d", book.book_id)
}

func change(book *book_s) { book.book_id = 2
}

func main() { var book1 book_s book1.title = "Go 语言" book1.author = "fanguiju" book1.subject = "Go 语言编程" book1.book_id = 1 print_book_infos(&book1) fmt.Println("---------") change(&book1) print_book_infos(&book1)
}

  
 

结果:

Book title: %s Go 语言
Book author: %s fanguiju
Book subject: %s Go 语言编程
Book book_id: %d 1
---------
Book title: %s Go 语言
Book author: %s fanguiju
Book subject: %s Go 语言编程
Book book_id: %d 2

  
 

结构体标签(Struct Tag)

Go 语言编程 — reflect 反射工具

文章来源: is-cloud.blog.csdn.net,作者:范桂飓,版权归原作者所有,如需转载,请联系作者。

原文链接:is-cloud.blog.csdn.net/article/details/107157286

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。