GO语言基础语法 | 青训营笔记

41 阅读3分钟

GO语言基础语法

1. GO语言的优点

  1. 高性能、高并发
  2. 语法简单、学习曲线平缓
  3. 丰富的标准库
  4. 完善的工具链
  5. 静态链接
  6. 快速编译
  7. 跨平台
  8. 垃圾回收

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
}