第六届字节跳动青训营第一课 | 豆包MarsCode AI 刷题 #青训营笔记创作活动

84 阅读2分钟

第六届字节跳动青训营第一课 | 豆包MarsCode AI 刷题

Go语言上手

Go语言特点

基础语法

变量

Go是强类型语言,每个变量都有自己的类型。

字符串是内置类型,可以使用+,也可以用=判断是否相等。

声明变量有两种方式,分别见下面代码中的两种。

常量没有确定的类型,会根据上下文来自动确定类型。

func main() {
	var a = "initial" // 自动推导a是字符串类型
	var b, c int = 1, 2 // 方式1
	var d = true
	var e float64

	f := float32(e)

	g := a + "foo"      //方式2
	fmt.Println(a, b, c, d, e, f) // initial 1 2 true 0 0
	fmt.Println(g)                // initialapple

	const s string = "constant"
	const h = 500000000
	const i = 3e20 / h
	fmt.Println(s, h, i, math.Sin(h), math.Sin(i))
}

if else / for / switch

  • If语句后面没有括号,但是它的后面必须要加大括号。
  • Go语言中没有while循环,do while循环,只有唯一的一种for循环.
  • For循环,后面跟什么都不写,代表是死循环.
  • switch中的case不需要break. switch后面可以不加任何的变量,然后在case里面写条件分支,这样比多个if else代码逻辑会更清晰
func main() {

	i := 1
	for {   //死循环
		fmt.Println("loop")
		break
	}
	for j := 7; j < 9; j++ {
		fmt.Println(j)
	}

	for n := 0; n < 5; n++ {
		if n%2 == 0 {
			continue
		}
		fmt.Println(n)
	}
	for i <= 3 {
		fmt.Println(i)
		i = i + 1
	}
        
        a := 2
	switch {
	case 2 : 
		fmt.Println("one")   // 不需要break
	case 3:
		fmt.Println("four or five")
	default:
		fmt.Println("other")
	}

	t := time.Now()
	switch {     // 可以灵活根据各种条件
	case t.Hour() < 12:
		fmt.Println("It's before noon")
	default:
		fmt.Println("It's after noon")
	}

}

数组 / 切片

真实的业务代码里很少直接使用数字,因为它长度是固定的,使用更多的是切片。

切片不同的数组可以任意更改长度,可以像数字一样去取值,然后也可以使用APP来追加元素。切片的原理实际上是,它存储了一个长度和一个容量以以及一个指向一个数组的指针。在之前我碰到操作的时候,如果容量不够,会扩容并且返回新的切片。 slice可以像python一样切片的操作。

	var a [7]int
	a[4] = 100
	fmt.Println("get:", a[2])
	fmt.Println("len:", len(a))

	b := []int{1, 2, 3, 4, 5}
	fmt.Println(b)

	var twoD [2][3]int   // 二维数组
        
        s := make([]string, 3)   // 切片
	s[0] = "a"
	s[1] = "b"
	s[2] = "c"
	fmt.Println("get:", s[2])   // c
	fmt.Println("len:", len(s)) // 3
	sdd := make([]string, 3)
	s = append(s, "d")          // 追加
	s = append(s, "e", "f")

	fmt.Println(s) // [a b c d e f]

	c := make([]string, len(s))
	copy(c, s)                    // 拷贝
	fmt.Println(c) // [a b c d e f]

	fmt.Println(s[2:5]) // [c d e]    // 从index2到index5 不包含index5
	fmt.Println(s[:5])  // [a b c d e]
	fmt.Println(s[2:])  // [c d e f]

map