




已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
Go語言分享,Go簡介環(huán)境搭建HelloWorldWeb框架,1,Go簡介,Go(又稱Golang)是Google開發(fā)的一種靜態(tài)強類型、編譯型、并發(fā)型,并具有垃圾回收功能的編程語言。Go語言是2007年開發(fā)2009年發(fā)布的一款開源編程語言Go語言專門針對多處理器系統(tǒng)應用程序的編程進行了優(yōu)化,使用Go編譯的程序可以媲美C或C+代碼的速度,而且更加安全、支持并行進程。Go是一種跨平臺(MacOS、Windows、Linux等)靜態(tài)編譯型語言。擁有媲美C語言的強大性能,在普通計算機上能幾秒內(nèi)快速編譯一個大項目,開發(fā)效率跟動態(tài)語言相差無幾。很多開源項目都是使用Go語言開發(fā)的,其中包括Docker、Etcd、Codis、Consul和Kubernetes。,2,Go大神,Go語言的主要開發(fā)者有:肯.湯姆遜(KenThompson)、羅布.派克(RobPike)和羅伯特.格里澤默(RobertGriesemer)。這三個都是大神肯.湯姆遜(KenThompson):圖靈獎(計算器界的諾貝爾獎)得主,Uinx發(fā)明人(Linux基于Uinx內(nèi)核開發(fā)),B語言作者(C語言前身),還做飛行員,后來被谷歌挖走。羅布.派克(RobPike):Unix團隊和Plan9操作系統(tǒng)計劃的成員,與Ken老爺子共事多年,并共創(chuàng)出廣泛使用的UTF-8字符編碼。羅伯特.格里澤默(RobertGriesemer):曾協(xié)助制作Java的HotSpot編譯器,和Chrome瀏覽器的JavaScript引擎V8膜拜一下大神的容顏:Ken老爺子(左),RobPike(右),3,開發(fā)Go語言的初衷,根據(jù)Go語言開發(fā)者自述,近10多年,從單機時代的C語言到現(xiàn)在互聯(lián)網(wǎng)時代的Java,都沒有令人滿意的開發(fā)語言,而C+往往給人的感覺是,花了100%的經(jīng)歷,卻只有60%的開發(fā)效率,產(chǎn)出比太低,Java和C#的哲學又來源于C+。并且,隨著硬件的不斷升級,這些語言不能充分的利用硬件及CPU。Go的主要目標是,兼具Python等動態(tài)語言的開發(fā)速度和C/C+等編譯型語言的性能與安全性Go語言的所有設計者都說,設計Go語言是因為C+給他們帶來了挫敗感。在GoogleI/O2012的Go見面會上,RobPike是這樣說的:我們做了大量的C+開發(fā),厭煩了等待編譯完成,盡管這是玩笑,但在很大程度上來說也是事實。,4,Go語言特性,靜態(tài)編譯(編譯器將源代碼編譯成二進制(或字節(jié)碼)格式;在編譯代碼時,編譯器檢查錯誤、優(yōu)化性能并輸出可在不同平臺上運行的二進制文件,Go語言保證了既能到達靜態(tài)編譯語言的安全和性能,又達到了動態(tài)語言開發(fā)速度和易維護性,有人形容Go語言:Go=C+Python,說明Go語言既有C靜態(tài)語言程序的運行速度,又能達到Python動態(tài)語言的快速開發(fā))類型安全內(nèi)存安全(自動垃圾回收)編譯速度快(構建一個程序的時間只需要數(shù)百毫秒)函數(shù)可以返回多個值反射網(wǎng)絡編程、系統(tǒng)編程、并發(fā)編程、分布式編程。部署簡單、并發(fā)性好、語言設計良好、執(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項目編譯成二進制文件,執(zhí)行二進制文件啟動項目如:./web-demo#godepsave此時會生成Godeps文件夾,同時將引用的包放入vendor文件夾中。Godeps.json就相當于java的maven里pom.xml。如果GOPATH路徑下沒有依賴包會報找不到包,需要手動下載,如:#,8,HelloWorld,packagemain/聲明本文件的package名importfmt/import語言的fmt庫-用于輸出funcmain()fmt.Println(Hello,World!)/gorunhelloworld.go實際是編譯成二進制文件再執(zhí)行/gobuildhelloworld.go/./helloworld/*第一行代碼packagemain定義了包名。你必須在源文件中非注釋的第一行指明這個文件屬于哪個包,如:packagemain。packagemain表示一個可獨立執(zhí)行的程序,每個Go應用程序都包含一個名為main的包。下一行importfmt告訴Go編譯器這個程序需要使用fmt包(的函數(shù),或其他元素),fmt包實現(xiàn)了格式化IO(輸入/輸出)的函數(shù)。下一行funcmain()是程序開始執(zhí)行的函數(shù)。main函數(shù)是每一個可執(zhí)行程序所必須包含的,一般來說都是在啟動后第一個執(zhí)行的函數(shù)(如果有init()函數(shù)則會先執(zhí)行該函數(shù))。*/,9,變量常量,packagemainimportfmtfuncmain()/聲明初始化一個變量varxint=100varstrstring=helloworld/聲明初始化多個變量vari,j,kint=1,2,3/不用指明類型,通過初始化值來推導varb=true/bool型constLENGTHint=10/常理fmt.Println(x,str,i,j,k,b,LENGTH)abc()funcabc()varv21int32/被定義初始化為0varv22int=2varv23=3/被自動識別為int類型v24:=4/簡易聲明v21=int32(v23)/強制轉換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/通常的用法(注意分號后有e)ifv,e=multi_return(four);e/正常返回else/出錯返回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,結構體,13,結構體方法,packagemainimportfmttyperectstructwidth,heightintfunc(r*rect)area()int/求面積returnr.width*r.heightfunc(r*rect)perimeter()int/求周長return2*(r.width+r.height)/注意:Go語言中沒有public,protected,private的關鍵字,所以,如果你想讓一個方法可以被別的包訪問的話,/你需要把這個方法的第一個字母大寫。這是一種約定。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/計算面積perimeter()float64/計算周長/-長方形-/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/通過指針實現(xiàn)for_,sh:=rangesfmt.Println(sh)fmt.Println(sh.area()fmt.Println(sh.perimeter(),15,httpserver(監(jiān)聽一個端口如此簡單),packagemainimport(net/httpfmtlog)funcmain()/http請求處理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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 應屆生校招:國企計算機崗位面試題目及答案
- 銀行招考模擬面試題目及答案
- 銀行評審面試題目及答案
- 醫(yī)院護工面試題目及答案
- 一級消防考試題庫及答案
- 延安公務員筆試題庫及答案
- 抖音非遺文化合作推廣項目協(xié)議
- 金屬合金熔點測定儀長期租賃及維護服務合同
- 網(wǎng)約車公司個人信息保護及業(yè)務合規(guī)性服務協(xié)議
- 網(wǎng)絡文學作品翻譯權及工作室租賃合同范本
- 乳腺癌診治指南與規(guī)范(2025年版)解讀
- 2025年江蘇南通蘇北七市高三二模語文作文分析
- 電子商務平臺運營與管理規(guī)范
- 廣東省五年中考(2020-2024)化學真題試卷含答案
- 2024年行政執(zhí)法證考試必刷題庫及答案(共432題)
- 大氣污染治理的國內(nèi)外比較研究
- 2025年CFA特許金融分析師考試金融產(chǎn)品設計與模擬試題
- 市政道路工程施工組織設計方案
- 醫(yī)療護理與人文關懷課件
- 用地理知識介紹美國
- 2024-2025年高考生物一輪復習知識點講解專題3-2細胞呼吸含解析
評論
0/150
提交評論