Go语言基础(day1)| 青训营笔记

86 阅读3分钟

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

纸上得来终觉浅,绝知此事要躬行。
作为小白,初窥Go语言的门径,希望能学到一些东西。

1.Go的特点

1.高性能、高并发
2.语法简单、学习曲线平缓(一周上手?!)
3.丰富的标准库
4.完善的工具链
5.静态链接(意味着一个exe直接走掉,但是是不是也会导致程序本身很大?)
6.快速编译(据老师说快于c++,笔者并没有尝试过)
7.跨平台
8.垃圾回收

2.开发环境配置

1.安装golang
2.配置集成开发环境(我选择的是goland,现在对jetbrains的东西真是离不开。)
从我个人的角度来看,两者的关系可以近似的认为是汽车发动机和车壳子。
tips:goland其实可以帮助开发者直接编译源代码,但是如果想在命令行窗口或者说终端里操作一下,还要做的必不可少的操作就是下载好你的go并且正确配置环境变量。这个可以自行查找各类博客,非常全。

3.基础语法重点知识学习

1.fmt包进行格式化输入输出
2.内置类型字符串,可以用“+”拼接,也可以用“=”进行比较

var a = "initial"
g := a + "foo"

var自动推导出变量类型
3.常量const没有固定类型,会根据上下文自动推导出类型。
4.切片——一个可变长度的数组,在append的时候需要进行回赋,本质原因是在底层,它的长度是有限的,空间不够要进行扩容,有一个指针的变化的问题,因此,append函数中有回赋的操作。(slice使用copy函数进行赋值,这个函数与“=”之间,还是老问题,copy本质是在于内容的复制,“=”是将地址复制走了,新旧对象还是同一个储存块里的东西。)

var x, y []int
x = []int{1, 2, 3, 4}
fmt.Println(x, y) // [1 2 3 4] []
y = x
y[0] = 0
//改变了y,x也随之改变,因为两者本质上是一个
fmt.Println( x, y) //[0 2 3 4] [0 2 3 4]

运行结果:

image.png

5.range快速遍历。即使是无序的map也可以。(这一点很重要,c++在这里就搞得不是很方便。)

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
}

6.函数返回值后置,允许多个,多个使用括号。
7.指针功能有限,常用解决浅拷贝的问题。(传址,用的时候*)
8.错误处理,带在函数第二个返回值内(golang函数常返回两个值,前者为真正的返回值,后者可以带错误信息,可以迅速找到哪个函数出现问题。甚至可以直接进行错误处理。并且类型也很自由,虽然有error类型,但是自己也可以随心发挥一下,本质是利用了golang允许函数有多个值返回。)