我是做java開發的,從接觸java開始算,已經8年了,為什么會想到學go語言呢?前端時間我一直在學習jvm,java的一些更底層的東西,梳理回顧時,感覺可以通過學習其他開發語言,來提升我對java的理解,站在另一個角度來看java。但是又怕是蜻蜓點水式的學,達不到效果,於是有了接下來的文章,希望能寫下去。
go的歷史這里就不談了,算一個很有背景的語言。后面的文章內容,基本都會涉及到go語言和java的比較。
我們開始吧!我們先向以前的編程前輩致敬,來一個hello world。
package main
import "fmt"
func main() {
// 單行注釋
/*
多行注釋
*/
fmt.Println("Hello, World!")
}
代碼分三部分
- 包聲明
- 導入包
- 函數
包聲明:go語言限制程序入口的go文件,必須命名為main,否則報錯。
go run: cannot run non-main package
導入包:后面的輸出語句用到了fmt包。但是go語言有個不同的地方是如果后面代碼里沒有用到前面導入的bao,將會報錯。
# command-line-arguments ./hello_world.go:4: imported and not used: "flag"
函數:我們看到go語言的入口是一個函數,沒有類存在。func是go語言定義函數的關鍵字。函數名是main,入口函數約定了函數名必須叫main,否則報錯:
# command-line-arguments runtime.main: call to external function main.main runtime.main: main.main: not defined runtime.main: undefined: main.main
注釋:代碼中我們能看到有單行注釋和多行注釋的格式。
我們看到函數后面跟了一個 大括號({ ),很多人會覺得這只是一些編程習慣。其實go語言語法要求大括號的前半部分必須要接在一個語句后面,不能另起一行,如下:
xxx {
yyyy
}
否則,報錯:
# command-line-arguments
./hello_world.go:6: syntax error: unexpected semicolon or newline before {
后面go語言的其他地方,都有這方面的要求。
我們看看java語言的hello world 。
public class Test {
public static void main(String args[]) {
System.out.println("hello world !");
}
}
其實java的限制就很少了,我們的包名都可以不設定,他只是對main方法有要求。go里面沒有要求mian方法歸屬一個類。
