Go 语言结构体 struct
在Go语言中,表示数据有多种方式
Go语言结构体可以表示多种不同类型数据,可以说结构体是不同类型数据的集合
所以,Go语言中,表示数据分以下方式
- 表示单个的数据,可以定义一个变量
- 表示同一类型的多个数据,可以定义数组
- 表示不同类型的多个数据,可以定义结构体
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语言的结构体就讲到这了,用法也很简单。下面简单总结一下:
-
结构体是多种不同类型的数据的集合
-
结构体的定义语法为:
type 结构体名字 struct { }
,比如定义一个Booktype Book struct { name string //书的名字 price float32 //书的价格 author string //书的作者 }
-
定义结构体变量可以使用下面方式
var book Book
book := Book { ... }
book := make(Book)
-
访问结构体中的成员,使用
.
符号,比如book.name
,不管 book 是变量还是指针变量,都可以。 -
Go 语言中的结构体相当于其它语言中的类
-
Go 语言中的结构体 可以有方法,添加方法语法:
func (r ReceiverType) show(){ ... }