这是我参与「第三届青训营 -后端场」笔记创作活动的第一篇笔记,记录一下开营前几课的关于go语言学习的收获和思考。我之前是学习的java语言,对C++和python有过了解,没有接触过go语言,但了解到go语言在高并发、云原生等领域有着广泛的应用,所以对go语言比较感兴趣。通过这几节课,也了解到了go语言具有如下特点:
-
高性能、高并发
-
丰富的标准库
-
静态链接
-
快速编译
-
跨平台(交叉编译)
-
自动垃圾回收 go语言不是传统的面向对象语言,看起来语法规则和python比较类似,上手也还比较简单,其中自动垃圾回收机制类似JVM中的垃圾回收机制,通过讲师的示例我也了解了基本go语法。其中有以下几个注意点:
-
Golang不能像其它诸如Python一样,可以导入包却不使用,如果你碰到 imported and not used这样的错误,将导入的包删除即可。如果你只是想让包执行 init() 函数而不导入其它内容,这可以在包名前加入下划线;
-
Go语言的数值类型包括几种不同大小的整形数、浮点数和复数。其中int和int32也是不同的类型,即使int的大小也是32bit,在需要将int当作int32类型的地方需要一个显式的类型转换操作
-
fmt.Scanf("%d", &inp) 输入20,会再接受一个输入0.
解决办法:改为
fmt.Scanf("%d,%d,%d\r\n", &a, &b, &c),前提是你的os是win -
当我们希望通过命令行启动Golang程序,获取输入的各种形式参数时,该如何处理呢?
[os.Args]:os.Args
是一个string的切片,用来存储所有的命令行参数,包括go run main.go这部分,整体编译后实际是生成和运行的main.exe文件,所以第一个参数是main.exe -
go中defer的用法:
defer代码块会在函数调用链表中增加一个函数调用。这个函数调用不是普通的函数调用,而是会在函数正常返回,也就是return之后添加一个函数调用。因此,defer通常用来释放函数内部变量。 通过defer,我们可以在代码中优雅的关闭/清理代码中所使用的变量。 规则一 当defer被声明时,其参数就会被实时解析; 规则二 defer执行顺序为先进后出; 规则三 defer可以读取有名返回值; 参考:blog.csdn.net/huang_yong_…