Go中复合数据类型的字面量语法抽象

字数 330阅读 77

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}

推荐阅读更多精彩内容

  • ES6 http://es6.ruanyifeng.com 目录 1 let 和 const 命令 2 变量的解构...
  • 出处---Go编程语言 欢迎来到 Go 编程语言指南。本指南涵盖了该语言的大部分重要特性 Go 语言的交互式简介,...
  • 3. Go 数据类型及数据结构 前面的几节中有意无意地创建了很多变量,在变量声明过程中,除非声明过程就初始化,否则...
  • 综述 数组和结构体是聚合类型,其值由许多元素或成员字段的值组成,且都有固定内存大小的数据结构 数组是由同构的元素组...
  • 1.安装 https://studygolang.com/dl 2.使用vscode编辑器安装go插件 3.go语...