基础-学习Go语言

1. 每个 Go 程序都是由包构成的。
2. 程序从 main 包开始运行。
3. 本程序通过导入路径 “fmt” 和 “math/rand” 来使用这两个包。
4. 按照约定,包名与导入路径的最后一个元素一致。例如,”math/rand” 包中的源码均以 package rand 语句开始。

导出名

1. 在 Go 中,如果一个名字以大写字母开头,那么它就是已导出的。例如,Pizza 就是个已导出名,Pi 也同样,它导出自 math 包。
2. pizza 和 pi 并未以大写字母开头,所以它们是未导出的。
3. 在导入一个包时,你只能引用其中已导出的名字。任何“未导出”的名字在该包外均无法访问。

函数

1. 函数可以没有参数或接受多个参数。
2. 在本例中,add 接受两个 int 类型的参数。
3. 注意类型在变量名 之后。
4. 当连续两个或多个函数的已命名形参类型相同时,除最后一个类型以外,其它都可以省略。

多值返回

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

命名返回值

1. Go 的返回值可被命名,它们会被视作定义在函数顶部的变量。
2. 返回值的名称应当具有一定的意义,它可以作为文档使用。
3. 没有参数的 return 语句返回已命名的返回值。也就是 直接 返回。
4. 直接返回语句应当仅用在下面这样的短函数中。在长的函数中它们会影响代码的可读性。

变量

变量的初始化

1. var 语句用于声明一个变量列表,跟函数的参数列表一样,类型在最后。就像在这个例子中看到的一样,var 语句可以出现在包或函数级别。
2. 变量声明可以包含初始值,每个变量对应一个。如果初始化值已存在,则可以省略类型;变量会从初始值中获得类型。

短变量声明

1. 在函数中,简洁赋值语句 := 可在类型明确的地方代替 var 声明。函数外的每个语句都必须以关键字开始(var, func 等等),因此 := 结构不能在函数外使用。

基本类型

Go 的基本类型有

bool

string

int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr

byte // uint8 的别名

rune // int32 的别名
// 表示一个 Unicode 码点

float32 float64

complex64 complex128

1. 本例展示了几种类型的变量。 同导入语句一样,变量声明也可以“分组”成一个语法块。
2. int, uint 和 uintptr 在 32 位系统上通常为 32 位宽,在 64 位系统上则为 64 位宽。 当你需要一个整数值时应使用 int 类型,除非你有特殊的理由使用固定大小或无符号的整数类型。

零值

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

零值是:

– 数值类型为 0,
– 布尔类型为 false,
– 字符串为 “”(空字符串)。

类型转换

1. 表达式 T(v) 将值 v 转换为类型 T。
2. Go 在不同类型的项之间赋值时需要显式转换。

类型推导

1. 在声明一个变量而不指定其类型时(即使用不带类型的 := 语法或 var = 表达式语法),变量的类型由右值推导得出。
2. 不过当右边包含未指明类型的数值常量时,新变量的类型就可能是 int, float64 或 complex128了,这取决于常量的精度:

常量

1. 常量的声明与变量类似,只不过是使用 const 关键字。
2. 常量可以是字符、字符串、布尔值或数值。
3. 常量不能用 := 语法声明。

数值常量

1. 数值常量是高精度的 值。
2. 一个未指定类型的常量由上下文来决定其类型。
3. 再尝试一下输出 needInt(Big) 吧。

参考链接

1. Go指南中文版