1. Hello world
import main
import (
'fmt'
)
func main() {
fmt.Println("Hello world")
}
2. 数据类型
大体同c/c++ 类似, 一种强变量类型的语言, 可以使用 var 关键字自行推导变量的类
2.1 变量声明
格式 1: var var_name [[type] = 具体值] //一次声明多个变量,且都进行初始化
格式 2: var_name := 具体值
2.2 常量声明
const var_name [type] = 值 // 使用等号赋值
2.3 变量是用 := 还是 =
对于新声明的变量,若使用格式2进行声明, 则使用 := (也就是不带var 关键字的变量声明使用:=)
其余情况下,好像都是使用 =
3. if 语句
大体同c/c++, 不同点可以从下述代码中看出:
if a > 1 {
fmt.Println("a > 1")
}
else {
fmt.Println("a <= 1")
}
如上, if后面的判断语句同 Python 一样不需要加括号。但是后面所要执行的语句无论数量,都需要被花括号所括起来
4. 循环语句
不同于其他语言, 在go语言中,只有一种 for 循环
for {
// 死循环, 配合 continue , break
...
}
for expr1; expr2; expr3 {
// 同 c/c++ 中的 for 循环一样
...
}
for expr2 {
// 同 c/c++ 中的 while 类似
...
}
5. switch语句
与c/c++ 中switch 语句最大的不同在于, 每一个case分支的末尾不需要添加break语句,该分支的程序运行完成后,会直接跳出switch语句块
可以变相的实现if语句
switch {
case 条件语句 :
...
default:
...
}
6. 数组
6.1 声明格式
格式 1: var arr_name [len]elem_type
格式 2: arr_name := [len]elem_type{[e1, e2, e3, ...]}
// var arr_name = [len]elem_type{[e1..]} 也可以
6.2 数组遍历
参考格式 1:
for i := 0; i < len(arr_name); i ++ {
operator(arr_name[i])
}
参考格式 2: 使用range
for i, num := range arr_name {
// i 是索引, val 是对应索引的值
...
}
6.3 补充
len(arr_name) // 返回数组元素个数(数组容量)
无初始化元素时,默认数组中元素都是0
7. 切片
变长数组 有些类似于c/c++中的vector
初始化 1: var_name := make([]type, len)
初始化 2: var_name := []type{[e1, e2, ....]}
添加元素: var_name = append(var_name, elem) //注意,必须要赋值给原来的切片
取出范围元素: var_name[s:e] //取出切片中 索引在 [s, e) 中的元素,左闭右开
8. map(哈希)
创建 1: map_name := make(map[key_type]val_type)
// 此处的赋值类似于Python的字典
创建 2: map_name := map[key_type]val_type{key: val, key: val...}
赋值 key-value对 : map_name[key] = value
删除 key-value对 : delet(map_name, key)
// 若map中存在key的键值对,则val为对应值,ok = true
//反之 val = 0, ok = false
寻值操作 val, ok := map_name[key]
9. 函数
参数的类型是后置的 同python类似,可以有多个返回值
无返回值的函数
func fun_name(a type, b type ..){
...
}
有返回值的函数
func fun_name(a type, b type ..) int {
...
return expr
}
多个返回值
func fun_name(a type, b type ..) (type, type ...) {
...
return c, d
}
接受返回值
var a [, 可能有多个返回值] = fun_name([可能有参数...])
10. 指针
func op(n *int) {
*n += 2 // 使用具体值的,用 *
}
调用 op(&n) //等价与 n = n + 2
11. 结构体
11.1 基本操作
type struct_name struct {
val_name type
val_name type
...
}
初始化
var_name := struct_name{val_name: val, val_name: val}
使用
var_name.val_name ..
11.2 结构体方法
定义
func (struct_name) fun_name(params ..) return_val {
...
}