容器类型

目录

array

数组是一种数据结构,它是同一种类型的多个值拼在一起,而且,数组是有固定长度的,同时,数组里的每个元素都有它的下标,例如:

数组:1 2 3 4 5
下标:0 1 2 3 4

使用Go语言声明时是这样写:

package main

import (
	"fmt"
)

func main() {
	var x = [5]int{1, 2, 3, 4, 5}

	fmt.Printf("%+v\n", x)
}

在Go语言里,数组下标(也叫index)是从0开始的。不过通常在Go语言里,我们极少使用数组,而是使用切片(slice)。

slice

slice的底层实现就是数组,而类型声明上也是与数组极其相似,看例子:

package main

import (
	"fmt"
)

func main() {
	var x = []int{1, 2, 3, 4, 5}

	fmt.Printf("%+v\n", x)
}

对比一下可以发现,唯一的区别就在于,数组是使用 [5]int{xxx} 来进行初始化,而 slice 是使用 []int{xxx}

在Go中,我们经常使用slice。slice的特点是,长度是可以改变的,也就是说,我们可以无限追加元素到slice中。其他特点slice与数组并无区别。

map

map是哈希表,Go语言中,声明一个map是这样用:

var x map[string]string

但是注意,上面只是说明x的类型是 map[string]string,但是x的值却是nil。

struct

struct是用来把基本类型组合在一起的,举个例子,我们有个struct叫 Person,我们把名字,年龄组合在一起:

type Person struct {
    Name string
    age int
}

这样我们就可以代表一个人。不知道你是否注意到了,上面的例子中, Name 是大写的,而 age 是小写的,这有什么区别呢?

在Go语言中,大写开头的变量名是包外可以访问的,而小写的则是不可以的。还记得 fmt.Printf 吗?正是因为 Printf 是大写开头,所以我们 才能调用这个函数,如果是 fmt.printf,那么我们是不可以调用的。



更多文章
  • GCC默认的头文件搜索路径
  • 读《远见-如何规划职业生涯3大阶段》
  • 后端工程师学前端(五): SASS
  • 后端工程师学前端(四): CSS进阶(盒子模型)
  • 读《投资中最简单的事》
  • 后端工程师学前端(三): CSS进阶(特指度、单位和字体族)
  • 后端工程师学前端(二): CSS基础知识(规则与选择器)
  • Swift语法笔记
  • 后端工程师学前端(一): HTML
  • 读《管理的实践》
  • frp 源码阅读与分析(二):TCP内网穿透的实现
  • 五天不用微信 - 爽得很
  • frp 源码阅读与分析(一):流程和概念
  • 学习frp源码之简洁的在两个connection之间转发流量
  • 自己动手写一个反向代理