这是我参与「第三届青训营 -后端场」笔记创作活动的的第 1 篇笔记
关于GO
Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。Go 被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。
GO的安装和IDE安装
这里都是傻瓜式安装,GO安装直接到官网上下载即可,一般安装时会自动将GO的环境变量加入到系统Path中,IDE推荐JBrain的GoLand IDE,和IDEA环境一样,简直不要太爽!
GO的语言结构和基础语法
一个简单的GO程序如下,一般GO的语言结构包含:包声明、引入包、函数、变量、语句、注释。
package main // 包声明
import "fmt" // 引入包
func main() { // 函数
fmt.Println("Hello, Go!")
}
要执行Go程序,首先保存文件为xxx.go,在命令行输入go xxx.go或者直接在IDE中单击绿色小箭头即可运行。
一些基础语法:
- 无需分号结尾,跟Python一样用分行代表一个语句
- 右花括号 { 不可以单独一样,例如下面的例子是不行的:
func main()
{
xxx...
} // error
- 标识符:按照C++/JAVA标准来命名就好
- 字符串连接:+号
- 关键字:参见 www.runoob.com/go/go-basic…
GO的变量、常量与运算符
变量
以一个例子来记住声明的格式:
package main // 包声明
import "fmt" // 引入包
func main() { // 函数
var a = "This is a string"
fmt.Print(a)
}
也可以不使用var,直接使用val := 1即可,但注意这种写法仅能用在声明,不可用在再次赋值,否则出错。
关于值类型和引用类型
所有像 int、float、bool 和 string 这些基本类型都属于值类型,使用这些类型的变量直接指向存在内存中的值;当使用等号 = 将一个变量的值赋值给另一个变量时,如:j = i,实际上是在内存中将 i 的值进行了拷贝。
更复杂的数据通常会需要使用多个字,这些数据一般使用引用类型保存。当使用赋值语句 r2 = r1 时,只有引用(地址)被复制。
常量
GO中的常量数据类型只能是数字类型、布尔类型和字符串型,一般采用const xxx=yyy即可。
运算符
与C/JAVA一致
GO的条件与循环
条件
- if
- if-else
- if嵌套
- switch
- select(无对应的case会阻塞当前进程)
循环
- for
- for嵌套
- break,continue,goto
GO的函数与变量作用域
函数
一个GO文件必须有main()函数,一个函数一般由几个部分组成:func函数声明、函数名、参数列表、返回类型、函数体
package main // 包声明
import "fmt" // 引入包
func min(x, y int) int {
var result int
if (x > y) {
result = y
} else {
result = x
}
return result
}
func main() { // 函数
fmt.Print(min(5,3))
}
关于传参:
默认情况下,Go 语言使用的是值传递,即在调用过程中不会影响到实际参数。
变量作用域
Go 语言中变量可以在三个地方声明:
- 函数内定义的变量称为局部变量,作用域只在函数体内
- 函数外定义的变量称为全局变量,全局变量可以在整个包甚至外部包(被导出后)使用;Go 语言程序中全局变量与局部变量名称可以相同,但是函数内的局部变量会被优先考虑。
- 函数定义中的变量称为形式参数
GO的数据结构
数组
初始化
// method 1
var arr = [5]float32{xxx,xxx,xxx,xxx,xxx}
// method 2
arr := [5]float32{xxx,xxx,xxx,xxx,xxx}
访问
使用[]运算符即可访问,这与C/JAVA是一致的。
指针
GO的指针用法与C一致,GO中的空指针定义为nil。
结构体
和C一样,定义字段,同时用点运算符完成赋值或计算,下面是一个例子:
package main // 包声明
import "fmt" // 引入包
type Language struct {
name string
difficulty string
}
func main() { // 函数
a := Language{"C++", "hard"}
b := Language{"JAVA", "hard"}
c := Language{"GO", "medium"}
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
}
output:
{C++ hard}
{JAVA hard}
{GO medium}
切片
这里的切片和Python中的切片概念是一样的,非常简单,参见 www.runoob.com/go/go-slice… 学习。