官术网_书友最值得收藏!

1.2 一個簡單的Go程序

在完成了Go語言開發環境的搭建后,我們正式開始Go語言的開發之旅。本節以打印一個簡單的字符串“hello Golang”為例,講述最簡單的Go程序的執行,并解析其中每行代碼的意義。

1.2.1 編寫第一個Go程序

我們在任意文件夾下新建并編輯一個文件——first.go,其文件內容如下:

打開命令行終端(macOS/Linux的Terminal,Windows中的命令行),運行go run命令,執行結果如下:

    $ go run first.go
    hello Golang

下面我們對上述簡單Go程序進行解析。

1.聲明包名

package main用于聲明包名。包是函數的父級結構,用于管理函數。我們知道,所有應用程序都有一個執行入口,也是程序執行的起點。Go語言要求程序的入口必須是main包下的main方法。因為first.go是目前唯一的程序文件,所以該文件的包名必須聲明為“main”,否則程序將無法正常運行。

2.導入其他包

import "fmt"用于導入其他包。需要注意的是“fmt”并不是包名,而是一個相對路徑。import "fmt"實際是掃描該路徑下的所有代碼,以獲得其中的函數、自定義類型等。相對路徑的起點是Go語言的安裝目錄(GOROOT)下的src文件夾。在筆者的計算機上,該目錄為/usr/local/go/src。我們可以在命令行中查看該目錄,結果如下所示。

通過命令行的輸出可以看到,fmt目錄下有多個.go文件。利用import "fmt"可以導入fmt目錄下的.go文件中定義的函數。例如,打開print.go文件,可以看到包名為fmt;同時,該文件中還有一個名為Println的函數。導入該函數后,便可以利用fmt.Println的形式(包名+函數名)進行調用。

需要注意的是,雖然print.go中的包名與該文件所在的目錄名相同(均為“fmt”),但是包名和目錄名是兩個概念,二者也可以不同,我們將在6.3節進行詳細講述。

3.main()函數

func main()用于聲明一個名為main的函數,該函數將作為程序的入口。

4.打印字符串

fmt.Println("hello Golang")作為函數main()的函數體。該語句調用了fmt包中的Println()函數,用于打印一個固定字符串“hello Golang”。

5.Go程序的基本結構

通過以上分析我們可以看到,一個簡單的Go程序的基本結構可以概括為如圖1-3所示的樣子。

圖1-3 first.go代碼結構及函數調用示意圖

1.2.2 運行第一個Go程序

go run命令是運行.go文件最直接的命令。在first.go所在的目錄下,可以利用go run命令直接運行first.go文件,代碼如下:

    $ go run first.go
    hello Golang

go run命令封裝了編譯和執行的過程,我們也可以將該命令拆解為兩個步驟:

 利用go build命令進行編譯:

通過輸出結果可知,在當前目錄下生成了名為first的文件。從文件屬性(-rwxr-xr-x)也可以看出,所有用戶都擁有可執行權限(即權限中的x標識位)。同時,也代表該文件是一個可執行文件。

 直接運行first文件(在Windows環境中,雙擊即可執行文件),其輸出如下所示。

    $ ./first
    hello Golang

當然,go build的過程也是一個比較復雜的過程。我們將在“1.6 探尋Go語言程序的編譯執行過程”中詳細說明。

注意 可執行文件first的大小為1.8MB,而源碼文件first.go僅僅只有75B。我們可以猜想,go build實際是將所有關聯到的源碼文件都包含進來,這導致Go語言編譯出的可執行文件往往比較大。Go語言的編譯不同于C++或者Java編譯后的結果。C++可以引用動態鏈接庫,而Java往往依賴外部JAR包。

主站蜘蛛池模板: 崇明县| 额济纳旗| 凌源市| 高要市| 井研县| 安乡县| 台南市| 湛江市| 乌拉特后旗| 自贡市| 钦州市| 天柱县| 广饶县| 乐都县| 蒙自县| 赣州市| 黄龙县| 胶州市| 凉山| 浠水县| 永和县| 当涂县| 固始县| 遂宁市| 清原| 镇雄县| 涞水县| 衡东县| 奇台县| 青州市| 石狮市| 义乌市| 吉水县| 巴东县| 霍林郭勒市| 射洪县| 平顺县| 特克斯县| 荆门市| 惠州市| 三江|