什么是Golang
- 高性能、高并发
- 语法简单、学习曲线平缓
- 丰富的标准库
- 完善的工具链
- 静态链接
- 快速编译
- 跨平台
- 垃圾回收
基础语法
变量
- 声明变量的一般形式是使用
var关键字,可以一次声明多个变量,也可以根据值自行判定变量类型
var name type
var name1, name2 type
var number = 1 // int
:=也可以声明变量,自动识别变量类型,
number := 1 // int
注意
var intVal int
intVal := 1 // 这时候会产生编译错误,因为 intVal 已经声明,不需要重新声明
// 可以直接拼接字符串
var str = "hello"
str2 := str + "world" // helloworld
if-else
if a := 20 ; a < 20 {
// 如果条件为 true 则执行以下语句
fmt.Printf("a 小于 20\n" );
} else {
// 如果条件为 false 则执行以下语句
fmt.Printf("a 不小于 20\n" );
}
循环
Go 语言的 for 循环有 3 种形式,只有其中的一种使用分号
- 死循环
sum := 0
for {
sum++ // 无限循环下去
}
fmt.Println(sum) // 无法输出
- 常规写法
for i := 0; i <= 10; i++ {
fmt.Println(i)
}
- 类似其他语言
while语句形式(go 没有while)
sum := 1
for sum <= 10{
sum += sum
}
fmt.Println(sum)
switch
switch 语句执行的过程从上至下,直到找到匹配项,匹配项后面也不需要再加break。
var marks int = 90
switch marks {
case 90: grade = "A"
case 80: grade = "B"
case 50,60,70 : grade = "C"
default: grade = "D"
}
- 支持多条件匹配
switch{
case 1,2,3,4:
default:
}
-
不同的 case 之间不使用 break 分隔,默认只会执行一个 case。
-
如果想要执行多个 case,需要使用 fallthrough 关键字,也可用 break 终止。
switch{
case 1:
...
if(...){
break
}
fallthrough // 此时switch(1)会执行case1和case2,但是如果满足if条件,则只执行case1
case 2:
...
case 3:
}
数组
声明一维数组
// 数组 balance 长度为 10 类型为 float32
var balance [10] float32
初始化数组
var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
// 数组长度不确定,可以使用 ... 代替数组的长度,编译器会根据元素个数自行推断数组的长度
balance := [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
访问数组元素
var salary float32 = balance[9]
二维数组
var a [3][3] int
a[2][3] = 1
切片
使用make()函数来创建切片:
var s []int = make([]int, 3)
s := make([]int, 3)
s[0] = 1
切片初始化
s :=[] int {1,2,3 }
- len() 和 cap() 函数
切片是可索引的,并且可以由 len() 方法获取长度。 切片提供了计算容量的方法 cap() 可以测量切片最长可以达到多少。
- append() 和 copy() 函数
var s []int
// 允许追加空切片
s = append(s, 0)
// 向切片添加一个元素
s = append(s, 1)
// 同时添加多个元素
s = append(s, 2,3,4)
// 创建切片 s1 是之前切片的两倍容量
s1 := make([]int, len(s), (cap(s))*2)
// 拷贝 s 的内容到 s1
copy(s1,s)
- 切片截取 可以通过设置下限及上限来设置截取切片
// 打印子切片从索引1(包含) 到索引4(不包含)
fmt.Println(s[1:4])// [1 2 3]
// 默认下限为 0
fmt.Println(s[:3])// [0 1 2]
// 默认上限为 len(s)
fmt.Println(s[4:])// [4 5 6 7 8]