golang評估報告是由Google于2007年9月21日開始開發(fā)_第1頁
golang評估報告是由Google于2007年9月21日開始開發(fā)_第2頁
golang評估報告是由Google于2007年9月21日開始開發(fā)_第3頁
golang評估報告是由Google于2007年9月21日開始開發(fā)_第4頁
golang評估報告是由Google于2007年9月21日開始開發(fā)_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

GoGo 年月日開始開發(fā), 年月日開放源碼,2012年賴管理功能。當前的編譯器實現(xiàn)使用傳統(tǒng)的“編譯-”模型來生成可執(zhí)行的二進制文件在今天,依賴管理已然成為了軟件開發(fā)中當重要的部分,但傳統(tǒng)的C語言以“頭文件”的方式組織源碼,這與清晰的依賴分析以及快速編譯背道而馳。C/C++的缺造成一些奇怪的細節(jié)性錯誤,以至于在CodingStandard中都為之專門加以強調。/N/比如:構造函數(shù)/析構函數(shù)/new/delete等。如果是動態(tài)庫,當include不同版本的頭Go的優(yōu)正如語言的設計者之一RobPike 決那些我們在編寫軟件時遇到的問題。”

每個包都可以定義一個或多個init函數(shù)2(funcinit()),initini了其他的包,則級連調用,所有包impot完成,所有init函數(shù)執(zhí)行完后,則開始main的執(zhí)行。//packagepvargInt…//packageaimport"p"…//packagebimport"p"…//packagemainimport()…在packagep中,我們定義了一個全局變量gnt,而p被packageab所iport,接著packagein又按序iprtab,即a在b前被ior。a先ipot了pgIt被初始化,這樣就解決了/Co值。例如,srng為””,指針為nl,nt為0等等,這樣就保證了變量在使用時,不會因為忘如說ync包的mutex類型,在引入零值后,就能以如下方式使用:2每個源文件也可包含多個init函數(shù)。多個init之間的調用順序不確定。init函數(shù)本身不能被其它變量或函數(shù)引varlockersync.Mutexdefer…CRITICAL_SECTIONlocker忘記任何一步操作,都將造成死鎖(deadlockstr示例ifstr示例OOP在Go中是通過組:“不適應變化”,“會繼承到不適用的功能”。所以在編碼實踐中一般建議優(yōu)先使用組合而非繼承。在Go中則更進一步,直接去掉了繼承,只支持組合。在定義truct組合的方式,也更好地實現(xiàn)了C++中的“實現(xiàn)”繼承,而在定義nerace時,也可以實現(xiàn)接typeAfunc(aA)oA()…}typeBfunc(bB)oB()…}typeC{B}c:= 此時c就擁有了oA、oB兩個方法,即我們很容易地實現(xiàn)了“實現(xiàn)繼承”3同時已經支持帶BOM的UTF-8享內存,而非通過共享內存來通信”的原則。為此,Go提供了一種名為“Go程”的抽象。由ofuncgoroutine(passchan{fmt.Println("o,i'minthegoroutine")pass<-true}funcmain()pass:=make(chanbool)gogoroutine(pass)}代碼中通過關鍵字chan來一個信道,在函數(shù)前加上關鍵字go來開啟一個的Go程。此Go執(zhí)行完成后,會自動銷毀。而在通信過程中,可通過-操作符向信道中除Go程外,Go語言的最大特色就是接口的設計,Go的接口與ava的接口,trct的說明它實現(xiàn)了哪一/幾個interace,而只要某個stuct定義了某個inteace所的所有方法,則它就隱式的實現(xiàn)了那個inteace,即所謂的Structua-y(關于Duck-y與trta-區(qū)別,請參考iuxa的關注釋)。在java等語言中,我們是先在大腦中從多個實現(xiàn)中抽象出一個interace,即:在定義hapep擁有r與owheice、qr、rneae接口再實現(xiàn)了“實現(xiàn)”。在實現(xiàn)“實現(xiàn)”的過程中,如果發(fā)現(xiàn)定義的接口不合適,因為“實現(xiàn)”顯publicinterface{publicfloatArea();publicvoidShow();}publicclassCircle:implements{publicfloatArea(){return…}publicvoidShow(){…}}同理Square和而在Go中,由于ineae是ircle、ae、ge。在實現(xiàn)這些“實現(xiàn)類”的過程中,由于知識的增加,我們可以更好地了解哪些方法應該放到inteae中,即在抽象的過程中完成了重構。typeCirclestructfunc(cCircle)Area()float32{}func(cCircle)Show(){}typeShapeinterface{Area()float32}對于一個模塊來說,只有模塊的使用者才能最清楚地知道,它需要使用由其它被使用模塊提供的哪些方法,即inteace應該由使用者定義。而被使用者在實現(xiàn)時,并不知itece是由使用方按需定義,而不用事前規(guī)劃。在Unix/Linux下為了編譯程序的方便,都可能需要編寫makeileindow也存在類似的工具,只不過被各種強大的D給隱藏在背后了)。而obe等人當初發(fā)o的動機之一是:“的大型的程序的編譯時間過長”。所以為了達到:“編譯Go程序時,作為程序員除開編寫代碼外,不需要編寫任何配置文件或類似額外的東西。”這個目標,引入了Go命令族。通過Go命令族,你可以很容易從實的poto上得源碼編執(zhí)代,試碼功這與/i:=0?varis:="oworld"?varsstring="o在C/C++中,大家為大括號的位置采用K&R還是ANSI,是使用tab還是whitespace,whitespace是2個字符還是4個字符等瑣碎的問題而爭論不休。每個公司內部都定義了自己的CodingStandard來強制約束。而隨著互聯(lián)網的蓬勃發(fā)展,開源項目的越發(fā)增多,這些小問題卻影響了大家的工作效率。而有一條編程準則是“l(fā)essismore”。為了一致性,Go提供了專門的格式化命令gofmt,用以統(tǒng)一大家的編碼風格。執(zhí)行一下gofmt命令,就可以將你的代碼統(tǒng)一成Go的標準風格。這樣你在接觸到陌生的 Go提供了測試工具gotest,你可以很方便地編寫出單元測試用例。比如這樣就完成package//funcAdd(a,bint){returna+}…//funcTestAdd(t*testing.T)//定義一個表格,以展示table-driven測試table:=[]struct{a,b,result{1,0,{1,2,{-1,-2,}for_,row:=rangetableifrow.result!=Add(row.a,{}}}編寫完成后執(zhí)行gotest最近幾年云計算發(fā)展得如火如荼,Go被稱為“21世紀的C語言”,當然它也不能忽視這一塊的需求?,F(xiàn)在有大量的云計算平臺支持o語言開發(fā),比如由的,第的AWS等。突出,所以在Go中指針取消了運算功能,只保留了“/解”功能。Go的劣勢 4可以歸納為:性能/生態(tài)/Bug/工具等。這里大家就明白了為啥Go用了那么大的虛擬內存(aena)并且知道為啥經常在內存不足的時候panic說申請到的內存不在范圍了(因為內存不在bitmap所能映射的范圍里,當然多個bitmap是可以解決這個問題的,不過目前還不支持);回到開始的那個問題,既然aena有個地址范圍,判斷一個uintptr是否可能是指針就是判斷是否在這個范圍里了。這樣的問題就來了。如果我有一個nt2,他的內容恰巧在那個范圍里,更碰巧的是如果把它當作指針,它恰巧指向一個大的數(shù)據(jù)結構,那么G只能認為那個數(shù)據(jù)結構還在使用中。這樣就造成了。這個問題在32位/4位平臺上都是存在的。但是在2位上問題更嚴重些,主要是32位表示的地址空間有768M是Aena,也就是說一個均勻分布的uintptr是指針的概率是768/4096,這個遠比64位系統(tǒng)的16Gi/(2^64)的概率大得多。Go1.1不出意外的話會使用記錄每個heap上分配的對象的類型的方式來幾乎完整因為今年3月28日Go才推出Go1,所以目前Go還存在不足。a、c、e這幾個缺陷在2013年初的Go1.1中會得到解決,而b、d則需要等時間的積累才能完善。Go的爭返回的error類型可以通過_復雜的錯誤,比我定義一個方法OpenJsonFile(namestring)(jFileJFile,errError這個方法可能引法的錯誤有兩種1.文件沒找到,2,文件解析:typeTstruct…}obj:=&T{}?obj=為了遍歷的方便,Go提供了orange語法,但是這種構造只能用于builtin類型,如lice、map和chan;而對于非builtin類型,即使包container中的相關數(shù)據(jù)結構也不行,這降低了oangeoange看起來還是很不容易的。目前Go只支持靜態(tài)(但gccgo支持動態(tài),Go1.1可能會支持部分動態(tài)鏈現(xiàn)代的大多數(shù)編程語言都提供了對泛型的支持,而在Go1支持。按團隊成員RussCox的說法,支持泛型要么降低編譯效率,要么降低程序員效率,要么降低運行效率。而這三個恰好與Go的快速、高效、易編寫的目標是相的。同時Go提供的inteceo頭,它的見性公共,在它包可以如果小寫母開,則其可見性為其所在的包。由于Go支持UF8,而對于像中文這種沒有大小寫分別的字UF那在量名應是致;支理是中名日符號.比如:var不可導出int0varE可導出int=0

高質量的第庫,比如OpenAL、OpenCL、OpenGL等。為了解決這個問題,Go引入一個叫做cgo令,通過遵守簡單的約定,就可以將一個C庫wrapper成一個Go包,這

本文內容多來自于以下三個《GoWeb GolangerWeb一個ltiokboej開的開源b框。如中有任何疑問,請加入 群 討論。 成。如果哪位愿意共同翻譯,請聯(lián)系OlingCat除特 3.0協(xié)議 BSD3-CLAUSECopyright(c)2012,LewGunandTheContributorsAllrights.Redistributionanduseinsourceandbinaryforms,withorwithoutmodification,arepermittedprovidedthatthefollowingconditionsaremet:Redistributionsofsourcecodemustretaintheabovecopyrightnotice,thislistofconditionsandthefollowingdier.Redistributionsinbinaryformmustreproducetheabovecopyrightnotice,thislistofconditionsandthefollowingdierintheationand/orothermaterialsprovidedwiththedistribution.NeitherthenameoftheLewGunnorthenamesofitscontributorsmaybeusedtoendorseorpromoteproductsderivedfromthissoftwarewithoutspecificpriorwrittenpermission.THISSOFTWAREISPROVIDEDBYTHECOPYRIGHTHOLDERSANDCONTRIBUTORS"ASIS"ANDANYEXPRESSORI

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論