go中的容器

学go有一段时间了,现在来聊一下go里边的容器:

数组:

声明或者赋值时:
go里边数组的声明和java有点略微的不同:
在java中声明一个数组,你可以这样

int[] a = new int[10]
或者这样
int[] a;
a = new int[10]
或者这样,声明的时候就赋值
int[] a ={1,2,6,58,74}

但是在go里边姿势就变了
你要这样

var a [10]int
或者这样
var a = [10]int{1,2,6,58,74}               // 如果你不想这样写,你也可以这样a := [10]int{1,2,6,58,74}
当然了你还可以这样                          // 如果你不想这样写,你也可以这样a := [...]int{1,2,6,58,74}
var a =[...]int{1,2,6,58,74}

这样一比较是不是发现,go语法要简单些!!!
在遍历以及修改个别数组元素的值时go语法和Java差不多,就不说了

切片:

切片说白了,就是对于数组的更高一层的封装,所以数组支持的操作,它也支持,数组不支持的操作,它还支持。
在java中是没有这种数据类型的,在go里增加这种数据类型也是很nice的,这种数据类型使你操作数组很方便。
在声明时:
数组的声明方法也适用于切片这里就不写了

var a = make([]int,5,4)  // 括号里边分别是数组类型,大小,数组的容量(可以写也可以不写),这个容量类似于Java集合中的默认的初始化容量

操作时:
这里的方便之处就是你可以很方便的截取数组,你也可以改变数组的大小,不过改变数组大小时要注意了,这个有坑的

numbers := []int{0,1,2,3,4,5,6,7,8,9}
fmt.Println("number[1:3]",numbers[1:3])
// 上限到3
fmt.Println("number[:3]",numbers[:3])
// 从3开始
fmt.Println("numbers[3:]",numbers[3:])
// 追加
numbers = append(numbers,10,11,12)

是不是,有了切片之后,感觉美美哒!!!

map:

go里提供的是map,java里边也有
声明方式:
在java里边你可以这样声明map,这里它是个接口,真正起作用的是它的子类

Map<String,String> map = new HashMap<String,String>(10)

在go里边你可以这样:

var a map[string]string
a = make(map[string]string)
当然你也可以更简洁一些,能用一行代码解决的事情为什么非要用两行代码呐
a := make(map[string]string)

判断一个键是否存在时:
在java中你可以这样

map.containsKey("opt")

在go中你可以这样

opt, ok := a["opt"]
ok是bool类型,ok如果是true,就存在,如果不是,就不存在

在遍历map时:

你可以用借助迭代器

在go中:
你可以这样愉快的遍历

for k, v := range a{
}

在删除一个键值对时:
在java中你也可以这样

map.remove("ss");

在go中你可以这样:

delete(a,"ss')

在赋值或者添加元素方面:
在java中你可以这样

map.add("v")

在go中你可以这样

a["v"] = "v"

在遍历和声明方面go是比较简洁的

通道Channel:

在java中没有这种数据结构,只在nio中有这种概念。
在go中这个是被当作一种数据结构来对待,用来提供通信和同步机制
在Channel中 <- 你可能会经常见到,箭头指向即为数据流动方向,

ch <- 5         这个意思是把5放入通道
<- ch            这个意思是把通道中的数据取出
c := <- ch     这个意思是从通道中取数据并且赋值给c这个变量

声明时:

ch := make(chan int,100)  // 括号里边是第一个是类型第二个是缓存大小,这个是可选的。

关于这个Channel是重点,所以需要学的比较好,可以去看看写的好的博客。这里只是简单介绍。

总结:

不知道,你发现没有,在go中这些容器除了数组外,其它容器的创建都可以用 make,也就是这样
在创建时:

x := make(数据类型,参数)

在容器遍历时:
所有的容器都可以这样:

for 变量,变量 range 容器引用{
}
或者只有一个变量
for 变量 range 容器引用{
}

ok,今天就分析到这里,关于go,充满了美妙和简洁!!!

发布了123 篇原创文章 · 获赞 80 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/m0_38101105/article/details/101704211