这是我参与「青训营 x 字节后端训练营」笔记创作活动的第1天。这是我在《走进GO语言基础》课程的第1篇笔记。
大佬请退出阅读
1. Go语言的特点
- 高性能、高并发
- 语法简单(类似C,但进行了一定的简化)、学习曲线平缓、易上手!
- 丰富的标准库(还可享受更新迭代)
- 完善的工具链(单元测试、性能测试等等等等)
- 静态链接(部署方便,程序文件简单)
- 快速编译(修改后可以快速得到编译结果)
- 跨很多常见和不常见的平台(编写、编译、程序运行)
- 带垃圾回收
- 越来越多的公司开始使用Go并投入资源进行维护建设
2. Go入门
2.1 Go入门
-
集成开发环境可以使用VS Code(需安装插件)、GoLand(收费,在校可免费试用)等
-
必不可少的hello world:
package main
import (
"fmt"
)
func main( ) {
fmt.Println("hello world")
}
- 变量:类似C/C++,注意声明方式、字符串运用等;常量会根据使用上下文自动确定类型
package main
import (
"fmt"
"math"
)
func main() {
var a = "bianliang" //自动推导变量类型
var b, c int = 1, 2
var e float64
f := float32(e)
g := a + "foo"
fmt.Println(a, math.Sin(b), c)
const h = 50000000
const i = 3e20 / h
}
- if else:与C很类似,但if后面的条件没有括号,且其后必须直接接大括号
- 循环:没有while/do while,只有for循环,格式同if;可以用continue、break
- switch:不用加break!同时case后可以使用任意的变量类型(e.g.字符串、结构体)——如果switch后不加变量名,可以在case处直接写条件式子,取代if else
- 数组:长度固定
var a [5]int - 切片:
s := make([]srting, 4);可以用s = append(s, "d")来追加元素、拓展长度;还有len(s),copy(new, origin) //new 需先定义,s[2:5],s[:2]等(不同于python,不支持负数索引) - map(“字典”,遍历时无序):
package main
import (
"fmt"
)
func main() {
s := make(map[string]int)
//string: type of the key; int: value
m["one"] = 1
fmt.Println(m)
fmt.Println(m["one"])
fmt.Println(m["undefined"]) //0
fmt.Println(len(m))
delete(m, "one")
r, ok := m["undefined"]
fmt.Println(r, ok) //0 false,获取有没有这个key存在
//另外的定义方式:
m2 := map[string]int{"one": 1, "two": 2}
var m3 = map[string]int{"one": 1, "two": 2}
fmt.Println(m2,m3)
}