结构体struct

Go 语言结构体 struct

在Go语言中,表示数据有多种方式

Go语言结构体可以表示多种不同类型数据,可以说结构体是不同类型数据的集合

所以,Go语言中,表示数据分以下方式

  1. 表示单个的数据,可以定义一个变量
  2. 表示同一类型的多个数据,可以定义数组
  3. 表示不同类型的多个数据,可以定义结构体

1 什么是Go语言结构体?

Go语言结构体,是不同数据类型的集合,也是用户自定义的类型

比如一本书,有书名,有价格,有页数,有作者

2 如何定义Go语言结构体?

定义Go语言结构体,使用关键字 type, struct 这两个关键字

语法如下:

type 结构体名字 struct { }

示例1 :定义书的结构体

type Book struct { name string //书的名字 price float32 //书的价格 author string //书的作者 }

3 如何访问Go语言结构体?

以上面的 Book 为例子,我们定义一个 Book 结构体变量,赋值并打印

**如下示例:**使用var 定义结构体变量并访问

package main import "fmt" type Book struct { name string //书的名字 price float32 //书的价格 author string //书的作者 } func main() { var book Book book.name = "Go语言入门教程" book.price = 55 book.author = "待兔" fmt.Println(book.name,book.price,book.author) } //输出如下: Go语言入门教程 55 待兔

由上可以,结构体访问内部的变量,用 . 操作符

上面用 var book Book 这种方式组定义结构体变量,同样的,也可以使用 := 直接定义并赋值

如下示例: 使用 := 定义结构体

package main import "fmt" type Book struct { name string //书的名字 price float32 //书的价格 author string //书的作者 } func main() { book := Book{ name: "Go语言入门教程", price: 55, author: "待兔", } fmt.Println(book.name, book.price, book.author) } //输出如下: Go语言入门教程 55 待兔

由上可知:使用 := 定义结构体变量时,必须对结构体字段进行初始赋值,并且这种方式,对字段的赋值,使用 :

除了以上的方法,我们还可以定义结构体变量的指针,也就是定义一个指针,指针结构体的变量

如下示例 定义结构体变量的指针

package main import "fmt" type Book struct { name string //书的名字 price float32 //书的价格 author string //书的作者 } func main() { book := new(Book) book.name = "Go语言入门教程" book.price = 55 book.author = "待兔" fmt.Println(book.name, book.price, book.author) } //输出如下: Go语言入门教程 55 待兔

Go语言中也是有指针的,并且通过指针访问结构体的变量,也是使用 . 操作符,和直接用 var 声明的结构体变量一样。

Go语言中的指针大大简化了,使用要比 C 语言中的指针简单很多,并且 C 语言中访问变量使用 -> 符号

4 Go语言结构体相当于其它语言中的类

Go语言中的结构体和其它语言,比如 Java, C++, Python 等里面的 类 是一样的

所以结构体中,也有方法

语法如下:

func (r ReceiverType) show(){ ... }

上面是 ReceiverType 是接收者的类型,比如 Book , r就是当前的实例

如下示例,我们给 Book 添加一个 show 方法

package main import "fmt" type Book struct { name string //书的名字 price float32 //书的价格 author string //书的作者 } // 1 给 Book 结构体添加一个方法 func (b Book) show(){ fmt.Println(b.name,b.price,b.author) } func main() { var book Book book.name = "Go语言入门教程" book.price = 55 book.author = "张三" // 2 调用 Book 的方法 book.show() } //输出如下: Go语言入门教程 55 待兔

从上面可知,Go语言中是通过结构体实现了其它语言中的类,叫结构体也好,叫类也罢,本质没变,都是一个意思

和其它语言不同的时,给结构本中添加方法,语法形式和其它语言有比较大的差别,没关系,多写几遍,就记住了。

我们也可以把func (b Book) show(){ ... } 改成 fun (b *Book) show() { ... } ,也就是说接收者从 Book 类型,变成了 *Book

接收者变成了一个指针了。但是用法和上面的一样。

这里就不再举例。

小结

Go语言的结构体就讲到这了,用法也很简单。下面简单总结一下:

  1. 结构体是多种不同类型的数据的集合

  2. 结构体的定义语法为:

    type 结构体名字 struct { } ,比如定义一个Book

    type Book struct { name string //书的名字 price float32 //书的价格 author string //书的作者 }
  3. 定义结构体变量可以使用下面方式

  • var book Book
  • book := Book { ... }
  • book := make(Book)
  1. 访问结构体中的成员,使用 . 符号,比如 book.name ,不管 book 是变量还是指针变量,都可以。
  2. Go 语言中的结构体相当于其它语言中的
  3. Go 语言中的结构体 可以有方法,添加方法语法: func (r ReceiverType) show(){ ... }