五、Go的数组和结构体
1.数组
数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形、字符串或者自定义类型。
声明数组
var balance [10] float32
初始化数组
var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
//或者用...表示不限制大小,根据后面的{}的元素个数自动设置
var balance = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
多维数组
var threedim [5][10][4]int
向函数传递数组
方式一
形参设定数组大小:
void myFunction(param [10]int)
{
// dosomething
}
方式二
形参未设定数组大小:
void myFunction(param []int)
{
// dosomething
}
2.结构体
Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。
结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。
声明结构体:
type struct_variable_type struct {
member definition;
member definition;
...
member definition;
}
如:
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"})
}
访问结构体成员:
使用结构体.成员名
访问。
如Books1.title
输出Go 语言
结构体作为函数参数:
像其他数据类型一样将结构体类型作为参数传递给函数。
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);
}
//可以输出每个结构体的title及其取值。
结构体指针:
可以像其他指针变量一样定义结构体的指针变量。
var struct_pointer *Books
以上定义的指针变量可以存储结构体变量的地址。查看结构体变量地址,可以将 & 符号放置于结构体变量前:
struct_pointer = &Book1;
使用结构体指针访问结构体成员,使用 "." 操作符:
struct_pointer.title;