GO语言基础语法
1. GO语言的优点
- 高性能、高并发
- 语法简单、学习曲线平缓
- 丰富的标准库
- 完善的工具链
- 静态链接
- 快速编译
- 跨平台
- 垃圾回收
2. 基础语法
- 在 Go 程序中,一行代表一个语句结束。每个语句不需要像 C 家族中的其它语言一样以分号 ; 结尾,因为这些工作都将由 Go 编译器自动完成。如果你打算将多个语句写在同一行,它们则必须使用 ; 人为区分,但在实际开发中我们并不鼓励这种做法。
- Go 语言的字符串连接可以通过 + 实现:
2.1 变量
package main
import (
"fmt"
"math"
)
func main(){
var a = "initial"
var b,c int = 1, 2
var d = true
var e float64
f := float32(e)
g := a + "foo"
const s string = "constant"
const h = 500000000
const i = 3e20 / h
}
2.2 if-else语句
if 7%2 == 0{
fmt.Println("7 is even")
}else{
fmt.Println("7 is add")
}
2.3 循环
for j := 7; j < 9; j ++{
if n%2 == 0{
continue
}
}
2.4 switch
switch a{
case 1:
fmt.Println("one")
case 2:
fmt.Println("two")
default:
fmt.Println("other")
}
2.5 数组
b := [5]int{1,2,3,4,5}
var twoD [2][3]int
for i := 0; i < 2; i++{
for j := 0; j < 3; j++{
twoD[i][j] = i + j
}
}
2.6 切片
s := make([]string, 3) //或使用 make()函数来创建切片
//直接初始化切片,[] 表示是切片类型,{1,2,3}初始化值依次是1,2,3,其 **cap=len=3**。
s[0] = "a"
s[1] = "b"
s[2] = "c"
s = append(s,"d")
s = append(s,"e","f")
fmt.Println(s[2:5])
2.7 map
Map 是一种无序的键值对的集合。 Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。 Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,遍历 Map 时返回的键值对的顺序是不确定的。 在获取 Map 的值时,如果键不存在,返回该类型的零值,例如 int 类型的零值是 0,string 类型的零值是 ""。 Map 是引用类型,如果将一个 Map 传递给一个函数或赋值给另一个变量,它们都指向同一个底层数据结构,因此对 Map 的修改会影响到所有引用它的变量。
m := make(map[string]int)
m["one"] = 1
m["two"] = 2
m2 := map[string]int{"one": 1, "two": 2}
2.8 range
对于一个slice或者一个map的话,我们可以用range来快速遍历,这样代码能够更加简洁。range遍历的时候,对于数组会返回两个值,第一个是索引,第二个是对应位置的值。
nums := []int{2,3,4}
sum := 0
for i, num := range nums {
sum += num
if num == 2 {
fmt.Println("index:",i,"num:",num)
}
}
2.9 函数
下面是Golang里面一个简单的实现两个变量相加的函数。Golang和其他很多语言不一样的是,变量类型是后置的。 Golang里面的函数原生支持多个返回值。在实际的业务逻辑代码里面几乎所有的函数都返回两个值,第一个是真正的返回结果,第二个是一个错误信息。
func add(a int, b int) int{
return a + b
}
func main() {
res := add(1, 2)
}
2.10 指针
go里面也支持指针。当然,相比C和C++里面的指针,支持的操作很有限。指针的一个主要用途就是对于传入的参数进行修改。
func add2(n int){
n += 2
}
func add2ptr(n *int){
*n += 2
}