准备冲锋 golang入坑系列

史前摘要: 本来想写读前必读,但连续几篇博文都写读前必读,感觉就没有了新意。 所以换成史前摘要,反正是一个意思。 此摘要的目的仍然是提醒点击而来的同学,本系列最新文章在这里。放到博客园的目的是为了方便不能FQ的同学查看。 有人说写的太肤浅没意思,我的回答是,饭有粗茶咸淡,味有酸甜苦辣,萝卜青菜各有所爱。没辙,本人也就这点能耐了,耐看您就多看点,不耐看,呵呵,那我也改不了啦。

好,史前的话说完了,下面开始史后的话。

树活一张皮,人活一张脸。文章好不好,标题最重要。光起名就想了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型?。 刚开始写golang,别被老司机带坏了。老老实实的声明变量类型,等你变老了,再去调戏小姑娘

var i int
i = 0

没有人会问到常量么? 在有的文章或者教程中,常量也被归纳到类型中.Golang官方里面没有这么提,所以尊重原创,我也不认为常量算是一种类型。

变量

类型是为变量服务的,类型是衣,变量是皮。前面你所写的golang代码中已经有变量了,但却只其有而不知它为啥有,看下面就让你知道变量是怎么回事。

说的官方点,变量只不过是给程序可以操作的存储区域的名称而已。Go中的每个变量都有一个特定类型,该类型决定变量内存的大小和布局,可以存储在该内存中的值的范围,以及可以应用于该变量的操作集。

这种话,说出来都绕口。 通俗大白话,变量就是一种保存在内存里的数据结构。

变量名只能有字母,数字或者下划线来组成。但必须以字母或者下划线开头,别找事,用数字开头。那就是自己挖坑自己遭殃。自己作孽自己die。因为Golang对大小写敏感,所以首字母是否要大写,根据是否可见来判断。 如果不保准,就小写。等着后悔了,改成大写也来得及。

Golang也允许定义各种其他类型的变量,例如枚举、指针、数组、结构和Union,为了体现本书内容的厚度,我们放在以后的章节中讨论这些变量。在本章中,将只关注基本的变量类型。

声明变量的基本格式是:

var 变量名称 变量类型

也可以采用:

变量名称 := 初始值

但还是那句话,没练成老司机,就别调戏小姑娘。老老实实的用第一种吧。如果某天看到下面的声明方式也别奇怪:

var  i, j, k int

golang支持同时声明多个变量。 上面就声明了三个i、j和k三个int类型的变量。一般来说,声明完之后,就择机进行初始化。

i = 4
j,k = 5,6

可以单独给某个变量赋值,也可以同时给多个变量赋值。 喜欢哪个就用哪个,高兴就好。

像这种通过var来声明的变量,称之为静态变量。 也就是编译器在编译阶段就可以知道数据类型的变量。 反之就是动态变量,也就是通过 i := 0这种,运行时才能推导出变量类型。 不用担心,两者在效率上是否有区别。 现在的CPU老牛X了,不在乎这点差距。

介绍完常规命名方式,下面来介绍个"孔乙己"式的方式:

var a, b, c = 3, 4, "foo"

花哨不实用,知道即可。非要练,请自便~ 小心被团队里的其它人打折腿。

Golang的变量还是很简单的,实用的就那么几招,学会了就真的学会了,没有花架子。

本节起名是准备冲锋。冲锋之前,送你一把称心称手的兵器。介绍一个IDE

Goland

IDE大厂JetBrains推出的专业Golang IDE。 现在还是预览版,所以不要钱。 趁着免费赶紧用吧。当哪天收费了,撸起袖子去找破解Key吧。

安装好Goland之后,基本上什么都不需要配置,开箱既用。唯独需要你自己维护一下GOPATH。 不知道何为GOPATH? 老铁,上点心,别吃完饭就忘... 翻到前面几节复习一下。

Goland的GOPATH设置在Preferences --> Go --> GOPATH. 里面有全局GOPATH也有项目GOPATH,根据自己的需要,自己维护一下。如果心情好,可以顺手去维护了GOROOT。反正是no zuo no die。 工程跑不起来,还是自己受伤?。

所以只维护GOPATH就好。

第一式,亢龙有悔就结束了。 入门没入门? 没入门... 再从第一节读一遍,保证入门。 入了门? 看看有没有点star,没点赶紧点一个。每节最后我都提示一下,反正是为了凑字数..

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码农阿宇

C# 6.0中你不知道的新特性

为什么写? 今天去上班的公交上,有朋友在张队(张善友)的微信群里,发了一个介绍C# 6.0新特性的视频,视频7分钟,加上本人英语实在太low,整体看下来是一脸懵...

26440
来自专栏专注 Java 基础分享

计算机编码基础

     乱码是我们在日常的工作中经常遇到的问题,你可能从网上好不容易下载了一个炫酷的jQuery插件,但是却在打开的时候,发现某几个js文件都是类似“澶у0?...

20490
来自专栏小古哥的博客园

读书笔记-JavaScript面向对象编程(一)

前前后后大概花了两周的时间,终于把这本书大致看完了,对之前javascript高级程序设计中模糊不清的概念,有了一些新的看法和角度,整体上来说,本书还是一本比较...

34370
来自专栏工科狗和生物喵

【计算机本科补全计划】Java学习笔记(八) Java数组

数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。Java 语言中提供的数组是用来存储--固定--大小的同类型元素。

12930
来自专栏程序员的知识天地

JavaScript 字符串【整合】

JavaScript 字符串用于存储和处理文本。因此在编写 JS 代码之时总如影随形,在你处理用户的输入数据的时候,在读取或设置 DOM 对象的属性时,在操作 ...

20220
来自专栏彭湖湾的编程世界

【javascript】详解javascript闭包 — 大家准备好瓜子,我要开始讲故事啦~~

前言: 在这篇文章里,我将对那些在各种有关闭包的资料中频繁出现,但却又千篇一律,且暧昧模糊得让人难以理解的表述,做一次自己的解读。或者说是对“红宝书”的《函数表...

24460
来自专栏java学习

每日一练(2017/5/18)

Java基础 | 数据库 | Android | 学习视频 | 学习资料下载 课前导读 ●回复"每日一练"获取以前的题目! ●答案公布时间:为每期发布题目的第二...

26650
来自专栏转载gongluck的CSDN博客

python笔记:#009#判断语句

判断(if)语句 目标 开发中的应用场景 if 语句体验 if 语句进阶 综合应用 01. 开发中的应用场景 生活中的判断几乎是无所不在的,我们每天都在做各种各...

43040
来自专栏架构之路

索引优先队列-IndexedPrirotyQueue的原理及实现(源码)

1.索引优先队列的意义 索引优先队列是一个比较抽象的概念,它是一个优先队列,又带有索引,这个索引是用来干什么的呢? 在正常的队列中,我们只能访问队列头元素,整个...

47780
来自专栏微信公众号:Java团长

Java开发中如何正确踩坑

之前在这个手册刚发布的时候看过一遍,当时感觉真是每个开发者都应该必读的一本手册,期间还写过一篇关于日志规约的文章:《下一个项目为什么要用 SLF4J》,最近由于...

11340

扫码关注云+社区

领取腾讯云代金券