Golang语言 指针访问结构体的方法

时间:2022-05-04
本文章向大家介绍Golang语言 指针访问结构体的方法,主要内容包括定义结构体、访问结构体成员、结构体作为函数参数、结构体指针、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

package main import "fmt" type STvertex struct { X int Y int } func main() { p := STvertex {1, 2} q := &p q.X = 1e9 fmt.Println(p) }

定义结构体

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

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

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

variable_name := structure_variable_type {value1, value2...valuen}

访问结构体成员

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

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

package mainimport "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 : %sn", Book1.title)
   fmt.Printf( "Book 1 author : %sn", Book1.author)
   fmt.Printf( "Book 1 subject : %sn", Book1.subject)
   fmt.Printf( "Book 1 book_id : %dn", Book1.book_id)

   /* 打印 Book2 信息 */
   fmt.Printf( "Book 2 title : %sn", Book2.title)
   fmt.Printf( "Book 2 author : %sn", Book2.author)
   fmt.Printf( "Book 2 subject : %sn", Book2.subject)
   fmt.Printf( "Book 2 book_id : %dn", Book2.book_id)}

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

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

结构体作为函数参数

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

package mainimport "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 : %sn", book.title);
   fmt.Printf( "Book author : %sn", book.author);
   fmt.Printf( "Book subject : %sn", book.subject);
   fmt.Printf( "Book book_id : %dn", book.book_id);}

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

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

结构体指针

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

var struct_pointer *Books

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

struct_pointer = &Book1;

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

struct_pointer.title;

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

package mainimport "fmt"type Books struct {
   title string
   author string
   subject string
   book_id int}func main() {
   var Book1 Books        /* Declare Book1 of type Book */
   var Book2 Books        /* Declare Book2 of type Book */

   /* 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 : %sn", book.title);
   fmt.Printf( "Book author : %sn", book.author);
   fmt.Printf( "Book subject : %sn", book.subject);
   fmt.Printf( "Book book_id : %dn", book.book_id);}

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

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