容器类型
目录
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
,那么我们是不可以调用的。
更多文章
本站热门
- socks5 协议详解
- zerotier简明教程
- 搞定面试中的系统设计题
- 用peewee代替SQLAlchemy
- frp 源码阅读与分析(一):流程和概念
- Golang(Go语言)中实现典型的fork调用
- DNSCrypt简明教程
- 一个Gunicorn worker数量引发的血案
- Golang validator使用教程
- Docker组件介绍(一):runc和containerd
- Docker组件介绍(二):shim, docker-init和docker-proxy
- 使用Go语言实现一个异步任务框架
- 协程(coroutine)简介 - 什么是协程?
- SQLAlchemy简明教程
- Go Module 简明教程