Go程序设计语言1.1 hello,world
第1章
The Go Programming Language
入 門
本章是對于Go語言基本組件的一些說明。希望本章所提供的足夠信息和示例,能夠使您盡可能快地做一些有用的東西。本書所有的例子都是針對現(xiàn)實世界的任務的。本章將帶您嘗試體驗用Go語言來編寫各種程序:從簡單的文件、圖片處理到并發(fā)的客戶端和服務器的互聯(lián)網(wǎng)應用開發(fā)。雖然在一章里不能把所有東西講清楚,但是以這類應用作為學習一門語言的開始是一種高效的方式。
學習新語言比較自然的方式,是使用新語言寫一些你已經(jīng)可以用其他語言實現(xiàn)的程序。我們試圖說明和解釋如何用好Go語言,當你寫自己的代碼的時候,本章的代碼可以作為參考。
1.1 hello,world
我們依然從永恒的“hello,world”例子開始,它出現(xiàn)在1978年出版的《The C Program-ming Language》這本書的開頭。C對Go的影響非常直接,我們用“hello,world”來說明一些主要的思路:
?
Go是編譯型的語言。Go的工具鏈將程序的源文件轉(zhuǎn)變成機器相關(guān)的原生二進制指令。這些工具可以通過單一的go命令配合其子命令進行使用。最簡單的子命令是run,它將一個或多個以.go為后綴的源文件進行編譯、鏈接,然后運行生成的可執(zhí)行文件(本書中我們使用$符號作為命令提示符):
?
不出意料地,這將輸出:
?
Go原生地支持Unicode,所以它可以處理所有國家的語言。
如果這個程序不是一次性的實驗,那么編譯輸出成一個可復用的程序比較好。這通過go build來實現(xiàn):
?
這條命令生成了一個叫作helloworld的二進制程序,它可以不用進行任何其他處理,隨時執(zhí)行:
?
我們給每一個重要的例子都加了一個標簽,提示你可以從本書在gopl.io的源碼庫獲取代碼:
?
如果執(zhí)行g(shù)o get gopl.io/ch1/helloworld,它將會把源代碼取到相應的目錄。這將在2.6節(jié)和10.7節(jié)進行更多的討論。
現(xiàn)在我們來說說該程序本身。Go代碼是使用包來組織的,包類似于其他語言中的庫和模塊。一個包由一個或多個.go源文件組成,放在一個文件夾中,該文件夾的名字描述了包的作用。每一個源文件的開始都用package聲明,例子里面是package main,指明了這個文件屬于哪個包。后面跟著它導入的其他包的列表,然后是存儲在文件中的程序聲明。
Go的標準庫中有100多個包用來完成輸入、輸出、排序、文本處理等常規(guī)任務。例如,fmt包中的函數(shù)用來格式化輸出和掃描輸入。Println是fmt中一個基本的輸出函數(shù),它輸出一個或多個用空格分隔的值,結(jié)尾使用一個換行符,這樣看起來這些值是單行輸出。
名為main的包比較特殊,它用來定義一個獨立的可執(zhí)行程序,而不是庫。在main包中,函數(shù)main也是特殊的,不管在什么程序中,main做什么事情,它總是程序開始執(zhí)行的地方。當然,main通常調(diào)用其他包中的函數(shù)來做更多的事情,比如fmt.Println。
我們需要告訴編譯器源文件需要哪些包,用package聲明后面的import來導入這些包?!癶ello,world”程序僅使用了一個來自于其他包的函數(shù),而大多數(shù)程序可能導入更多的包。
你必須精確地導入需要的包。在缺失導入或存在不需要的包的情況下,編譯會失敗,這種嚴格的要求可以防止程序演化中引用不需要的包。
import聲明必須跟在package聲明之后。import導入聲明后面,是組成程序的函數(shù)、變量、常量、類型(以func、var、const、type開頭)聲明。大部分情況下,聲明的順序是沒有關(guān)系的。示例中的程序足夠短,因為它只聲明了一個函數(shù),這個函數(shù)又僅僅調(diào)用了一個其他的函數(shù)。為了節(jié)省空間,在處理示例的時候,我們有時不展示package和import聲明,但是它們存在于源文件中,并且編譯時必不可少。
一個函數(shù)的聲明由func關(guān)鍵字、函數(shù)名、參數(shù)列表(main函數(shù)為空)、返回值列表(可以為空)、放在大括號內(nèi)的函數(shù)體組成,函數(shù)體定義函數(shù)是用來做什么的,這將在第5章詳細介紹。
Go不需要在語句或聲明后面使用分號結(jié)尾,除非有多個語句或聲明出現(xiàn)在同一行。事實上,跟在特定符號后面的換行符被轉(zhuǎn)換為分號,在什么地方進行換行會影響對Go代碼的解析。例如,“{”符號必須和關(guān)鍵字func在同一行,不能獨自成行,并且在x+y這個表達式中,換行符可以在+操作符的后面,但是不能在+操作符的前面。
Go對于代碼的格式化要求非常嚴格。gofmt工具將代碼以標準格式重寫,go工具的fmt子命令使用gofmt工具來格式化指定包里的所有文件或者當前文件夾中的文件(默認情況下)。本書中包含的所有Go源代碼文件都使用gofmt運行過,你應該養(yǎng)成對自己的代碼使用gofmt工具的習慣。定制一個標準的格式,可以省去大量無關(guān)緊要的辯論,更重要的是,如果允許隨心所欲的格式,各種自動化的源代碼轉(zhuǎn)換工具將不可用。
許多文本編輯器可以配置為每次在保存文件時自動運行g(shù)ofmt,因此源文件總可以保持正確的形式。此外,一個相關(guān)的工具goimports可以按需管理導入聲明的插入和移除。它不是標準發(fā)布版的一部分,可以通過執(zhí)行下面的命令獲取到:
?
對大多數(shù)用戶來說,按照常規(guī)方式下載、編譯包,執(zhí)行自帶的測試,查看文檔等操作,使用go工具都可以實現(xiàn),這將在10.7節(jié)詳細介紹。
總結(jié)
以上是生活随笔為你收集整理的Go程序设计语言1.1 hello,world的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《Go程序设计语言》- 第1章:入门
- 下一篇: LabVIEW升级图像识别功能