亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Golang > 正文

創(chuàng)建第一個(gè)Go語言程序Hello,Go!

2020-04-01 19:25:18
字體:
供稿:網(wǎng)友
這篇文章主要介紹了創(chuàng)建第一個(gè)Go語言程序Hello,Go!本文詳細(xì)的給出項(xiàng)目創(chuàng)建、代碼編寫的過程,同時(shí)講解了GOPATH、Go install等內(nèi)容,需要的朋友可以參考下
 

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

一、在go-examples下創(chuàng)建一個(gè)文件hello.go

 

復(fù)制代碼代碼如下:

//hello.go   
package main

 

import "fmt"//實(shí)現(xiàn)格式化的I/O  
 
/*Printf someting*/  
func main(){   
       fmt.Printf("Hello,GO!/n")   
}

 

我們來分析下這個(gè)程序:

1、程序中的第2行這個(gè)是必須的。所有的Go文件以package <something>開頭,對(duì)于獨(dú)立運(yùn)行的執(zhí)行文件必須是package main;

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

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

4、package main 必須首先出現(xiàn),緊跟著是import。在Go中,package 總是首先出現(xiàn),然后是import,然后是其他所有內(nèi)容。當(dāng)Go 程序在執(zhí)行的時(shí)候,首先調(diào)用的函數(shù)是main.main(),這是從C 中繼承而來。這里定義了這個(gè)函數(shù);

5、第8行調(diào)用了來自于fmt包的函數(shù)打印字符串到屏幕

二、編譯和運(yùn)行代碼

編譯該源文件并執(zhí)行生成的可執(zhí)行文件

 

復(fù)制代碼代碼如下:

[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源文件名,我們即可得到一個(gè)可執(zhí)行文件,默認(rèn)情況下這個(gè)文件的名字為源文件名字去掉.go后綴。當(dāng)然我們也可以通過-o選項(xiàng)來指定其他名字:

 

復(fù)制代碼代碼如下:

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

 

如果我們?cè)趃o-examples目錄下直接執(zhí)行g(shù)o build命令,后面不帶文件名,我們將得到一個(gè)與目錄名同名的可執(zhí)行文件:

 

復(fù)制代碼代碼如下:

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

 

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

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

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

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

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

四、GOPATH

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

 

復(fù)制代碼代碼如下:

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

 

 

復(fù)制代碼代碼如下:

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

 

用go build編譯main.go 結(jié)果如下

 

復(fù)制代碼代碼如下:

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

 

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

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

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

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

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

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

 

復(fù)制代碼代碼如下:

[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中,這樣這個(gè)demo project顯得更加合理,所有源碼均在src下:

復(fù)制代碼代碼如下:

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

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

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

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

 

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

* go install將可執(zhí)行文件安裝到與src同級(jí)別的bin目錄下,bin目錄由go install自動(dòng)創(chuàng)建

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

現(xiàn)在我們來看看bin目錄:

 

復(fù)制代碼代碼如下:

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

 

的確出現(xiàn)一個(gè)bin目錄,并且剛剛編譯的程序main在bin下面。

hello.go編譯后并非可執(zhí)行程序,在編譯main的同時(shí),由于main依賴hello package,因此hello也被關(guān)聯(lián)編譯了。這與單獨(dú)在hello目錄下執(zhí)行install的結(jié)果是一樣的,我們?cè)囋嚕?/p>

 

復(fù)制代碼代碼如下:

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

 

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

.a這個(gè)后綴名讓我們想起了靜態(tài)共享庫,但這里的.a卻是Go獨(dú)有的文件格式,與傳統(tǒng)的靜態(tài)共享庫并不兼容。但Go語言的設(shè)計(jì)者使用這個(gè)后綴名似乎是希望 這個(gè).a文件也承擔(dān)起Go語言中"靜態(tài)共享庫"的角色。我們不妨來試試,看看這個(gè)hello.a是否可以被Go compiler當(dāng)作"靜態(tài)共享庫"來對(duì)待。我們移除src中的hello目錄,然后在main目錄下執(zhí)行g(shù)o build:

 

復(fù)制代碼代碼如下:

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

 

Go編譯器提示無法找到hello這個(gè)包,可見目前版本的Go編譯器似乎不理pkg下的.a文件。http://code.google.com/p/go/issues/detail?id=2775 這個(gè)issue也印證了這一點(diǎn),不過后續(xù)Go版本很可能會(huì)支持鏈接.a文件。畢竟我們?cè)谑褂玫谌絧ackage的時(shí)候,很可能無法得到其源碼,并且在每個(gè)項(xiàng)目中都保存一份第三方包的源碼也十分不利于項(xiàng)目源碼的后期維護(hù)。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
亚洲尤物视频网| 鲁鲁狠狠狠7777一区二区| 日韩欧美国产一区二区在线播放| 国产区日韩欧美| 久久狠狠一本精品综合网| 国产黄色高清在线| 人妻无码中文久久久久专区| 亚洲资源在线播放| 国产激情三区| 国内精品久久久久久久| 国产精品爽爽久久| av中文在线资源| 性欧美精品一区二区三区在线播放| 青青草免费观看完整版高清| 欧美日韩天堂| 久草免费资源| 久久精品99久久久| 亚洲av首页在线| 欧美色图色就是色| 久久96国产精品久久99软件| 91精彩在线视频| 精品视频在线你懂得| 精品国产网站| 国产成人精品av在线观| 久久久人成影片一区二区三区在哪下载| 国产精品爽爽久久久久久| 最新中文字幕久久| 99久久婷婷国产| 最近高清中文在线字幕在线观看1| 久久99精品视频一区97| 久久国产这里只有精品| 99re6在线视频精品免费| www.中文字幕.com| 人妖精品videosex性欧美| 欧美中日韩在线| 国产精品三级在线| 久久久久久久久久久97| caoporen国产精品| 奇米精品一区二区三区在线观看一| 中文字幕导航| 麻豆一区区三区四区产品精品蜜桃| 无夜福利视频观看| 欧美综合另类| 一本一道dvd在线观看免费视频| 男人女人黄一级| 久久综合网导航| 中文国语毛片高清视频| 精品写真视频在线观看| 春意影院午夜免费入口| 欧美性极品少妇| 西西44rtwww国产精品| 日日噜噜噜夜夜爽爽狠狠视频| 精品国精品国产| 亚洲精品一区二区三区四区五区| 97se亚洲国产综合在线| 麻豆国产精品视频| mm131国产精品| 国产精品电影一区二区| 在线观看毛片av| 99精品视频免费版的特色功能| 无码少妇一区二区三区芒果| 欧美在线免费一级片| 日韩乱码在线观看| av小说天堂网| 91偷拍一区二区三区精品| 精品免费视频一卡2卡三卡4卡不卡| 成人在线电影网| www.欧美色| 国产精品视频一区二区三区麻豆| 韩国av电影在线观看| 久久久久久久久久久97| 丁香资源影视免费观看| 欧美性猛交xxxx| 久久精品五月天| 国产欧美一区二区三区久久| 黄色av免费播放| 久久男人av资源站| 日本黄色动态图| 亚洲一区二区三区毛片| 99久久国产综合精品色伊| 奇米4444一区二区三区| 日韩国产在线一| 亚洲h动漫在线| 祥仔av免费一区二区三区四区| 二区三区偷拍浴室洗澡视频| 涩涩视频免费看| 思热99re视热频这里只精品| 色呦呦中文字幕| 秋霞视频一区二区| 国产区在线观看视频| 中国女人一级毛片| 搡老岳熟女国产熟妇| 97人人澡人人爽91综合色| 狠狠一区二区三区| 国内外激情在线| 日韩精品一区二区亚洲av性色| 91在线超碰| 韩日午夜在线资源一区二区| 国产精品一区二区av影院萌芽| 高清一区二区中文字幕| 熟女性饥渴一区二区三区| 久久久成人精品一区二区三区| 在线视频免费一区二区| 91麻豆精品久久毛片一级| 免费看欧美美女黄的网站| 久久伊人一区二区| 欧美性一级生活| 日日夜夜网站| 男女污污视频在线观看| 亚洲欧美卡通动漫| 国产精品毛片一区二区在线看舒淇| 一区二区三区四区国产| 久久影视中文粉嫩av| 国产一精品一aⅴ一免费| 亚洲欧美一区二区不卡| 黄色免费一级视频| 97av视频在线| 亚洲黄网站黄| 亚洲精品无码一区二区| 鲁啊鲁视频在线精品| 国产精品亚洲第五区在线| 色综合天天综合网天天狠天天| 亚洲欧美色图小说| a视频在线播放| 久久久综合精品| 国产肉体xxxx裸体784大胆| 紧缚奴在线一区二区三区| 国产99午夜精品一区二区三区| 午夜一级在线看亚洲| av在线免费播放| 国产成人免费av| 久久视频在线播放| 九九亚洲精品| 日本免费久久| 亲子乱一区二区三区电影| 美女高潮视频在线看| 欧美一区二区大胆人体摄影专业网站| 91av日本| 欧美一区二区三级| 欧美精品在线一区| 国产精品人人人人| 日韩高清中文字幕一区| 亚洲精品电影网| 亚洲成人av在线影院| 69精品小视频| 天堂中文在线视频| 国产v亚洲v天堂无码| 国产乱对白刺激视频不卡| 在线观看免费网站| 亚洲欧美日韩网站| 欧美精品中文字幕亚洲专区| 激情高潮到大叫狂喷水| 日韩av网站免费在线| 日韩精品综合一本久道在线视频| 国自产拍偷拍精品啪啪一区二区| 丰满圆润老女人hd| 国产毛片久久久久久| av高清在线免费观看| 日本动漫同人动漫在线观看| 有码一区二区三区| 国产小视频免费在线网址| 日韩亚洲国产欧美| 日韩二区三区四区| 中文字幕在线观看日| 99亚洲伊人久久精品影院| 激情婷婷综合网| 欧美日韩在线直播| 亚洲综合影院| 全黄性性激高免费视频| 99久久精品国产成人一区二区| 在线三级中文| 日本激情在线观看| 91成人国产综合久久精品| 中文字幕乱码在线人视频| 久久久久亚洲AV成人| 欧美14一18处毛片| 国产91精品黑色丝袜高跟鞋| 欧美精品一区在线发布| 免费成人深夜蜜桃视频| 激情无码人妻又粗又大| 欧美日韩国产成人在线观看| 在线中文字幕av| 三上悠亚在线观看视频| 一级黄色大毛片| 久久综合九色综合网站| 免费网站观看www在线观看| 欧美成人明星100排名| 欧美精品性视频| 久久丫精品忘忧草西安产品| 99久久人妻无码中文字幕系列| 91女厕偷拍女厕偷拍高清| 色一情一乱一伦| 国产精品久久久久毛片| av在线app| 日韩人妻精品中文字幕| 丁香花电影在线观看完整版| 久久久精品有限公司| 国产精品一区二区av交换| av免费网站在线| 久久99热只有频精品91密拍| 蜜桃狠狠狠狠狠狠狠狠狠| 99成人精品| 国产精品成人无码免费| 在线播放精品一区二区三区| 色阁综合伊人av| 欧美日一区二区三区在线观看国产免| 欧美大片欧美激情性色a∨久久| 国产精品综合不卡av| 亚洲h在线观看| 亚洲91视频| 成年人免费在线视频| 亚洲精品中文字幕有码专区| 无码人中文字幕| 亚洲一区二区三区四区五区中文| 嫩草影院视频| 91大神福利视频在线| 麻豆亚洲av熟女国产一区二| aa日韩免费精品视频一| 欧美日韩国产小视频| 人妻精品久久久久中文字幕| 男女午夜激情视频| 中文av在线播放| 国产成人综合一区二区三区| 一区二区三区四区五区精品视频| 久久激情视频| 夜夜嗨av一区二区三区免费区| 中文字幕国产综合| 中文字幕第一区第二区| 亚洲免费黄色网| 国产精品96久久久久久又黄又硬| 91成人在线观看喷潮教学| 久久久久国产视频| 不卡亚洲精品| 国内精品在线播放| 久久日文中文字幕乱码| 国产+高潮+白浆+无码| 国产美女91呻吟求| 中文视频一区视频二区视频三区| 在线a免费观看| 西西裸体人体做爰大胆久久久| 中文字幕这里只有精品| 欧美精品久久久久久久小说| 国产卡1卡2卡三卡在线| 最好看的中文字幕| 亚洲午夜免费电影| 香蕉精品999视频一区二区| 久久久久久欧美精品se一二三四| 苍井空张开腿实干12次| 欧美高清在线一区| 免费a级黄色片| 一区二区三区美女视频| 久久综合久中文字幕青草| 欧美电影免费观看| 欧美大胆的人体xxxx| 91在线第一页| 亚洲天天做日日做天天谢日日欢| 日韩精品亚洲一区| 粉嫩av懂色av蜜臀av分享| 美女裸体自慰在线观看| 日韩日本欧美亚洲| 超碰在线影院| 国模精品视频一区二区| 国产欧美一区二区精品秋霞影院| 日韩小视频在线观看| 国产主播欧美精品| 成人在线观看网站| 精品深夜福利视频| 视频二区在线观看| 少妇高潮爽到全身痉挛抽搐| 91日本在线观看| 欧美成人免费小视频| 国产日韩中文字幕| 亚洲精品欧美激情| 国产一区在线不卡| 欧美日韩精品亚洲精品| 色综合色狠狠天天综合色| 国产精品一卡二| 国产精品精品久久久| 国产 日韩 欧美 综合 一区| 黄色a级三级三级三级| aaaaa毛片| 亚洲精品免费播放| 久久久久免费精品| 不用播放器的免费av| 国产a视频精品免费观看| 天天操天天干天天| 91麻豆成人精品国产免费网站| 欧美一区二视频| 亚洲影视资源| 色综合久久中文| 国产成人精品一区二区在线| 成人免费看黄yyy456| 粉嫩的18在线观看极品精品| 国产精品乱人伦一区二区| 国产成人在线视频免费播放| 无码人妻精品中文字幕| 国内一区在线| 亚洲欧美在线专区| 久久国产综合视频| 国产乱淫av麻豆国产免费| 在线观看av中文| 人人干狠狠干| 美女免费观看一区二区三区| 手机av在线免费| 免费高潮视频95在线观看网站| 国产香蕉一区二区三区在线视频| 亚洲经典三级| 狠狠躁天天躁日日躁欧美| 一区二区亚洲精品| 国产成+人+综合+亚洲欧洲| 精品99在线视频| 亚洲天堂av网| 不卡av免费观看| 波多野结衣在线观看一区| 欧美捆绑视频| 成人乱色短篇合集| 黄色一级视频免费观看| 欧美丝袜丝nylons| 无码人妻丰满熟妇区毛片18| 老鸭窝亚洲一区二区三区| 最新超碰在线| 久久免费精彩视频| 天堂中文字幕一二区| 日本一区二区不卡在线| 视频一区二区免费| 老牛影视av一区二区在线观看| 国产人妖一区二区三区| 亚洲精品77777|