通常前端大手子寫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
雖然不須要手動配置path了,可是root仍是要選好。就這樣第一個go項目目錄就建好了。可是沒有清晰結構的項目目錄都是虛假的項目。沒有命名規則的代碼都是虛假的代碼,既然進了go的門,就遵照一下你們約定的go規範嘛。後面的文章會介紹test函數和文件的編寫。瀏覽器
_test
結尾Test
開頭沒有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 run ./main.go
複製代碼
能夠看到Hello world就在控制檯輸出了,可是本着科研精神,若是我改一些須要注意的地方,程序能正確運行嗎?
如截圖所見,package名字和文件名字不同不影響運行。咱們run的仍是main package。
咱們準備run一個不是main的package ,可是他的文件名仍是main.
看來即便你叫假髮,村裏的鄉親仍是隻認識桂。
文件名和package 的關係上面已經理清了,那麼,不管vivian仍是張二丫,只要本質是張二丫,鄉親們就認識你。
可是若是main文件沒有main函數,還能跑嗎?
看來,你要是沒了用途,管你假髮仍是桂,鄉親們照樣翻臉不認人。
js中沒有main函數必須作入口才能運行等等條條框框,因此你們寫起函數來也很隨意的,固然也有一些規範,但都不是語言層面的。Go不只要求要有main函數,並且還規定了這個函數頭頭必須和外面的妖豔賤貨不同。
java中main的返回值是void,這是強制的。一樣go中,main也不能有返回值。又本着科研的精神,咱們在犯錯的邊緣試探一下。
嗯能夠看到,我還沒運行的時候,就各類紅色飄飄。
main函數不支持傳參。官網是這麼說的
The main package must have package name main and declare a function main that takes no arguments and returns no value.
JS是一種解釋型語言,從現象上來看就是不用編譯。具體的解釋能夠看這篇大佬的文章,這裏就不贅述了。前端中vue文件的編譯其實能夠理解是虛假的編譯,他是爲了讓vue文件壓縮轉換成宿主環境能識別的js和html,而不是機器識別的。可是go是強類型語言,文件想被系統運行要轉換成二進制文件才能夠,多年不編譯文件的菜雞我,再次見到二進制的文件居然有點小激動。
以前說你們規定,編譯後的文件都放在了pkg文件夾中,咱們在pkg文件目錄下,運行
go build ../src/main.go
複製代碼
就能看到pkg文件夾下有了個可運行的二進制文件main了。
寫多了隨意的js,在接觸go的時候其實確實有點不適應。可是我以爲強類型語言可以很好的規範代碼,不再會出現用的時候才知道是什麼類型的這種狀況。 從hello world中,咱們瞭解了package 和 file name 以及 main函數的命名規範,以及初識了高貴的既不付出也不接受好意的main函數。
就這樣,我擁有了第一個由go生成的二進制文件,快樂。