初识golang | 青训营笔记

98 阅读2分钟

初识golang | 青训营笔记

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

· golang环境配置

我认为对于golang来说,在环境配置这一方面是非常简单快速的。要想在自己的设备上运行go程序,首先需要在 go.dev/ 上下载对应操作系统的安装包进行安装。(如下图所示)

image.png

我使用的开发环境是VScode,要在VScode中编辑、运行go程序需要在左侧的扩展中安装golang的插件。

image.png

· 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…]