Go語(yǔ)言hello world實(shí)例
在開(kāi)始編寫(xiě)應(yīng)用之前,我們先從最基本的程序開(kāi)始。就像你造房子之前不知道什么是地基一樣,編寫(xiě)程序也不知道如何開(kāi)始。因此,在本節(jié)中,我們要學(xué)習(xí)用最基本的語(yǔ)法讓Go程序運(yùn)行起來(lái)。
程序
這就像一個(gè)傳統(tǒng),在學(xué)習(xí)大部分語(yǔ)言之前,你先學(xué)會(huì)如何編寫(xiě)一個(gè)可以輸出hello world的程序。
準(zhǔn)備好了嗎?Let's Go!
package main
import "fmt"
func main() {
fmt.Printf("Hello, world or 你好,世界 or καλημ ́ρα κóσμ or こんにちはせかい\n")
}
輸出如下:
Hello, world or 你好,世界 or καλημ ́ρα κóσμ or こんにちはせかい
詳解
首先我們要了解一個(gè)概念,Go程序是通過(guò)package來(lái)組織的
package <pkgName>(在我們的例子中是package main)這一行告訴我們當(dāng)前文件屬于哪個(gè)包,而包名main則告訴我們它是一個(gè)可獨(dú)立運(yùn)行的包,它在編譯后會(huì)產(chǎn)生可執(zhí)行文件。除了main包之外,其它的包最后都會(huì)生成*.a文件(也就是包文件)并放置在$GOPATH/pkg/$GOOS_$GOARCH中(以Mac為例就是$GOPATH/pkg/darwin_amd64)。
每一個(gè)可獨(dú)立運(yùn)行的Go程序,必定包含一個(gè)package main,在這個(gè)main包中必定包含一個(gè)入口函數(shù)main,而這個(gè)函數(shù)既沒(méi)有參數(shù),也沒(méi)有返回值。
為了打印Hello, world...,我們調(diào)用了一個(gè)函數(shù)Printf,這個(gè)函數(shù)來(lái)自于fmt包,所以我們?cè)诘谌兄袑?dǎo)入了系統(tǒng)級(jí)別的fmt包:import "fmt"。
包的概念和Python中的package類似,它們都有一些特別的好處:模塊化(能夠把你的程序分成多個(gè)模塊)和可重用性(每個(gè)模塊都能被其它應(yīng)用程序反復(fù)使用)。我們?cè)谶@里只是先了解一下包的概念,后面我們將會(huì)編寫(xiě)自己的包。
在第五行中,我們通過(guò)關(guān)鍵字func定義了一個(gè)main函數(shù),函數(shù)體被放在{}(大括號(hào))中,就像我們平時(shí)寫(xiě)C、C++或Java時(shí)一樣。
大家可以看到main函數(shù)是沒(méi)有任何的參數(shù)的,我們接下來(lái)就學(xué)習(xí)如何編寫(xiě)帶參數(shù)的、返回0個(gè)或多個(gè)值的函數(shù)。
第六行,我們調(diào)用了fmt包里面定義的函數(shù)Printf。大家可以看到,這個(gè)函數(shù)是通過(guò)<pkgName>.<funcName>的方式調(diào)用的,這一點(diǎn)和Python十分相似。
前面提到過(guò),包名和包所在的文件夾名可以是不同的,此處的<pkgName>即為通過(guò)package <pkgName>聲明的包名,而非文件夾名。
最后大家可以看到我們輸出的內(nèi)容里面包含了很多非ASCII碼字符。實(shí)際上,Go是天生支持UTF-8的,任何字符都可以直接輸出,你甚至可以用UTF-8中的任何字符作為標(biāo)識(shí)符。
結(jié)論
Go使用package(和Python的模塊類似)來(lái)組織代碼。main.main()函數(shù)(這個(gè)函數(shù)主要位于主包)是每一個(gè)獨(dú)立的可運(yùn)行程序的入口點(diǎn)。Go使用UTF-8字符串和標(biāo)識(shí)符(因?yàn)閁TF-8的發(fā)明者也就是Go的發(fā)明者),所以它天生就具有多語(yǔ)言的支持。
相關(guān)文章
重學(xué)Go語(yǔ)言之錯(cuò)誤處理與異常機(jī)制詳解
Go語(yǔ)言的開(kāi)發(fā)者顯然覺(jué)得?try-catch被濫用了,因此?Go不支持使用?try-catch語(yǔ)句捕獲異常處理,那么,Go語(yǔ)言是如何定義和處理程序的異常呢,下面我們就來(lái)看看吧2023-08-08
golang語(yǔ)言如何將interface轉(zhuǎn)為int, string,slice,struct等類型
這篇文章主要介紹了golang語(yǔ)言如何將interface轉(zhuǎn)為int, string,slice,struct等類型,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
淺析go中的map數(shù)據(jù)結(jié)構(gòu)字典
golang中的map是一種數(shù)據(jù)類型,將鍵與值綁定到一起,底層是用哈希表實(shí)現(xiàn)的,可以快速的通過(guò)鍵找到對(duì)應(yīng)的值。這篇文章主要介紹了go中的數(shù)據(jù)結(jié)構(gòu)字典-map,需要的朋友可以參考下2019-11-11
golang中的string與其他格式數(shù)據(jù)的轉(zhuǎn)換方法詳解
這篇文章主要介紹了golang中的string與其他格式數(shù)據(jù)的轉(zhuǎn)換方法,文章通過(guò)代碼示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-10-10
GOLANG使用Context管理關(guān)聯(lián)goroutine的方法
這篇文章主要介紹了GOLANG使用Context管理關(guān)聯(lián)goroutine的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01
Golang 使用map需要注意的幾個(gè)點(diǎn)
這篇文章主要介紹了Golang 使用map需要注意的幾個(gè)點(diǎn),幫助大家更好的理解和學(xué)習(xí)golang,感興趣的朋友可以了解下2020-09-09
golang中struct和[]byte的相互轉(zhuǎn)換示例
這篇文章主要介紹了golang中struct和[]byte的相互轉(zhuǎn)換示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07

