史前摘要: 本来想写读前必读,但连续几篇博文都写读前必读,感觉就没有了新意。 所以换成史前摘要,反正是一个意思。 此摘要的目的仍然是提醒点击而来的同学,本系列最新文章在这里。放到博客园的目的是为了方便不能*的同学查看。 有人说写的太肤浅没意思,我的回答是,饭有粗茶咸淡,味有酸甜苦辣,萝卜青菜各有所爱。没辙,本人也就这点能耐了,耐看您就多看点,不耐看,呵呵,那我也改不了啦。
好,史前的话说完了,下面开始史后的话。
树活一张皮,人活一张脸。文章好不好,标题最重要。光起名就想了10几分钟,中国汉语博大精深,但适合做技术类标题的真心太难想了。标题不够,写诗来凑,所以来段绕口小段子算是开场:
守法朝朝忧闷,强盗夜夜欢歌。 损人利己骑马骡,正直公平却挨饿。 修桥补路瞎眼人,杀人放火事儿真多。我到西天问我佛,佛说:我TM也没辙。
看完,乐完。收拾心情,开始继续学Golang。
在上一节,你学会了写第一个Golang程序,也知道了Golang的程序结构。我不知道你是什么技术背景,也不知道有多少编码功底。所以有的地方写的比较啰嗦,懂了,就一笑而过。不懂,就好好看一下。知识多了,不丢人。不懂装懂,最可怕。
这一节,你将接触到Golang的基本数据类型。
自打有编程语言开始,基本类型就三类:布尔,字符/字符串,数值(和其它)。不同的语言,对类型有不同的分类标准,就会衍生出更为细致的分类,但本质就这么三类。其它语言,咱先不管。先来看看Golang的类型划分:
- 布尔类型
只有两个值,true或者false。记住只有这两个值。别的语言可以通过0或者1来充当布尔判断,但在golang里面不行(笔杆子出真理,不行就自己写个代码来验证一下)。golang只认true or false。
- 字符/字符串
字符多了就是字符串。 从内存上来说,字符串就是内存中连续排列的字符的集合。在内存当中保存的都是01这样的二进制,不会保留一个汉字或者字母。所以每个字符都对应着一个数字,这个数字就是ASCII码里面的值。比如十进制的33就是'!'。虽然字符对应的是数字,但Golang仍然赋予字符一个特定的类型叫做byte。你可以这么定义一个字符:
var c byte
c = 33
字符多了就是串,所以字符串类型string也可以理解成是[]byte(byte数组)。提醒一点,Golang的字符串是不可更改的。 记住即可,日常中不会体会到,除非装X较真的时候(比如面试)会提到。这里的不可更改指的是下面的场景:
str := "Who said string cannot change?"
str = "I don't konw"
str仍然是哪个str,但str指向的内存地址已经变了。str只是一个名字,一个代号而已,拿掉这个代号,str又是什么东西(写这段的时候,刚好旁边在放武林外传吕秀才口擒姬无命那段,所以直接用了,应该没有版权问题)? 上面说到字符串是内存中连续的字符集合,所以当你对字符串修改时,其实是将一段新的内存给了str。因此才会说字符串是不可更改的。因为从来都是给它赋新值,旧值直接被垃圾回收了。 这段记住即可,除了面试,其它没有会被提到的场合。
- 数值类型
这个类型需要好好说一下了,因为衍生的类型太多了。但多归多,真正使用的就那么几个(谁用谁知道)。
整型值 |
---|
序号 | 类型和取值范围 |
---|---|
1 | uint8 无符号8位整型 (0 to 255) |
2 | uint16 无符号16位整型 (0 to 65535) |
3 | uint32 无符号32位整型 (0 to 4294967295) |
4 | uint64 无符号64位整型 (0 to 18446744073709551615) |
5 | int8 有符号8位整型 (-128 to 127) |
6 | int16 有符号16位整型 (-32768 to 32767) |
7 | int32 有符号32位整型 (-2147483648 to 2147483647) |
8 | int64 有符号64位整型 (-9223372036854775808 to 9223372036854775807) |
一句话点明:无符号整型只能表示正数,有符号的可以表示负数。但数的个数是相同的(自己找个笔头,算算二进制就知道了)
浮点数 |
---|
符号 | 类型和取值范围 |
---|---|
1 | **float32 **32位浮点数 |
2 | **float64 **64位浮点数 |
3 | **complex64 **实部虚部都是一个float32的复数 |
4 | **complex128 **实部虚部都是一个float64的复数 |
Golang里面没有float类型,所以需要浮点数的时候需要指明长度。 除了计算和钱有关的程序(计算利息,收益等等),基本上很少会用到浮点数。
其它数值类型 |
---|
序号 | 类型 |
---|---|
1 | byte等同于uint8 |
2 | rune等同于 int32 |
3 | **uint **等同于 32 or 64 bits |
4 | **int **等同于 uint |
5 | uintpt 指针类型 CGO里面经常用到 |
上面列出了Golang当中所有的数值类型,大部分而且是绝大部分是不常用到的。经常用的就是int, byte再加上float32/64,没有其它。
甚至有的时候,你都不知道用的是什么类型,例如:
i := 0
很可能你就直接声明了一个变量。这个变量什么类型, who care? 不能说你错,因为我也经常这么干。但我知道i 是int型