本教程希望以诙谐幽默,谁都能理解的方式去学习Go语言。大胆的尝试,希望编程是一个有血有肉的事情,而不是枯燥的代码~

1.0 搭建环境

我们可以去 Go语言中文网 来下载。Go的安装很简单,不像Java还要配置一大堆的东西,选择自己系统的对应版本,下载安装,像安装QQ一样无脑。我们就不再介绍了~如果真的有特别小白的朋友,也可以去百度看看图文安装教程~

1.1. 第一个Go程序

每个编程语言的学习,都是从一个"Hello, World."程序开始的,这个例子首次出现于1978年出版的C语言圣经《The C Programming Language》。关于"Hello, World."还有一个很美好的故事,那就是所有的程序员期待着计算机有一天能拥有真正的智能,然后对创造他的人们"发自内心"的说一句,Hello, World.

hello.go

hello.go

hello.go
$$

毫无疑问,我们将会看到命令行输出:

恭喜你!已经完成了第一个Go语言程序,无论你是否理解,我都要祝贺你,开启了Go语言的大门,接下来让我们来做一些更酷的事情吧。

大家加油~

1.2. 编译可执行文件

Go和Python最大的区别在于,Go是一门编译型语言而Python是一门解释型语言。

编译型编程语言

简单来说,编译型编程语言并非简单的写好代码然后就运行。他还需要经过一个编译的步骤,把写好的代码通过语言提供的编译器,编译成操作系统方便阅读而人类几乎无法阅读的代码。这种语言的好处就是,运行速度快。如:Go, Java, C/C++,都是编译型编程语言。

解释型编程语言

解释型编程语言就是,我们写好的代码,无需经过任何处理,就可以直接运行在操作系统之上。但是计算机并不能理解我们所写的代码,这个时候就需要一个叫做解释器的东西。解释器就相当于一个翻译官一样,把我们写的代码一行一行的翻译给计算机,计算机从解释器那里得到翻译后的代码,才能正常执行我们的程序。由于代码是一句一句解释执行的,这中间有很多等待的过程,而且还取决于解释器的执行速度,所以解释型编程语言的特点就是运行速度慢。如:Python就是解释型编程语言。

hello.go

hello.go

既然我们知道Go是一门编译型语言,我们能不能把hello.go进行编译,然后再来运行呢?

答案当然是可以的:

hello.gohello.exe
hello

最终你都能看到,命令行输出了:

runbuild
go run xx.go
go build xx.go

1.3. 打开封印之门的钥匙

有些同学看到我们这一节的名称,可能会想,车神这是写教程写的大脑抽筋了吧,并不是那样的。我希望编程可以用一种更加简单,更加方便新手接受和更加有趣的形式展现出来,而不是死板的函数,变量。

hello.go

hello.go

main()packagemainmain

那么究竟什么是方法呢?

方法

方法从字面我们可以理解为行为,比如我们人吃饭,睡觉,走路,谈恋爱,啪啪啪。这都是方法,是人的行为。那么我们的程序也会有一些行为,比如运行的行为,输出一句话的行为,在屏幕上画一个圆圈的行为,这些行为我们形象的称它们为方法或者叫函数。无论是方法还是函数,指的都是我们程序的某一项行为,那么这个行为或许是现实世界存在的,或许是现实世界不存在的。当你开始编程的时候,你就是造物主,你可以给你的程序创建任何行为。由于Go是Google创造的,所以我们想在Go的世界当一回造物主,就要依靠Google给我们提供的各种超能力。接下来我们就来看看,第一个超能力。

func 关键字

Go语言为我们提供了一个创建方法的关键字,这个关键字可以理解为我们的超能力,有了它我们就能给程序创建各种各样的方法,各种我们喜欢的方法。它的一个简单的用法就是:

从今天开始,我们就来体验当创世神的快感吧。

yadang.go

让我们来运行一下:

mainmainmainmainmainmainpackagepackagemain

1.4. 奔跑吧,亚当

上节课我们一起创造了亚当,但是我们的亚当还很低级,他只会说一句话,连走路都不会,这节课我们就让亚当,奔跑起来。

来看一下我们的亚当,现在是什么样子:

yadang.go

import "fmt"

这个方法可以在屏幕上输出一句话,我们的亚当就是依靠这个方法来跟大家问好的。

就像我们人类一样,当你想说话的时候,总是你的大脑想起一句话,然后把这句话送给我们的嘴巴,由我们的嘴巴把这句话说出来。我们并不知道大脑的神经元之间是如何传递的,我们并不是人体专家也不是神经学的专家,我们不懂人到底是怎么说话的,但是我们只需要知道,想说话就通过嘴巴就能说,我们的身体会自动处理一切需要的东西。

同样的,在我们编程的世界里也是一样的,我们不懂怎么样才能让操作系统在屏幕上显示一句话,我们不了解计算机的硬件之间是怎么通信的,但是Go为我们做好了一切,它把一切复杂的东西做成一个个方便使用的方法,使得我们不需要成为计算机专家,也能在电脑屏幕上面输出一句话。我们不用管背后有多么复杂的逻辑,只需要使用这简简单单的一个方法,就能实现。

亚当会说话了

事实上,我们的亚当目前只有一个主方法,他还没有任何身为人的方法,那今天我们就给亚当创造一些方法,让他看上去更像一个人:

yadang.go

speakrunshuohuaaaahahaha

yadang.go

我们来运行一下:

同样我们能够看到屏幕上输出了:

aaabbb

至此,大家已经掌握了如何让我们的亚当奔跑,但是我们的亚当还缺少一项重要的东西,那就是长相,下一节我们将一起来把我们的亚当变成一个帅气的猛男子吧~

1.5. 帅气的猛男子

今天我们将继续在Go语言大陆造人,上节课我们让亚当拥有了说话和奔跑的方法,但是我们的亚当还没有具体的身高,体重。那么这些东西也能通过方法来实现吗?答案是否定的,一个人的身高和体重,并不属于一个人的行为,而是属于这个人的属性。那么我们的程序也拥有一些属性,接下来我们就一起看一下如何给程序定义属性。

来看一下我们的亚当:

yadang.go

我们都知道,自然界中的属性有很多种,比如一个人的身高,可能是180cm,也可能是179.5cm,一个人的体重,可能是60kg,也可能是75.8kg。一个人的胳膊数量,可能是0,也可能是1或者2。一个人的外貌,可能是美丽,可能是一般,可能是丑陋。一个人的是不是有钱,那就只有两种可能,是或者否。那么这些数据都拥有不同的类型,可能是整数类型,也可能是小数类型,还可能是文字,负数,和是否类型。

那么在我们的Go语言世界里,也存在许许多多的数据类型。

布尔类型

bool

字符类型

string

整数类型

int int8 int16 int32 int64

无符号整数类型

uint uint8 uint16 uint32 uint64 uintptr

uint8 的别名

byte

int32 的别名(代表一个Unicode码)

rune

浮点型

float32 float64

实数和虚数

complex64 complex128

我们可以看到,在Go语言的世界里存在这么多的数据类型,但是常用的也就是我们上面说的,小数类型(浮点型),整数类型,是否类型(布尔型),文字类型(字符类型)。

那么比较特殊的是跟数字相关的,因为我们都知道,数字是有范围的,比如大于1000,大于10000。在我们现实生活中,如果一个人的体重是100kg,那地球就要使用100kg对应的那么大的空间来让这个人生活。如果一个人的体重是10000kg,那么地球就需要耗费10000kg对应的空间来给这个人。那么,如果一个体重只有60kg的人,他却被地球分配了一个能容纳10000kg体重的空间,是不是就浪费了我们地球有限的土地资源呢?

所以说,在Go语言的世界里,为了节约我们宝贵的土地资源(内存),我们需要在给程序定义属性的时候,选择合适的大小来分配,这样才不会浪费我们计算机的内存。

有符号整数类型

int8 有符号的8位整数,范围 -128 到127

int16 有符号的16位整数,范围 -32768 到 32767

int32 有符号的32位整数,范围 -2147483648 到 2147483647

int64 有符号的64位整数,范围 -9223372036854775808 到 9223372036854775807

int32int64intint64

这里所说的位,并不是有几位数字,而是我们计算机的一个容量单位,8位等于1个字节,1024个字节等于1KB,1024KB就等于1兆。那么16位就是两个字节。

int16int32int32int32int32int64
intuint

无符号整数类型

uint8 无符号8位整数,范围 0 到 255

uint16 无符号16位整数,范围 0 到 65535

uint32 无符号32位整数,范围 0 到 4294967295

uint64 无符号64位整数,范围 0 到 18446744073709551615

int

uintptr 无符号整数,用于存放一个指针。关于指针,我们将在后面为大家详细讲解,这里仅作为了解即可,不需要理解。

聪明的同学可能已经发现了,所谓的无符号整数类型,就是把原来存储负数的那部分空间,给取消了,此消彼长,这样正数部分就能加上原来负数的那部分空间用来存储更大的数字了。

uint8int8
int8int16int32int64uint8uint32

身高一米五?

让我们来看看如何给亚当一个身高的属性

yadang.go

运行我们的亚当,就会发现输出了:

var 变量名 类型 = 值
fmtPrintf%vPrintfheight%v

yadang.go

运行以后发现结果是:

我是亚当,身高 150 米,体重 20 吨。reflect.TypeOf(height)reflectTypeOf
var weight = 20intintint64
uint1665535

(持续更新中~)

最后更新时间:2018年04月28日10:20:09
作者:秋名山车神 慕课网提供版权保护



推荐阅读: