Go语言中有多种复合数据,如:数组、切片、map、结构体 等等,它们也都有字面量写法,而且也很接近,初学者容易弄混淆,为了方便理解和记忆,我把这些类型的字面量写法抽象为了一个语法,即:
类型{成员列表}
,也就是说这些类型的字面量写法看似有区别,实则都一样;
目录
- 一、类型语法
- 二、字面量语法
内容
一、类型语法
数组
语法:
[数组的长度]元素类型
示例:
[3]string
切片slice
语法:
[]元素类型
示例:
[]string
map
语法:
map[key的类型]value的类型
示例:
map[string]int
结构体struct
语法:
struct {
成员名1 成员类型1
成员名2 成员类型2
成员名3 成员类型3
}
示例:
struct{ Name string, Age int }
二、字面量语法
类型{成员列表}
字面量语法示例
数组字面量语法:
//定义个类型别名,通过类型别名来创建字面量实例
type GBY [3]string
a := GBY{"郭","斌","勇"}
//创建长度为3的数组,并用一组元素来初始化
a := [3]string{"郭","斌","勇"}
//创建长度为4的数组,并用一组元素("郭","斌","勇")来初始化,末指定初始值的元素默认为元素类型的零值
b := [4]string{"郭","斌","勇"}
//数组的长度自动设置为初始化元素的个数
c := [...]string{"郭","斌","勇"}
//创建长度为5的数组,并指定索引2、5、3的元素值,索引的顺序可任意放置,索引也可以用常量表示,末指定初始值的元素认为元素类型的零值
const index5 = 5
d := [6]string{2:"郭",index5:"斌",3:"勇"}
//数组的长度会自动根据最大的索引来计算
e := [...]string{4:"郭"}
//定义个类型别名,通过类型别名来创建字面量实例
type GBY [3]string
g := GBY{"郭","斌","勇"}
切片slice字面量语法:
//创建切片,并用一组元素来初始化
a := []string{"郭","斌","勇"}
//创建切片,切片的长度会自动根据最大的索引来计算,并指定索引2、5、3的元素值,索引的顺序可任意放置,索引也可以用常量表示,末指定初始值的元素认为元素类型的零值
const index5 = 5
b := []string{2:"郭",index5:"斌",3:"勇"}
//定义个类型别名,通过类型别名来创建字面量实例
type GBY []string
g := GBY{"郭","斌","勇"}
map字面量语法:
//创建一个空的map实例
a := map[string]int{}
//创建一个map实例,并且指定初始的key和value
b := map[string]int{"郭斌勇":28,"闯":18}
//定义个类型别名,通过类型别名来创建字面量实例
type GBY map[string]int
g := GBY{"郭斌勇":28,"闯":18}
结构体struct字面量语法:
以结构体成员定义的顺序为
每个结构体成员指定一个面值。
type Point struct{ X, Y int }
p := Point{1, 2}
以成员名字和相应的值来初始化,可以包含部分或全部的成员,如果成员被忽略的话将默认用零值。因为,提供了成员的名字,所有成员出现的顺序并不重要。
type Point struct{ X int, Y int }
p := Point{Y:2,X:1}
//直接定义类型和实例
g := struct{ X, Y int }{"郭斌勇":28,"闯":18}