Go 语言上手 - 基础语言|青训营笔记

111 阅读4分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第1篇笔记。 在这次课程中,我第一次接触了go,对go进行了安装和配置环境,并进行了学习。 首先我安装了go,过程: 1.访问 go.dev/ ,点击 Download ,下载对应平台安装包,安装即可 2.如果无法访问上述网址,可以改为访问 studygolang.com/dl 下载安装 3.如果访问 github 速度比较慢,建议配置 go mod proxy,参考 goproxy.cn/ 里面的描述配置,下载第三方依赖包的速度可以大大加快 然后配置了go环境,过程: 可以选择安装 VS Code , 或者 Goland ,对于 VS Code,需要安装 Go 插件 之后下载了示例代码程序并进行了相关学习,学习了go的语法和go的基础用法,为未来的工程开发奠定了一个扎实的基础。通过这节课程,我学习到了go的一些特性,同时我联想到了过去主要用到的python和erlong语言,发现了他们之间存在一定的差别,下面对其进行一些大致的总结: 相比于Python的40个特性,Go只有31个,可以说Go在语言设计上是相当克制的。比如,它没有隐式的数值转换,没有构造函数和析构函数,没有运算符重载,没有默认参数,也没有继承,没有泛型,没有异常,没有宏,没有函数修饰,更没有线程局部存储。 但是Go的特点也很鲜明,比如,它拥有协程、自动垃圾回收、包管理系统、一等公民的函数、栈空间管理等。 Go作为静态类型语言,保证了Go在运行效率、内存用量、类型安全都要强于Python和Erlang。 Go的数据类型也更加丰富,除了支持表、字典等复杂的数据结构,还支持指针和接口类型,这是Python和Erlang所没有的。特别是接口类型特别强大,它提供了管理类型系统的手段。而指针类型提供了管理内存的手段,这让Go进入底层软件开发提供了强有力的支持。 Go在面对对象的特性支持上做了很多反思和取舍,它没有类、虚函数、继承、泛型等特性。Go语言中面向对象编程的核心是组合和方法(function)。组合很类似于C语言的struct结构体的组合方式,方法类似于Java的接口(Interface),但是使用方法上与对象更加解耦,减少了对对象内部的侵入。Erlang则不支持面对对象编程范式,相比而言,Python对面对对象范式的支持最为全面。 在函数式编程的特性支持上,Erlang作为函数式语言,支持最为全面。但是基本的函数式语言特性,如lambda、高阶函数、curry等,三种语言都支持。 控制流的特性支持上,三种语言都差不多。Erlang支持尾递归优化,这给它在函数式编程上带来便利。而Go在通过动态扩展协程栈的方式来支持深度递归调用。Python则在深度递归调用上经常被爆栈。 Go和Erlang的并发模型都来源于CSP,但是Erlang是基于actor和消息传递(mailbox)的并发实现,Go是基于goroutine和管道(channel)的并发实现。不管Erlang的actor还是Go的goroutine,都满足协程的特点:由编程语言实现和调度,切换在用户态完成,创建销毁开销很小。至于Python,其多线程的切换和调度是基于操作系统实现,而且因为GIL的大坑级存在,无法真正做到并行。 而且从笔者的并发编程体验上看,Erlang的函数式编程语法风格和其OTP behavior框架提供的晦涩的回调(callback)使用方法,对大部分的程序员,如C/C++和Java出身的程序员来说,有一定的入门门槛和挑战。而被称为“互联网时代的C”的Go,其类C的语法和控制流,以及面对对象的编程范式,编程体验则好很多。 接下来我将会充分地利用课内外学到的go语言知识,来完成接下来的工程,提升我项目开发的能力。同时在字节青训营我也认识了很多志同道合的学长学姐,接下来我将不断向他们学习来提升我的个人能力,期待下一节的课程。