這是《不一樣的go語言》的開篇之作,我嘗試以java語言轉變者的角度來聊一聊go語言。所以今天先從go語言的基礎開始,即語法。
學習一門新的編程語言,必從語法開始。但需要注意的是,對於一個有大量項目經驗的程序員來說,可能看完語言介紹或者看完Hello World之后,就着急地想着上手寫個小東東玩玩,比如寫個簡單的web服務。但是將一門新的語言應用到實際項目中需要的東西很多很多。諸如go語言的項目結構是怎么樣的?有沒有什么約定?用什么IDE?依賴是怎么管理的?項目是怎么構建的?是怎么發布的?如果帶着這么多的思想負擔去學習一門新語言,這個時間花費恐怕會得不償失。
因而我覺得回歸本真最好不過。回到C語言的時代,面向過程、面向單文件編程。所以的代碼放在一個文件里,使用命令行編譯、運行。
接下來的示例,就是go語言版的Hello World。新建文件main.go
[eventer@localhost]# vi main.go
然后敲入以下代碼:
package main
import "fmt"
func main() {
fmt.Println("Hello World!")
}
要編譯、運行這段代碼,需要安裝go sdk。偉大的先驅者們,已經為我們開辟了綠色通道。sdk及官方文檔都可以在go 語言中文網找到,目前go語言的最新版本是1.11。
一個題外話,go語言從1.5版本開始實現自舉(Bootstrap,用要編譯的目標編程語言編寫其編譯器或匯編器),也就是用go語言寫編譯器,然后用來編譯go語言寫的代碼。因此當你需要從go1.5的源碼來構建go sdk的話,需要先下載安裝go1.4或者使用gcc構建go1.4的源碼,當你有go1.4的go編譯器的時候,就可以用它來編譯go1.5的源碼,從而得到go語言版的編譯器。
go sdk: 下載鏈接
下載安裝之后,設置GOROOT環境變量為go sdk所在目錄,然后設置一個工作目錄的環境變量GOPATH,用於存放未來要用到第三方包及你的程序。
至此,你可以使用以下命令編譯、運行上面那段代碼了。
[eventer@localhost]# go run main.go
波瀾不驚,可是一個Hello World 能看出什么來呢?那還是讓我們來看看各大語言的 Hello World 是長什么樣的吧。
Java版
package com.eventer.test;
import java.lang;
public class Test {
public static void main(String[] args) {
System.out.Println("Hello World!");
}
}
Python版
print "Hello World!\n";
C語言版
#include <stdio.h>
void main() {
printf("Hello World!\n");
}
C++版
#include <iostream>
void main() {
using namespace std;
cout << "Hello World!\n";
}
nodejs版
console.log('Hello World!');
C#版
using System;
public class HelloWorld
{
public static void Main()
{
Console.WriteLine("Hello World");
}
}
Common Lisp 版
(print "Hello World");
Lua 版
print "Hello World!/n"
從這么來看,go沒有更簡潔也沒有更復雜。所以確實從一個 Hello World 來看一門語言,真的看不出什么來。當然設計一門語言也不是從 Hello World 來開始設計的。可以得出結論,Hello World只是為了讓你覺得寫個 Hello World挺簡單的,趕快麻利地搭建環境吧。
下一篇將詳細地講述go語言更多地語法。
參考文獻