第六届字节跳动青训营第一课 | 豆包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]