Go语言入门实践(上)| 青训营

78 阅读2分钟

本文假定读者有其他高级编程语言的基础,重点突出Go语言与其他编程语言使用上的区别。

  1. 控制判断:

    if/for/switch都不需要括号(注意,循环只有for循环)

    switch功能强大,可以case写if语句等(switch后面可不写变量),且每个分支不需要break

	switch {
	case c > 0:
		fmt.Println(c, "is a positive number")
	default:
		fmt.Println(c, "is not a positive number")
	}
  1. 两种赋值方式
var a string = "hhh"//需要指定类型
b := "hhh"
  1. 数组:长度不可变,需指定类型

    很多场景下推荐使用切片(可变长度的数组,用make创建)

    切片使用时注意:

    1. 用append追加元素,必须把append返回的结果赋值回去(可能扩容)
    2. 不支持类似python的负值索引
	var arr[5] int
	arr[4] = 100
	var aarr[4][3] int
	aarr[1][2] = 1
   
   s := make([]string, 3)
	for i := 0; i < 3; i++ {
		s[i] = "sss"
	}
	fmt.Println(s, len(s))
	fmt.Println(s[1:3])
	
	c := make([]string, len(s))
	copy(c, s)
// [sss sss sss] 3
// [sss sss]
  1. range:实现快速遍历,返回两个值,第一个是索引,第二个是对应的值(可用下划线忽略)
	nums := []int{2, 3, 4}
	sum := 0
	for i, num := range nums {
		sum += num
		if num == 2 {
			fmt.Println("index:", i, "num:", num) // index: 0 num: 2
		}
	}
	fmt.Println(sum) // 9

	m := map[string]string{"a": "A", "b": "B"}
	for k, v := range m {
		fmt.Println(k, v) // b 8; a A
	}
	for k := range m {
		fmt.Println("key", k) // key a; key b
	}
  1. map:完全无序,既不是插入顺序也不是字典序
	m := make(map[string]int)
	m["one"] = 1
	m["two"] = 2
	fmt.Println(m)           // map[one:1 two:2]
	fmt.Println(len(m))      // 2
	fmt.Println(m["one"])    // 1
	fmt.Println(m["unknow"]) // 0

	r, ok := m["unknow"]
	fmt.Println(r, ok) // 0 false

	delete(m, "one")

	m2 := map[string]int{"one": 1, "two": 2}
	var m3 = map[string]int{"one": 1, "two": 2}
	fmt.Println(m2, m3)
  1. 函数:注意:变量类型后置,支持返回多个值(如(真实返回结果,错误信息))
package main

import "fmt"

func add(a int, b int) int {
	return a + b
}

func add2(a, b int) (int, bool) {
	return a + b, true
}

func exists(m map[string]string, k string) (v string, ok bool) {
	v, ok = m[k]
	return v, ok
}

func main() {
	res := add(1, 2)
	fmt.Println(res) // 3

	v, ok := exists(map[string]string{"a": "A"}, "a")
	fmt.Println(v, ok) // A True
}
  1. 指针:Go语言也支持指针,但是功能相比于C++受限。可以理解为类似Java的传引用,支持对变量的修改,否则Go默认是值传递。
package main

import "fmt"

func add2(n int) {
	n += 2
}

func add2ptr(n *int) {
	*n += 2
}

func main() {
	n := 5
	add2(n)
	fmt.Println(n) // 5
	add2ptr(&n)
	fmt.Println(n) // 7
}

未完待续Go语言入门实践(下),感谢阅读