菜狗前端初識go語言(一)

通常前端大手子寫js寫久了,要麼就是去嘗試其餘語言,從其餘語言的角度理解js收穫不同的感覺,要麼就是去研究js的內部實現,爲啥會有this,爲啥會有做用域,閉包這些耳熟能詳的知識點。固然,我是個菜狗,可是也想體驗一下比較js和其餘語言的感受。html

我在上學的時候,被c和c++深深的折磨過,到如今還對神同樣的指針有陰影,個人指針不是指向錕斤拷就是指向燙燙燙😠。可是私覺得要想成長就要敢於跳出溫馨圈,強類型語言的指針就是心魔,克服了就是神,被壓制住永遠都是魔。機緣巧合下,開始了學習go,我也但願在個人學習過程當中,可以對比js的相關特性,讓本身對js的理解可以加深(也許?)。前端

寫在文章前

這篇文章是面向新手的,各位大手子能夠忽略掉。若是文中有什麼錯誤理解或者錯誤觀點,或者各位看官老爺有什麼意見或者建議歡迎在評論中提出來,必定即時更正。Thanks~vue

安裝

js是依賴於宿主的環境,js 依賴於node環境或者瀏覽器環境,他是站在巨人的肩膀的上的。 go就不同了,go做爲一個成熟的語言,他獨立了,因此要想運行go語言,是須要安裝的。(這也許就是成長的代價吧)java

安裝的過程很簡單,官網下載,安裝。 大功告成。node

遠古版本的go須要配置環境變量,都1.12的船心版本了,開箱即用。c++

編譯器goland,走一波。golang

goland new project

雖然不須要手動配置path了,可是root仍是要選好。就這樣第一個go項目目錄就建好了。可是沒有清晰結構的項目目錄都是虛假的項目。沒有命名規則的代碼都是虛假的代碼,既然進了go的門,就遵照一下你們約定的go規範嘛。後面的文章會介紹test函數和文件的編寫。瀏覽器

  • src文件夾下面放源碼
  • pkg文件夾放編譯文件
  • 測試文件_test結尾
  • 測試函數Test開頭
  • 項目的入口函數必須是main

Hello World

沒有hello world 的新語言學習都是不完整的,咱們經過命令行,將hello world 輸出。bash

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生成的二進制文件,快樂。

相關文章
相關標籤/搜索