这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记。
一些简单的go语言基础
为什么选择go
1.高性能
2.语法简洁
3.丰富的标准库
4.完善的工具链
5.静态链接
6.快速编译
7.跨平台
8.垃圾回收
与python的对比
我之前的第一语言为python,后由于python性能原因想多熟悉一门语言作为常用语言,python作为脚本工具。固在此与python对比。
Golang其高效而又友好的语法,赢得了很多后端开发人员的青睐,最适用于高并发网络编程的语言之一。
Python不用说,排行榜的前十常驻居民,现在已经稳定在前五了。在机器学习、AI、数据分析领域成为必学语言。
选择go的一大原因:简单易学,在语法上和python有很多相似的地方。
python和go一大本质上的差异:一个是静态语言一个是动态语言。静态语言优势在于在多人协作,执行速度上有明显优势,动态语言则是编写简单。
- 可扩展性:Golang 在创建之初就考虑到了可扩展性。其内置并发性允许同时处理多项任务。Python 也使用并发性,但并非内置,它通过线程实现并行化。这意味着如果你打算处理大型数据集,Golang 似乎是更适合的选择。
- 性能:众所周知,Python 并非内存/CPU 友好的语言,但它具备大量库,可以高效执行基础的开发任务。Golang 具备内置功能,更适合微服务软件架构。
- 应用:Python 适合人工智能、数据分析、深度学习和 web 开发任务,而 Golang 适用于系统编程,执行云计算和集群计算应用的开发者喜欢使用 Golang。
- 社区与库:Python 的历史赋予它一定优势。其中之一就是它具备大量库,拥有大型支持社区。而 Golang 语言仍在增长期,没有那么多库和社区支持。
- 执行:如果速度是王道,那么 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
}