Go语言入门指南(上)
基础语法
-
程序框架 一个常见的Go语言程序,一般包括三个部分。 第一行
package main声明了本程序属于main包。 第二行import导入外部包。 之后则是函数程序的主体部分,此处主函数作为程序的入口。package main import { "fmt" } func main() { fmt.Println("hello world") } -
变量 变量声明时未初始化,则设置为默认零值。 一般有如下四种变量声明方式,第一种与第二种最为常用,根据是否需要设置特殊初始值决定使用哪一种。
s := "" var s string var s = "" var s string = "" -
条件 条件语句相比C语言省略了括号,但是要保证左大括号与
if属于同一行。 其中,条件也可以带上初始化内容,必须需要一个布尔值变量作为条件判断。else if与else可选择是否添加。if num := 9; num < 0 { fmt.Println(num, "1") } else if num < 10 { fmt.Println(num, "2") } else { fmt.Println(num, "3") } -
循环 Go语言只存在一种循环,即
for循环。 一般形式为for initialization; condition; post {},但也可以省略其中部分,若只有条件或所有内容都无可以不带分号。 可以使用continue或break来控制循环。for n := 0; n < 5; n++ { if n%2 == 0 { continue } fmt.Println(n) } for i <= 3 { fmt.Println(i) i = i + 1 } for { fmt.Println("loop") break } -
switchswitch语句也有两种形式,可以选择是否带参数,不带参数的switch需要在case后添加布尔表达式。a := 2 switch a { case 1: fmt.Println("one") case 2, 3: fmt.Println("two or three") default: fmt.Println("other") } t := time.Now() switch { case t.Hour() < 12: fmt.Println("Before noon") default: fmt.Println("After noon") } -
数组 数组声明形式与变量类似,也可以自带初始化。 其访问内容的形式和C语言相同,以
twoD[2][2]的形式利用索引值访问。var a [5]int a[4] = 100 b := [5]int{1, 2, 3, 4, 5} var twoD [2][3]int -
切片 切片
slice可以看作动态数组,其遍历形式也保持左闭右开形式,如s[0:len(s)]会遍历切片s中所有内容,若省略冒号左或右侧的数,则默认为两端的值,即s[0:]也会遍历所有内容。 创建切片如下第一段代码的形式,可以利用make函数。其访问内容方式同数组。 追加内容如下第二段代码形式。 切片的拷贝则可以调用copy函数。// create s := make([]string, 3) good := []string{"g", "o", "o", "d"} // append s = append(s, "d") s = append(s, "e", "f") // copy c := make([]string, len(s)) copy(c, s) -
mapGo语言中的map是无序的,且保证访问内容是常量时间。 以下代码展示了创建、访问、删除和初始化的方法。// create m := make(map[string]int) m["one"] = 1 // get r, ok := m["unknow"] fmt.Println(r, ok) // 0 false // delete delete(m, "one") // initialization m2 := map[string]int{"one": 1, "two": 2} var m3 = map[string]int{"one": 1, "two": 2} -
rangerange和for循环的搭配使用可以实现遍历数组,切片或map等数据结构。 它会返回索引值和内容。// traversal of array nums := []int{2, 3, 4} sum := 0 for i, num := range nums { } // traversal of map m := map[string]string{"a": "A", "b": "B"} for k, v := range m { } -
函数 在一个包内函数的声明和调用顺序无严格要求。 函数声明需要写明参数类型、返回值等信息,且Go语言支持多返回值。
func add(a int, b int) int { return a + b } func add2(a, b int) int { return a + b } func exists(m map[string]string, k string) (v string, ok bool) { v, ok = m[k] return v, ok }