Go 学习

基本关键点

Go 程序的执行顺序:

  1. 按顺序导入所有被 main 包引用的其他包, 然后在每个包中执行如下流程
  2. 如果该包又导入了其他的包, 则从第一步开始递归执行, 但是每个包只会被导入一次
  3. 然后以相反的顺序在每个包中初始化常量和变量 如果该包有init函数的话 则调用函数
  4. 在完成这一切之后 main 也执行同样的过程, 最后调用 main函数开始执行程序

Go 代码中关键字 和 保留字

break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var

Go 代码中预定义标识符

append bool byte cap close complex complex64 complex128 uint16
copy false float32 float64 imag int int8 int16 uint32
int32 int64 iota len make new nil panic uint64
print println real recover string true uint uint8 uintptr

Go 中的数据类型

变量或常量 包含数据, 这些数据可以有不同的数据类型,简称类型.使用 var声明的变量值会初始化为该类型的零值。类型定义了某个变量的集合与可对其进行操作的集合.

类型可以是

基本类型 int,float,bool,string

结构化的 struct array slice map channel

描述行为的 interface

常量

常量使用 const定义, 用于存储不会改变的数据。存储在常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。

在Go 语言中, 可以省略类型说明符[type] 因为编译器可以根据变量的值来推断其类型

  • 显示类型定义: const b string = “abc”
  • 隐式类型定义: const b = “abc”

一个没有指定类型的常量被使用时, 会根据其使用环境而推断出它所需要具备的类型。换句话说, 未定义类型的常量会在必要时刻根据上下文来获得相关类型.

常量的值必须是能够在编译时就能够确定的

因为在编译期间自定义函数均属于未知 因此无法用于常量的赋值, 但内置函数可以使用

数字型的常量是没有大小和符号的, 并且可以使用任何精度而不会导致溢出:

1
2
3
4
5
6
const Ln2 = 0.693147180559945309417232121458\
176568075500134360255254120680009
const Log2E = 1/Ln2 // this is a precise reciprocal
const Billion = 1e9 // float constant
const hardEight = (1 << 100) >> 97

变量

声明变量的一般形式是 var.
需要注意的是, Go和许多编程语言不同. 它在声明变量时将变了的类型放在变量的名称之后.

1
2
3
4
5
6
7
8
var a, b *int

var (
a int
b bool
str string
)

这种写法主要用于声明包级别的全局变量,当你在函数体内声明局部变量时,应使用简短声明语法 :=

1
a := 1

打印

函数 Printf 可以在 fmt 包外部使用,这是因为它以大写字母 P 开头,该函数主要用于打印输出到控制台。通常使用的格式化字符串作为第一个参数:

1
2
func Printf(format string, list of variables to be printed)

格式化字符串可以含有一个或多个的格式化标识符,例如:%..,其中 .. 可以被不同类型所对应的标识符替换,如 %s 代表字符串标识符、%v 代表使用类型的默认输出格式的标识符。这些标识符所对应的值从格式化字符串后的第一个逗号开始按照相同顺序添加,如果参数超过 1 个则同样需要使用逗号分隔。使用这些占位符可以很好地控制格式化输出的文本。

函数 fmt.Sprintffmt.Printf 的作用是完全相同的,不过前者将格式化后的字符串以返回值的形式返回给调用者,因此你可以在程序中使用包含变量的字符串

函数 fmt.Printfmt.Println 会自动使用格式化标识符 %v 对字符串进行格式化,两者都会在每个参数之间自动增加空格,而后者还会在字符串的最后加上一个换行符。例如: