初识golang | 青训营笔记
这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
· golang环境配置
我认为对于golang来说,在环境配置这一方面是非常简单快速的。要想在自己的设备上运行go程序,首先需要在 go.dev/ 上下载对应操作系统的安装包进行安装。(如下图所示)
我使用的开发环境是VScode,要在VScode中编辑、运行go程序需要在左侧的扩展中安装golang的插件。
· golang基本语法
· 变量
在golang中常见的变量类型有整型,布尔型,浮点型,字符串等等。。。在golang的变量声明中,变量的类型可以省略不写,因为编译器会根据该变量的值自动判断变量的类型。golang变量声明的一般形式是使用var关键字“var identifier type” 也可以一次声明多个变量。golang中另一种声明变量的方式是使用“:=”赋值操作符,这种方法在代码中更加简短,也是我最喜欢用的一种声明方法。
var a = "initial"
var b, c int = 1, 2
var d = true
var e float64
f := float32(e)
g := a + "foo"
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))
· 判断语句
golang中的判断语句跟Java或者c语言中的判断语句区别不大 但是要注意,if后的表达式不用加括号(如果加了括号编译器会在你保存文件后自动去掉括号)
if 7%2 == 0 {
fmt.Println("7 is even")
} else {
fmt.Println("7 is odd")
}
if 8%4 == 0 {
fmt.Println("8 is divisible by 4")
}
if num := 9; num < 0 {
fmt.Println(num, "is negative")
} else if num < 10 {
fmt.Println(num, "has 1 digit")
} else {
fmt.Println(num, "has multiple digits")
}
· 循环语句
在golang中只有for一种循环语句,它有三种形式。最简单的形式是在for后面不写任何表达式,直接进入循环。这样我们会得到一个无限死循环。或者像Java中的while循环那样在for后写一个条件表达式。再或者还可以使用for循环的经典形式(for 赋值语句;条件语句;自增/减)
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
i++
}
· Switch
不爱用 所以不写
· 数组
golang中的数组与其他语言并无太大的区别,都是一个具有编号而且长度固定的元素序列。 在实际业务中很少直接使用数组,更多的是使用切片(类似于Java中的ArrayList)
// 在go语言中 数组的长度是固定的 所以在开发中一般不用
var a [5]int
a[4] = 100
fmt.Println("get:", a[2])
fmt.Println("len:", len(a))
b := [5]int{1, 2, 3, 4, 5}
fmt.Println(b)
var twoD [2][3]int
for i := 0; i < 2; i++ {
for j := 0; j < 3; j++ {
twoD[i][j] = i + j
}
}
fmt.Println("2d: ", twoD)
· 切片
切片不同于数组,它可以任意更改长度,同时也具有更丰富的操作。比如说可以使用make来创建一个切片,可以像数组一样进行取值,也可以用append追加元素
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
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]
fmt.Println(s[:5]) // [a b c d e]
fmt.Println(s[2:]) // [c d e f]
good := []string{"g", "o", "o", "d"}
fmt.Println(good) // [g o o d]
· 函数
golang于其他语言不一样的是它的返回值类型是后置的,而且golang的函数原生支持返回多个值,在实际的业务逻辑代码中几乎所有的函数都返回两个值,第一个是真正的返回结果,第二个是错误信息
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
}
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
}
· 总结
青训营第一天的学习可谓是干货满满,对于有Java基础的我通过短短两个视频的学习可以说能够用go语言编写一些简单的程序了,甚至可以去Leetcode上用go语言做几道算法题。不过对于视频中给的三个例子,特别是后两个我的理解很有限,这也与我对于网络编程这一块的经验偏少有关。
· 引用
标题:走进 Go 语言基础语言 - 掘金
标题:Go 语言教程 | 菜鸟教程 网址:[www.runoob.com/go/go-tutor…]