bilibili事件发生后,忽然意识到这么高大上的bilibili竟然是用Go(golang)语言写的。忍不住我也要开始学这门有趣的语言。

其实Go官方是有非常好的中文版官方教程的,尊重版权(Golang Doc )。

这里我与大家分享出来一些文档的重点,首先是基础篇的内容,学完就能正式入门Go了,希望大家能happy。(我边学边更新~)


每个 Go 程序都是由包构成的。

main
"fmt""math/rand"
"math/rand"package rand
rand.Intn

导入

此代码用圆括号组合了导入,这是“分组”形式的导入语句。

当然你也可以编写多个导入语句,例如:

不过使用分组导入语句是更好的形式。

导出名

PizzaPimath
pizzapi

在导入一个包时,你只能引用其中已导出的名字。任何“未导出”的名字在该包外均无法访问。

执行代码,观察错误输出。

math.pimath.Pi

函数

函数可以没有参数或接受多个参数。

addint

注意类型在变量名 之后

(参考 这篇关于 Go 语法声明的文章了解这种类型声明形式出现的原因。)

函数(续)

当连续两个或多个函数的已命名形参类型相同时,除最后一个类型以外,其它都可以省略。

在本例中,

被缩写为

多值返回

函数可以返回任意数量的返回值。

swap

命名返回值

Go 的返回值可被命名,它们会被视作定义在函数顶部的变量。

返回值的名称应当具有一定的意义,它可以作为文档使用。

return直接

直接返回语句应当仅用在下面这样的短函数中。在长的函数中它们会影响代码的可读性。

变量

var
var

变量的初始化

变量声明可以包含初始值,每个变量对应一个。

如果初始化值已存在,则可以省略类型;变量会从初始值中获得类型。

短变量声明

:=var
varfunc:=

基本类型

Go 的基本类型有

本例展示了几种类型的变量。 同导入语句一样,变量声明也可以“分组”成一个语法块。

intuintuintptrint

零值

没有明确初始值的变量声明会被赋予它们的 零值

零值是:

0false""

类型转换

T(v)vT

一些关于数值的转换:

或者,更加简单的形式:

float64uint

类型推导

:=var =

当右值声明了类型时,新变量的类型与其相同:

intfloat64complex128
v

常量

const

常量可以是字符、字符串、布尔值或数值。

:=

数值常量

数值常量是高精度的

一个未指定类型的常量由上下文来决定其类型。

needInt(Big)
int
int

参考