零基础学习Golang(一)
原创
©著作权归作者所有:来自51CTO博客作者技术小白宅的原创作品,请联系作者获取转载授权,否则将追究法律责任
如何能像打王者荣耀一样从0开始学习Golang
为什么王者可以吸引那么多玩家?
为什么王者可以做到那么多年热度依然不减?
为什么那么多打王者可以不睡觉的兄弟?
不然,其实就是王者里面的打怪升级、团队合作、战术运营、绝地大翻盘或者是直接碾压对手带来的快感、满足感。那其实在学习的过程也可以借鉴这个方法来做,将目标拆解成一个个小兵、一只只野怪、一座座防御塔还有一群可爱的队友对手。
话不多说直接进入主题,来简单介绍下咱这主角Golang,就像王者介绍英雄一样,介绍他的背景、技能啥的。
2007 年 9 月 20 日的下午,在谷歌山景城总部的一间办公室里,谷歌的大佬级程序员 Rob Pike在等待一个 C++ 项目构建的过程中和谷歌的另外两个大佬级程序员 Robert Griesemer和 Ken Thompson进行了一次有关设计一门新编程语言的讨论。于是开始设计一门全新的语言,这是Go语言的最初原型。
然而,为啥Golang会被这几个大爹造出来呢?其实原因很简单,总的来说就是嫌弃了c/c++,因为随着软硬件的不断升级,很多在维护c/c++项目是会各种奇怪的问题,进而增加了开发会维护的成本,于是这些大爹们就造出了Golang这个玩意来。
虽然Golang继承了c的很多理念,例如表达式语法、控制结构、指针啥的,但Golang的特点依旧很突出,既保证了静态编译语言的安全和性能,又达到了动态语言开发维护的高效率,简单来说就是 Golang = C + Python 的特点。
介绍了背景,现在来介绍下技能(特点)。
打王者的兄弟都知道被动技能就英雄的特点,就像太乙的被动加钱、姜子牙的加经验、瑶妹的受控变羊等等。
而Golang的被动技能是:可以从语言层面很简单就实现并发,引入轻量级线程(goroutine),可实现大并发处理、高效利用多核。这就决定Golang在很多应用场景都要重要的一席之地,毕竟很多产品做大做强后,都会面临高并发大流量的情况,这时不仅要考虑硬件,还要考虑什么语言能榨干硬件的每一滴性能,毕竟要响应国家号召–绿色环保(就是省点,懂的都懂)
看完被动来看看其它技能(特点)
- 吸收了管道通信机制,形成Go语言特有的管道channel 通过管道channel ,可以实现不同的goroute之间的相互通信。
- 垃圾回收机制,内存自动回收,不需开发人员管理(c/c++麻烦的地,内存需要程序员大大管理)
- 函数可以返回多个值(我不懂你们觉得是不是,但我感觉挺有特点的)。
func getSumAndSub(n1 int, n2 int) (int, int)
{
sum := n1 + n2
sub := n1 - n2
return sum, sub
}
- 引入包的概念,用于组织程序结构,Go语言的一个文件都要归属于一个包,而不能单独存在。
介绍了背景、技能,现在来简单说下要咋驾驭它,毕竟要驾驭个王者英雄也是需要点时间研究、练习的。
首先:我个人比较习惯于使用Vscode来开发使用。其实有很多工具可供选择的,例如:vim、goland、liteide等等。这个不用太纠结,有个自己习惯的就行。
其次:聊聊它的打怪、打人机制。也就是执行流程。
- go build 编译后执行。具体来说就是go build 源码 ->编译生成可执行文件->运行可执行文件,拿到结果。
- go run 源码执行。这个比较简单,就是go run 源码 ,就能直接拿到结果。
- 这俩的区别。编译的可执行文件,谁拿到都能用。而go run 源码,这必须在特定环境才能用。
大家都知道,王者是个文明游戏不能骂人、不能挂机、不能使用外挂的,否则会被禁赛、禁言、封号啥的。既然有规则,就得好好遵守,毕竟那么多玩家,打个游戏能匹配到多次同台竞技的几率也是极低,所以要好好打游戏,不要搞这些乱七八糟的。而咱Golang也有一些注意事项的啦。
- Go源文件以".go"为扩展名。不然没法执行。
- Go应用程序的执行入口是main()函数。
- Go语言严格区分大小写。
- Go方法由一条条语句构成,语句后不需加分号
- Go编译器是一行行进行编译的,因此不能把多条语句写在同一行,否则会报错
- go语言定义的变量或者import的包如果未使用,代码编译也会失败(语言简洁性)
- 大括号都是成对出现的,缺一不可(有始有终)
具体Go的开发环境搭建,我就不啰嗦了,网上有很多大佬都有写的很好了。大伙对应自己的电脑系统去问问度娘就能找到合适的手把手教的。
后续接着写,如何打野、清线、欺负小朋友拿下胜利的。要想能坚持的学习一定要有循序渐进的成就感,让自己能看到能感觉到每天学习的收获。给大伙留个简单的作业吧。用于提升成就感。
就来个编程通用的hello world 吧。
我先写为敬:
package main
import "fmt"
func main(){
fmt.Println("hello world!")
}
然后go bulid 源码 编译执行,或是直接go run 源码 执行,看看控制台是否会输出hello world!毕竟学习个新语言,还是得从一点一滴的成就感来获取坚持下去的动力。加油!!!
乱七八糟的文字,惨不忍睹的排版,不忍直视的比喻。如有不对的地方,请不吝啬指点。谢了兄弟们。