Go语言快速上手 | 青训营笔记

98 阅读3分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记。

一些简单的go语言基础

为什么选择go

1.高性能

2.语法简洁

3.丰富的标准库

4.完善的工具链

5.静态链接

6.快速编译

7.跨平台

8.垃圾回收

与python的对比

我之前的第一语言为python,后由于python性能原因想多熟悉一门语言作为常用语言,python作为脚本工具。固在此与python对比。

Golang其高效而又友好的语法,赢得了很多后端开发人员的青睐,最适用于高并发网络编程的语言之一。

Python不用说,排行榜的前十常驻居民,现在已经稳定在前五了。在机器学习、AI、数据分析领域成为必学语言。

选择go的一大原因:简单易学,在语法上和python有很多相似的地方。

python和go一大本质上的差异:一个是静态语言一个是动态语言。静态语言优势在于在多人协作,执行速度上有明显优势,动态语言则是编写简单。

  1. 可扩展性:Golang 在创建之初就考虑到了可扩展性。其内置并发性允许同时处理多项任务。Python 也使用并发性,但并非内置,它通过线程实现并行化。这意味着如果你打算处理大型数据集,Golang 似乎是更适合的选择。
  2. 性能:众所周知,Python 并非内存/CPU 友好的语言,但它具备大量库,可以高效执行基础的开发任务。Golang 具备内置功能,更适合微服务软件架构。
  3. 应用:Python 适合人工智能、数据分析、深度学习和 web 开发任务,而 Golang 适用于系统编程,执行云计算和集群计算应用的开发者喜欢使用 Golang。
  4. 社区与库:Python 的历史赋予它一定优势。其中之一就是它具备大量库,拥有大型支持社区。而 Golang 语言仍在增长期,没有那么多库和社区支持。
  5. 执行:如果速度是王道,那么 Golang 遥遥领先。

go入门

变量

两种变量的声明方式:

func main() {
        var a = "hello,world"//自动推导类型
	var b int = 1 //var+变量名+类型
        c:=1 //简短声明
        fmt.Println(a,b,c)
        //结构体
        var user1 User
	user2:=User{Name:"111"}
        fmt.Println(user1,user2)
        //数组
        var d [5]int
        var e [2][3]int
        f:=[5]int{1, 2, 3, 4, 5}
        fmt.Println(d,e,f)
        //map
        m1 := make(map[string]int)
        var m2 = map[string]int{"one": 1, "two": 2}
}

循环

func main() {
	i := 1
	for {
		fmt.Println("loop")
		break
	}
	for j := 7; j < 9; j++ {
		fmt.Println(j)
	}

	for i <= 3 {
		fmt.Println(i)
		i = i + 1
	}
        //循环遍历
        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
	}
}

条件判断

func main() {
	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")
	}
}

数组切片

func main() {

	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]
}

结构体

type user struct {
	name     string
	password string
}

func (u user) checkPassword(password string) bool {
	return u.password == password
}

func (u *user) resetPassword(password string) {
	u.password = password
}

func main() {
	a := user{name: "wang", password: "1024"}
	a.resetPassword("2048")
	fmt.Println(a.checkPassword("2048")) // true
}