已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Go語言分享,Go簡介環(huán)境搭建HelloWorldWeb框架,1,Go簡介,Go(又稱Golang)是Google開發(fā)的一種靜態(tài)強(qiáng)類型、編譯型、并發(fā)型,并具有垃圾回收功能的編程語言。Go語言是2007年開發(fā)2009年發(fā)布的一款開源編程語言Go語言專門針對(duì)多處理器系統(tǒng)應(yīng)用程序的編程進(jìn)行了優(yōu)化,使用Go編譯的程序可以媲美C或C+代碼的速度,而且更加安全、支持并行進(jìn)程。Go是一種跨平臺(tái)(MacOS、Windows、Linux等)靜態(tài)編譯型語言。擁有媲美C語言的強(qiáng)大性能,在普通計(jì)算機(jī)上能幾秒內(nèi)快速編譯一個(gè)大項(xiàng)目,開發(fā)效率跟動(dòng)態(tài)語言相差無幾。很多開源項(xiàng)目都是使用Go語言開發(fā)的,其中包括Docker、Etcd、Codis、Consul和Kubernetes。,2,Go大神,Go語言的主要開發(fā)者有:肯.湯姆遜(KenThompson)、羅布.派克(RobPike)和羅伯特.格里澤默(RobertGriesemer)。這三個(gè)都是大神肯.湯姆遜(KenThompson):圖靈獎(jiǎng)(計(jì)算器界的諾貝爾獎(jiǎng))得主,Uinx發(fā)明人(Linux基于Uinx內(nèi)核開發(fā)),B語言作者(C語言前身),還做飛行員,后來被谷歌挖走。羅布.派克(RobPike):Unix團(tuán)隊(duì)和Plan9操作系統(tǒng)計(jì)劃的成員,與Ken老爺子共事多年,并共創(chuàng)出廣泛使用的UTF-8字符編碼。羅伯特.格里澤默(RobertGriesemer):曾協(xié)助制作Java的HotSpot編譯器,和Chrome瀏覽器的JavaScript引擎V8膜拜一下大神的容顏:Ken老爺子(左),RobPike(右),3,開發(fā)Go語言的初衷,根據(jù)Go語言開發(fā)者自述,近10多年,從單機(jī)時(shí)代的C語言到現(xiàn)在互聯(lián)網(wǎng)時(shí)代的Java,都沒有令人滿意的開發(fā)語言,而C+往往給人的感覺是,花了100%的經(jīng)歷,卻只有60%的開發(fā)效率,產(chǎn)出比太低,Java和C#的哲學(xué)又來源于C+。并且,隨著硬件的不斷升級(jí),這些語言不能充分的利用硬件及CPU。Go的主要目標(biāo)是,兼具Python等動(dòng)態(tài)語言的開發(fā)速度和C/C+等編譯型語言的性能與安全性Go語言的所有設(shè)計(jì)者都說,設(shè)計(jì)Go語言是因?yàn)镃+給他們帶來了挫敗感。在GoogleI/O2012的Go見面會(huì)上,RobPike是這樣說的:我們做了大量的C+開發(fā),厭煩了等待編譯完成,盡管這是玩笑,但在很大程度上來說也是事實(shí)。,4,Go語言特性,靜態(tài)編譯(編譯器將源代碼編譯成二進(jìn)制(或字節(jié)碼)格式;在編譯代碼時(shí),編譯器檢查錯(cuò)誤、優(yōu)化性能并輸出可在不同平臺(tái)上運(yùn)行的二進(jìn)制文件,Go語言保證了既能到達(dá)靜態(tài)編譯語言的安全和性能,又達(dá)到了動(dòng)態(tài)語言開發(fā)速度和易維護(hù)性,有人形容Go語言:Go=C+Python,說明Go語言既有C靜態(tài)語言程序的運(yùn)行速度,又能達(dá)到Python動(dòng)態(tài)語言的快速開發(fā))類型安全內(nèi)存安全(自動(dòng)垃圾回收)編譯速度快(構(gòu)建一個(gè)程序的時(shí)間只需要數(shù)百毫秒)函數(shù)可以返回多個(gè)值反射網(wǎng)絡(luò)編程、系統(tǒng)編程、并發(fā)編程、分布式編程。部署簡單、并發(fā)性好、語言設(shè)計(jì)良好、執(zhí)行性能好。,5,Go環(huán)境搭建,官網(wǎng)下載地址:,6,Unix/Linux上安裝Go環(huán)境,#tar-zxvfxxx.tar.gz解壓#vim/.bashrc或(vim/etc/profile)#exportGOROOT=/Users/liang/software/go1.10.3#exportPATH=$GOROOT/bin:$PATH#exportGOPATH=/Users/liang/ideaWorkspace/go#source/.bashrc或(source/etc/profile)配置生效#goversion,7,Godep安裝(類似maven包管理),#,#godepgobuild項(xiàng)目編譯成二進(jìn)制文件,執(zhí)行二進(jìn)制文件啟動(dòng)項(xiàng)目如:./web-demo#godepsave此時(shí)會(huì)生成Godeps文件夾,同時(shí)將引用的包放入vendor文件夾中。Godeps.json就相當(dāng)于java的maven里pom.xml。如果GOPATH路徑下沒有依賴包會(huì)報(bào)找不到包,需要手動(dòng)下載,如:#,8,HelloWorld,packagemain/聲明本文件的package名importfmt/import語言的fmt庫-用于輸出funcmain()fmt.Println(Hello,World!)/gorunhelloworld.go實(shí)際是編譯成二進(jìn)制文件再執(zhí)行/gobuildhelloworld.go/./helloworld/*第一行代碼packagemain定義了包名。你必須在源文件中非注釋的第一行指明這個(gè)文件屬于哪個(gè)包,如:packagemain。packagemain表示一個(gè)可獨(dú)立執(zhí)行的程序,每個(gè)Go應(yīng)用程序都包含一個(gè)名為main的包。下一行importfmt告訴Go編譯器這個(gè)程序需要使用fmt包(的函數(shù),或其他元素),fmt包實(shí)現(xiàn)了格式化IO(輸入/輸出)的函數(shù)。下一行funcmain()是程序開始執(zhí)行的函數(shù)。main函數(shù)是每一個(gè)可執(zhí)行程序所必須包含的,一般來說都是在啟動(dòng)后第一個(gè)執(zhí)行的函數(shù)(如果有init()函數(shù)則會(huì)先執(zhí)行該函數(shù))。*/,9,變量常量,packagemainimportfmtfuncmain()/聲明初始化一個(gè)變量varxint=100varstrstring=helloworld/聲明初始化多個(gè)變量vari,j,kint=1,2,3/不用指明類型,通過初始化值來推導(dǎo)varb=true/bool型constLENGTHint=10/常理fmt.Println(x,str,i,j,k,b,LENGTH)abc()funcabc()varv21int32/被定義初始化為0varv22int=2varv23=3/被自動(dòng)識(shí)別為int類型v24:=4/簡易聲明v21=int32(v23)/強(qiáng)制轉(zhuǎn)換g,h:=123,hello/注意:下行這種不帶聲明格式的只能在函數(shù)體中出現(xiàn)fmt.Println(v21is,v21)/v21被賦新值fmt.Println(v22is,v22)fmt.Println(v23is,v23)fmt.Println(v24is,v24)fmt.Println(g,h),10,數(shù)組,packagemainimportfmtfuncmain()vara5intfmt.Println(arraya:,a)a1=10a3=30fmt.Println(assign:,a)fmt.Println(len:,len(a)b:=5int1,2,3,4,5fmt.Println(init:,b)varc23intfori:=0;i2;i+forj:=0;j3;j+cij=i+jfmt.Println(2d:,c),11,多返回值,packagemainimportfmtfuncmain()v,e:=multi_return(one)fmt.Println(v,e)/輸出1truev,e=multi_return(four)fmt.Println(v,e)/輸出0false/通常的用法(注意分號(hào)后有e)ifv,e=multi_return(four);e/正常返回else/出錯(cuò)返回funcmulti_return(keystring)(int,bool)m:=mapstringintone:1,two:2,three:3varerrboolvarvalintval,err=mkeyreturnval,err,12,packagemainimportfmttypePersonstructnamestringageintemailstringfuncmain()/初始化person:=PersonTom,30,tomfmt.Println(person)/輸出Tom30tomvarperson2=Personname:jan,age:24,email:janfmt.Println(person2)pPerson:=&personfmt.Println(pPerson)/輸出&Tom30tompPerson.age=40=Jerryfmt.Println(person)/輸出Jerry40tom,結(jié)構(gòu)體,13,結(jié)構(gòu)體方法,packagemainimportfmttyperectstructwidth,heightintfunc(r*rect)area()int/求面積returnr.width*r.heightfunc(r*rect)perimeter()int/求周長return2*(r.width+r.height)/注意:Go語言中沒有public,protected,private的關(guān)鍵字,所以,如果你想讓一個(gè)方法可以被別的包訪問的話,/你需要把這個(gè)方法的第一個(gè)字母大寫。這是一種約定。funcmain()r:=rectwidth:10,height:15fmt.Println(面積:,r.area()fmt.Println(周長:,r.perimeter()rp:=&rfmt.Println(面積:,rp.area()fmt.Println(周長:,rp.perimeter(),14,接口和多態(tài),packagemainimport(mathfmt)/-接口-/typeshapeinterfacearea()float64/計(jì)算面積perimeter()float64/計(jì)算周長/-長方形-/typerectsstructwidth,heightfloat64func(r*rects)area()float64/面積returnr.width*r.heightfunc(r*rects)perimeter()float64/周長return2*(r.width+r.height)/-圓形-/typecirclestructradiusfloat64func(c*circle)area()float64/面積returnmath.Pi*c.radius*c.radiusfunc(c*circle)perimeter()float64/周長return2*math.Pi*c.radius/-接口的使用-/funcmain()r:=rectswidth:2.9,height:4.8c:=circleradius:4.3s:=shape&r,&c/通過指針實(shí)現(xiàn)for_,sh:=rangesfmt.Println(sh)fmt.Println(sh.area()fmt.Println(sh.perimeter(),15,httpserver(監(jiān)聽一個(gè)端口如此簡單),packagemainimport(net/httpfmtlog)funcmain()/http請(qǐng)求處理http.HandleFunc(/test,test)fmt.Print(httpserverstart.)/綁定監(jiān)聽地址和端口log.Fatal(http.ListenAndServe(:8080,nil)functest(whttp.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 黑龍江省哈爾濱市六校聯(lián)考2024-2025學(xué)年高二上學(xué)期1月期末考試語文試題(含解析)
- 考研《教育史(040103)》考前強(qiáng)化練習(xí)試題庫(含答案)
- 2025年陜西省職教高考《職測(cè)》核心考點(diǎn)必刷必練試題庫(含答案)
- 2025年曲靖醫(yī)學(xué)高等??茖W(xué)校高職單招職業(yè)技能測(cè)試近5年常考版參考題庫含答案解析
- 金庸小說知識(shí)競賽考試題庫及答案(含各題型)
- 2025高考物理一輪復(fù)習(xí)第35講拆2.光學(xué).含答案
- 10kV配電站房工程施工中的資源配置與協(xié)調(diào)
- 會(huì)議服務(wù)外包合同
- 執(zhí)行項(xiàng)目經(jīng)理聘任合同協(xié)議書范本
- 精裝商鋪?zhàn)赓U合同年
- 小學(xué)六年級(jí)數(shù)學(xué)上冊(cè)《簡便計(jì)算》練習(xí)題(310題-附答案)
- 地理標(biāo)志培訓(xùn)課件
- 培訓(xùn)如何上好一堂課
- 高教版2023年中職教科書《語文》(基礎(chǔ)模塊)下冊(cè)教案全冊(cè)
- 人教版英語七年級(jí)上冊(cè)閱讀理解專項(xiàng)訓(xùn)練16篇(含答案)
- 畢業(yè)旅游活動(dòng)設(shè)計(jì)與實(shí)施方案
- 宜城安達(dá)特種水泥有限公司雙寨子礦區(qū)鋁土礦礦產(chǎn)資源開發(fā)利用與生態(tài)復(fù)綠方案
- 面向機(jī)器人柔順操作的力位精準(zhǔn)控制方法
- 七年級(jí)下冊(cè)英語單詞默寫表直接打印
- 瓦斯防治八招培訓(xùn)課件
- 《他汀長期治療》課件
評(píng)論
0/150
提交評(píng)論