婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 創建第一個Go語言程序Hello,Go!

創建第一個Go語言程序Hello,Go!

熱門標簽:工商信用卡外呼系統教程 旅游廁所如何電子地圖標注 外呼系統多少錢一年 智能營銷軟件 滁州自建外呼系統 經常接到推銷電話機器人的電話 外呼系統如何接收服務密碼 海外照相館地圖標注入駐 客服級電銷機器人

建立一個用于編寫Go程序的工作目錄go-examples,其絕對路徑為/home/go-examples.開始編寫我們的第一個Go程序。

一、在go-examples下創建一個文件hello.go

復制代碼 代碼如下:

//hello.go  
package main

import "fmt"http://實現格式化的I/O 
 
/*Printf someting*/ 
func main(){  
       fmt.Printf("Hello,GO!\n")  
}

我們來分析下這個程序:

1、程序中的第2行這個是必須的。所有的Go文件以package something>開頭,對于獨立運行的執行文件必須是package main;

2、第4行說需要將”fmt”包加入main。不是main的其他包都被稱為庫,其他許多編程語言有著類似的概念。

3、第1行和第4行中的//和/*---*/都是注釋

4、package main 必須首先出現,緊跟著是import。在Go中,package 總是首先出現,然后是import,然后是其他所有內容。當Go 程序在執行的時候,首先調用的函數是main.main(),這是從C 中繼承而來。這里定義了這個函數;

5、第8行調用了來自于fmt包的函數打印字符串到屏幕

二、編譯和運行代碼

編譯該源文件并執行生成的可執行文件

復制代碼 代碼如下:

[root@localhost go-examples]# go build hello.go  
[root@localhost go-examples]# ls  
hello hello.go  
[root@localhost go-examples]# ./hello  
Hello,GO! 

通過go build加上要編譯的Go源文件名,我們即可得到一個可執行文件,默認情況下這個文件的名字為源文件名字去掉.go后綴。當然我們也可以通過-o選項來指定其他名字:

復制代碼 代碼如下:

[root@localhost go-examples]# go build -o firstgo hello.go  
[root@localhost go-examples]# ls  
firstgo hello.go 

如果我們在go-examples目錄下直接執行go build命令,后面不帶文件名,我們將得到一個與目錄名同名的可執行文件:

復制代碼 代碼如下:

[root@localhost go-examples]# go build  
[root@localhost go-examples]# ls  
go-examples hello.go 

三、程序入口點(entry point)和包(package)

Go保持了與C家族語言一致的風格:即目標為可執行程序的Go源碼中務必要有一個名為main的函數,該函數即為可執行程序的入口點。除此之外 Go還增加了一個約束:作為入口點的main函數必須在名為main的package中。正如上面hellogo.go源文件中的那樣,在源碼第 一行就聲明了該文件所歸屬的package為main。

Go去除了頭文件的概念,而借鑒了很多主流語言都采用的package的源碼組織方式。package是個邏輯概念,與文件沒有一一對應的關系。 如果多個源文件都在開頭聲明自己屬于某個名為foo的包,那這些源文件中的代碼在邏輯上都歸屬于包foo(這些文件最好在同一個目錄下,至少目前 的Go版本還無法支持不同目錄下的源文件歸屬于同一個包)。

我們看到hellogo.go中import一個名為fmt的包,并利用該包內的Printf函數輸出"Hello, Go!"。直覺告訴我們fmt包似乎是一個標準庫中的包。沒錯,fmt包提供了格式化文本輸出以及讀取格式化輸入的相關函數,與C中的printf或 scanf等類似。我們通過import語句將fmt包導入我們的源文件后就可以使用該fmt包導出(export)的功能函數了(比如 Printf)。

在C中,我們通過static來標識局部函數還是全局函數。而在Go中,包中的函數是否可以被外部調用,要看該函數名的首母是否為大寫。這是一種 Go語言固化的約定:首母大寫的函數被認為是導出的函數,可以被包之外的代碼調用;而小寫字母開頭的函數則僅能在包內使用。在例子中你也看到了 fmt包的Printf函數其首母就是大寫的。

四、GOPATH

把上面的hellogo.go稍作改造,拆分成兩個文件:main.go和hello.go

復制代碼 代碼如下:

//hello.go  
package hello  
 
import "fmt" 
 
func Hello(who string){  
     fmt.Printf("Hello,%s!\n", who)  

復制代碼 代碼如下:

//main.go  
package main  
 
import "hello" 
 
func main(){  
     hello.Hello("GO")  
}

用go build編譯main.go 結果如下

復制代碼 代碼如下:

[root@localhost go-examples]# go build main.go  
main.go:4:8: import "hello": cannot find package 

編譯器居然提示無法找到hello這個package,而hello.go中明明定義了package hello了。這是怎么回事呢?原來go compiler搜索package的方式與我們常規理解的有不同,Go在這方面也有一套約定,這里面涉及到一個重要的環境變量:GOPATH。我們可以使用go help gopath來查看一下有關gopath的manual。

Go compiler的package搜索順序是這樣的,以搜索hello這個package為例:

* 首先,Go compiler會在GO安裝目錄(GOROOT,這里是/home/go/)下查找是否有src/pkg/hello相關包源碼;如果沒有則繼續;

* 如果export GOPATH=PATH1:PAHT2,則Go compiler會依次查找是否存在PATH1/src/hello、PATH2/src/hello;配置在GOPATH中的PATH1和PATH2被稱作workplace;

* 如果在上述幾個位置均無法找到hello這個package,則提示出錯。

在本例子中,我們尚未設置過GOPATH環境變量,也沒有建立類似PATH1/src/hello這樣的路徑,因此Go compiler顯然無法找到hello這個package了。我們來設置一下GOPATH變量并建立相關目錄:

復制代碼 代碼如下:

[root@localhost go-examples]# export GOPATH=/home/go-examples/  
[root@localhost go-examples]# mkdir src/hello -p  
[root@localhost go-examples]# mv hello.go src/hello/  
[root@localhost go-examples]# go build main.go  
[root@localhost go-examples]# ls  
main main.go src  
[root@localhost go-examples]# ./main  
Hello,GO! 

五、Go install

將main.go移到src/main中,這樣這個demo project顯得更加合理,所有源碼均在src下:

復制代碼 代碼如下:

[root@localhost go-examples]# cd src/  
[root@localhost src]# ls  
hello main.go 

Go提供了install命令,與build命令相比,install命令在編譯源碼后還會將可執行文件或庫文件安裝到約定的目錄下。我們以main目錄為例:
復制代碼 代碼如下:

[root@localhost src]# cd main/  
[root@localhost main]# go install 

install命令執行后,我們發現main目錄下沒有任何變化,原先build時產生的main可執行文件也不見了蹤影。別急,Go install也有一套自己的約定:

* go install(在src/DIR下)編譯出的可執行文件以其所在目錄名(DIR)命名

* go install將可執行文件安裝到與src同級別的bin目錄下,bin目錄由go install自動創建

* go install將可執行文件依賴的各種package編譯后,放在與src同級別的pkg目錄下

現在我們來看看bin目錄:

復制代碼 代碼如下:

[root@localhost go-examples]# ls  
bin pkg src  
[root@localhost go-examples]# ls bin/  
main 

的確出現一個bin目錄,并且剛剛編譯的程序main在bin下面。

hello.go編譯后并非可執行程序,在編譯main的同時,由于main依賴hello package,因此hello也被關聯編譯了。這與單獨在hello目錄下執行install的結果是一樣的,我們試試:

復制代碼 代碼如下:

[root@localhost src]# cd hello/  
[root@localhost hello]# go install  
[root@localhost hello]# ls /home/go-examples/  
bin pkg src 

在我們的workspace(go-examples目錄)下出現了一個pkg目錄,pkg目錄下是一個名為linux_386的子目錄,其下面有一個文 件:hello.a。這就是我們install的結果。hello.go被編譯為hello.a并安裝到pkg/linux_386目錄下了。

.a這個后綴名讓我們想起了靜態共享庫,但這里的.a卻是Go獨有的文件格式,與傳統的靜態共享庫并不兼容。但Go語言的設計者使用這個后綴名似乎是希望 這個.a文件也承擔起Go語言中"靜態共享庫"的角色。我們不妨來試試,看看這個hello.a是否可以被Go compiler當作"靜態共享庫"來對待。我們移除src中的hello目錄,然后在main目錄下執行go build:

復制代碼 代碼如下:

[root@localhost main]# go build  
main.go:4:8: import "hello": cannot find package 

Go編譯器提示無法找到hello這個包,可見目前版本的Go編譯器似乎不理pkg下的.a文件。http://code.google.com/p/go/issues/detail?id=2775 這個issue也印證了這一點,不過后續Go版本很可能會支持鏈接.a文件。畢竟我們在使用第三方package的時候,很可能無法得到其源碼,并且在每個項目中都保存一份第三方包的源碼也十分不利于項目源碼的后期維護。

您可能感興趣的文章:
  • Go語言中關閉帶緩沖區的頻道實例分析
  • Go語言中的指針運算實例分析
  • Go語言共享內存讀寫實例分析
  • Go語言中嵌入C語言的方法
  • Go語言實現的web爬蟲實例
  • Go語言中Select語句用法實例
  • Go語言接口用法實例
  • Go語言中的方法定義用法分析
  • Go語言調用其它程序并獲得程序輸出的方法

標簽:晉城 喀什 九江 本溪 運城 深圳 湘潭 楚雄

巨人網絡通訊聲明:本文標題《創建第一個Go語言程序Hello,Go!》,本文關鍵詞  創建,第一個,語言程序,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《創建第一個Go語言程序Hello,Go!》相關的同類信息!
  • 本頁收集關于創建第一個Go語言程序Hello,Go!的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产成人精品亚洲日本在线桃色| 国产欧美日韩精品a在线观看| 五月天久久比比资源色| 色屁屁一区二区| 欧美日韩国产系列| 成人综合婷婷国产精品久久蜜臀 | 加勒比av一区二区| 国产精品久久久一区麻豆最新章节| 在线免费av一区| 亚洲五月六月丁香激情| 7777精品伊人久久久大香线蕉超级流畅| 欧美一区二区三区小说| 国产精品一二三区在线| 国产在线精品视频| 久久aⅴ国产欧美74aaa| 91精品国模一区二区三区| 国内成人精品2018免费看| 粉嫩av亚洲一区二区图片| 久久66热偷产精品| 青青草视频一区| 国产人伦精品一区二区| 欧美浪妇xxxx高跟鞋交| 久久影院视频免费| 亚洲国产婷婷综合在线精品| 中文字幕中文乱码欧美一区二区 | 国产福利精品一区| 日韩午夜小视频| 在线日韩一区二区| 国产精品久久久一本精品| 亚洲欧美另类久久久精品| 久久久久99精品国产片| 99久久久久久99| 欧美大片一区二区| 精品久久久网站| 欧美一区二区日韩| 精品少妇一区二区三区日产乱码| 日韩免费电影一区| 一区二区在线电影| 亚洲成av人**亚洲成av**| 狠狠色狠狠色合久久伊人| 日本不卡一二三区黄网| 国产一区二区在线观看免费 | 日韩免费一区二区| 在线成人av影院| 国产丝袜美腿一区二区三区| 香蕉久久夜色精品国产使用方法 | 亚洲精品国产a久久久久久| 亚洲品质自拍视频| 欧美岛国在线观看| 精品日韩一区二区| 美女视频黄免费的久久| 久久精品欧美一区二区三区不卡 | 国产精品18久久久久久vr| 美女视频黄免费的久久 | 天堂av在线一区| 久久电影网电视剧免费观看| 精品国产乱码久久久久久浪潮| 欧美经典三级视频一区二区三区| 久久久久国产免费免费| 久久综合色8888| 久久免费电影网| 欧美色爱综合网| 欧美日韩国产美女| 精品久久久久香蕉网| 中文字幕二三区不卡| 亚洲精品视频在线观看网站| 午夜久久久久久久久| 色欧美日韩亚洲| 日韩欧美黄色影院| 国产精品久久久久久福利一牛影视| 亚洲国产综合视频在线观看| 免费在线观看成人| 久久免费视频一区| 一二三区精品福利视频| 五月婷婷综合激情| 懂色av中文字幕一区二区三区| 国产精品久久久久aaaa| 中文字幕 久热精品 视频在线| 无码av中文一区二区三区桃花岛| 精品欧美一区二区在线观看| 亚洲精品中文字幕乱码三区| 日韩av午夜在线观看| 国产亚洲va综合人人澡精品| 91视频.com| 男男gaygay亚洲| 欧美国产欧美综合| 成人av一区二区三区| 九色综合狠狠综合久久| 亚洲激情图片qvod| 国产精品一区二区三区99| 欧美一级一区二区| 亚洲私人黄色宅男| 7777精品伊人久久久大香线蕉 | 日本欧美一区二区| 91精品福利视频| 美女精品一区二区| 最新不卡av在线| 欧美不卡在线视频| 国产乱码字幕精品高清av| 中文字幕va一区二区三区| 欧美无砖专区一中文字| 国产高清视频一区| 亚洲国产精品成人综合色在线婷婷 | 亚洲一区二区3| 久久婷婷色综合| 色婷婷av一区二区三区软件| 视频一区二区国产| 亚洲欧美另类综合偷拍| 欧美国产精品一区二区| 久久国产尿小便嘘嘘尿| 亚洲第一在线综合网站| 99久久久精品| 亚洲图片一区二区| 欧美精品自拍偷拍动漫精品| 日韩中文字幕1| 国模一区二区三区白浆| 久久精品一区二区三区av| 欧美一区二区播放| 亚洲毛片av在线| 日韩欧美一区二区视频| 裸体一区二区三区| 亚洲欧美日韩中文字幕一区二区三区| 欧美视频日韩视频| 在线观看日韩高清av| 精品国产91久久久久久久妲己 | 日韩欧美黄色影院| 激情久久五月天| 亚洲午夜久久久久久久久电影网 | 欧美精品三级日韩久久| 污片在线观看一区二区| 国产精品网站在线观看| 欧美日韩一区二区不卡| 日本美女视频一区二区| 亚洲免费伊人电影| 91在线观看一区二区| 人人超碰91尤物精品国产| 2023国产一二三区日本精品2022| 亚洲大片一区二区三区| 欧美国产日韩a欧美在线观看| 7777精品伊人久久久大香线蕉完整版 | 成人网页在线观看| 狠狠网亚洲精品| 在线播放日韩导航| 国产盗摄女厕一区二区三区| 亚洲精选视频免费看| 欧美一区二区三区日韩视频| 亚洲精品一区二区三区精华液| 北岛玲一区二区三区四区| 久久久高清一区二区三区| 日韩欧美一级在线播放| 国产风韵犹存在线视精品| 久久丝袜美腿综合| 日韩视频永久免费| 欧美日韩第一区日日骚| 水蜜桃久久夜色精品一区的特点| 亚洲嫩草精品久久| 久久久影视传媒| 亚洲蜜臀av乱码久久精品| 亚洲一区免费观看| 激情另类小说区图片区视频区| 中文乱码免费一区二区| 国产精品资源站在线| 欧美日韩你懂的| 亚洲欧美视频在线观看视频| 日韩黄色免费电影| 日本韩国一区二区三区视频| 精品少妇一区二区三区| 国产精品国产自产拍高清av王其| 免费亚洲电影在线| 日本美女一区二区三区视频| 欧美午夜免费电影| 亚洲色图清纯唯美| 99国产精品久久| 18涩涩午夜精品.www| 欧美午夜精品免费| 日本亚洲电影天堂| 欧美色大人视频| 午夜私人影院久久久久| 欧美电影一区二区| 午夜精品影院在线观看| 欧美一区二区福利视频| 激情偷乱视频一区二区三区| 欧美成人a视频| 午夜激情久久久| 国产一区二区三区黄视频| 欧美日韩一区二区三区视频| 美女爽到高潮91| 国产精品不卡在线| 欧美电影免费观看高清完整版在线| 国产不卡免费视频| 奇米四色…亚洲| 自拍偷拍亚洲综合| 粉嫩av一区二区三区| 国产乱子轮精品视频| 亚洲欧洲成人精品av97| 精品人伦一区二区色婷婷| 一本一本大道香蕉久在线精品| 久久精品72免费观看| 亚洲午夜视频在线| 国产清纯白嫩初高生在线观看91|