关于Golang的那些事(四)-- 复合数据类型

       上一章节讲完了基本数据类型,光有这些基本数据类型,还不足以去处理我们日常的业务,于是我们把基本数据类型做一个聚合,形成了我们常用的四种聚合数据类型:数组、slice、map和结构体,这一章节我们就来聊聊复合数据类型。

       数组这个概念在很多语言当中都有,我以前用的Node.js,还有大学学过的Java、C/C++、C#当中都有这个概念,就是具有固定长度且拥有零个或者多个相同数据类型元素的序列。由于数组长度固定,所以在Go中很少用到,slice可以自由的进行长度的缩短和伸长,所以很多场合下都用slice,而不是数组,在搞懂slice前,我们先把基本的数组搞明白。数组中的每一个元素是通过索引来访问的,索引从0到数组长度减1,Go内置的len函数可以返回长度。比如var q [3]int = [3]int{1, 2, 3}表示定义一个长度是3的字符串数组,里面的三个元素依次为1, 2,3,len(q)为3。还有一个比较方便的是一开始定义的时候不需要指定长度,只需要给出数组里面的元素即可,用省略号表示,比如q := [...]{1, 2, 3}。和刚刚的定义是一样的意思。

        slice表示一个拥有相同类型元素的可变长度的序列,是数组的变种,写法为[ ]T, 其中元素的类型都是T,可以把它想象成一个没有长度的数组,slice有三个属性:指针、长度和容器。指针和C一样,指向第一个元素的地址,长度和数组的长度概念类似,就是元素的个数,容量指的是从起始元素到最后一个元素之间的个数。说到这里容易搞混长度和容量的定义,长度指的是有元素的个数,一个slice里面有些位置可能没有元素,没有元素的位置只能算在容量里面,不能算在长度里面。

       map是一个拥有键值对元素的无序集合,在这个集合中,键的值是唯一的,键对应的值可以通过键来获取、更新、移除数据。map是散列表的引用,map的类型是map[k]V,  k是键的类型,V是对应的数据类型。使用内置的函数make可以创建一个map,比如ages: map[string]int {"alice": 31, "charlie": 34},等价于ages := make(map[string]int); ages["alice"] = 31; ages[charlie] = 34; 当我们想删除元素的时候,可以使用内置函数delete,比如delete(ages,“alice”),这个map很像我们在node.js里面对json的相关操作。

       结构体是将零个或者多个任意类型的变量组合在一起的聚合类型,有点像C++的结构体,也就是第一次接触面向对象编程的时候使用的一种复合数据类型,比如一个学生结构体可以定义为type Student struct {name string, dob time.Time}, 实例化的方法类似:var xiaoming Student,里面属性的获取通过点的方式进行,比如获取生日就是xiaoming.dob。

      有了这些复合数据类型,我们处理业务逻辑就更加方便了。

你可能感兴趣的:(关于Golang的那些事(四)-- 复合数据类型)