菜狗前端初识go语言(一)

513 阅读5分钟

一般前端大手子写js写久了,要么就是去尝试其他语言,从其他语言的角度理解js收获不一样的感受,要么就是去研究js的内部实现,为啥会有this,为啥会有作用域,闭包这些耳熟能详的知识点。当然,我是个菜狗,但是也想体验一下比较js和其他语言的感觉。

我在上学的时候,被c和c++深深的折磨过,到现在还对神一样的指针有阴影,我的指针不是指向锟斤拷就是指向烫烫烫😠。但是私以为要想成长就要勇于跳出舒适圈,强类型语言的指针就是心魔,克服了就是神,被压制住永远都是魔。机缘巧合下,开始了学习go,我也希望在我的学习过程中,能够对比js的相关特性,让自己对js的理解能够加深(也许?)。

写在文章前

这篇文章是面向新手的,各位大手子可以忽略掉。如果文中有什么错误理解或者错误观点,或者各位看官老爷有什么意见或者建议欢迎在评论中提出来,一定即时更正。Thanks~

安装

js是依赖于宿主的环境,js 依赖于node环境或者浏览器环境,他是站在巨人的肩膀的上的。 go就不一样了,go作为一个成熟的语言,他独立了,所以要想运行go语言,是需要安装的。(这也许就是成长的代价吧)

安装的过程很简单,官网下载,安装。 大功告成。

远古版本的go需要配置环境变量,都1.12的船心版本了,开箱即用。

编译器goland,走一波。

goland new project

虽然不需要手动配置path了,但是root还是要选好。就这样第一个go项目目录就建好了。但是没有清晰结构的项目目录都是虚假的项目。没有命名规则的代码都是虚假的代码,既然进了go的门,就遵守一下大家约定的go规范嘛。后面的文章会介绍test函数和文件的编写。

  • src文件夹下面放源码
  • pkg文件夹放编译文件
  • 测试文件_test结尾
  • 测试函数Test开头
  • 项目的入口函数必须是main

Hello World

没有hello world 的新语言学习都是不完整的,我们通过命令行,将hello world 输出。

go中每个文件都是package,内置package 和 文件的引入都使用import关键字引入。

// main.go
package main

import "fmt"

func main()  {
	fmt.Println("Hello World");
}

package是必须要声明的,package名字可以不与文件名一致。因为我们使用fmt的Println进行输出,所以要引用fmt

运行go文件

go run ./main.go

test result

可以看到Hello world就在控制台输出了,但是本着科研精神,如果我改一些需要注意的地方,程序能正确运行吗?

Hello World 的不正确的打开方式

文件名和package 不一致

function name different from file name

如截图所见,package名字和文件名字不一样不影响运行。我们run的还是main package。

package 不是 main

我们准备run一个不是main的package ,但是他的文件名还是main.

package not main

看来即使你叫假发,村里的乡亲还是只认识桂。

function 的名字不是main

文件名和package 的关系上面已经理清了,那么,无论vivian还是张二丫,只要本质是张二丫,乡亲们就认识你。

但是如果main文件没有main函数,还能跑吗?

no main function

看来,你要是没了用途,管你假发还是桂,乡亲们照样翻脸不认人。

Main 函数有自己的骄傲

js中没有main函数必须做入口才能运行等等条条框框,所以大家写起函数来也很随意的,当然也有一些规范,但都不是语言层面的。Go不仅要求要有main函数,而且还规定了这个函数头头必须和外面的妖艳贱货不一样。

没有返回值

java中main的返回值是void,这是强制的。同样go中,main也不能有返回值。又本着科研的精神,我们在犯错的边缘试探一下。

嗯可以看到,我还没运行的时候,就各种红色飘飘。

main function must no return

没有传参

main函数不支持传参。官网是这么说的

The main package must have package name main and declare a function main that takes no arguments and returns no value.

no parameter

编译

JS是一种解释型语言,从现象上来看就是不用编译。具体的解释可以看这篇大佬的文章,这里就不赘述了。前端中vue文件的编译其实可以理解是虚假的编译,他是为了让vue文件压缩转换成宿主环境能识别的js和html,而不是机器识别的。但是go是强类型语言,文件想被系统运行要转换成二进制文件才可以,多年不编译文件的菜鸡我,再次见到二进制的文件竟然有点小激动。

之前说大家规定,编译后的文件都放在了pkg文件夹中,我们在pkg文件目录下,运行

go build ../src/main.go

就能看到pkg文件夹下有了个可运行的二进制文件main了。

binary file

总结

写多了随意的js,在接触go的时候其实确实有点不适应。但是我觉得强类型语言能够很好的规范代码,再也不会出现用的时候才知道是什么类型的这种情况。 从hello world中,我们了解了package 和 file name 以及 main函数的命名规范,以及初识了高贵的既不付出也不接受好意的main函数。

就这样,我拥有了第一个由go生成的二进制文件,快乐。