0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

Go語言的開發(fā)者正著手準備開發(fā)2.0版本,程序員有太多話要說

DPVg_AI_era ? 來源:未知 ? 作者:李倩 ? 2018-08-31 09:04 ? 次閱讀

Go 2.0預計公布,在今天HackerNews引發(fā)眾多討論,眾多Bug即將填補,設計草案搶先預覽。

Go語言的開發(fā)者正著手準備開發(fā)2.0版本,并從以下三個方面發(fā)布了初步的設計方案(非官方正式版),以供社區(qū)開展討論:

泛型(generics)

錯誤處理(error handling)

錯誤值語義(error value semantics)

Go 2.0的總體目標是解決無法擴展到大型代碼庫以及無法滿足大型項目開發(fā)人員需求等問題。

泛型

改進目標

想必大多數(shù)用戶都對Go語言的泛型會表示無奈,很多網(wǎng)友甚至會說“根本就沒有泛型支持”。

Go 2.0的目標是通過允許帶有類型參數(shù)的參數(shù)多態(tài)(parametric polymorphism)來解決編寫Go庫的問題。

除了預期的容器類型之外,還希望能夠編寫有意義的庫來操作任意的map和channel值,并理想地編寫能夠同時操作[ ]byte和string值的多態(tài)函數(shù)。

Go的泛型必須明確記錄對類型參數(shù)的約束,作為調(diào)用者和實現(xiàn)之間明確的強制協(xié)議。當調(diào)用者不滿足這些約束或?qū)崿F(xiàn)超出限制時,編譯器需將錯誤清楚地報告出來。

Go中的多態(tài)性應該在編譯和運行時都可以實現(xiàn),這樣,有關實現(xiàn)策略的決策就可以留給編譯器來決定。這種靈活性將解決Go目前存在的一些難題。

草案設計

設計草案添加了一個新的語法,用于在類型或函數(shù)聲明中引入類型參數(shù)列表,例如:

1typeList(typeT)[]T23funcKeys(typeK,V)(mmap[K]V)[]K4

參數(shù)化聲明的使用,采用普通調(diào)用語法來提供類型參數(shù):

1varintsList(int)23keys:=Keys(int,string)(map[int]string{1:"one",2:"two"})

這些示例中的概括不需要T,K和V類型:任何類型都可以。 通常,實現(xiàn)可能需要約束可以使用的類型。例如,我們可能想要定義一個Set(T),以列表或映射的形式實現(xiàn),在這種情況下,類型T的值必須能夠進行相等的比較。為了表達這一點,設計草案引入了contract的概念。contract就像一個函數(shù)體,說明了類型必須支持的操作。例如,要聲明類型T的值必須是可比較的:

1contractEqual(tT){2t==t3}

錯誤處理

改進目標

Go 語言的錯誤處理是基于明確的目的而設計的。用戶應該從函數(shù)中返回所有可能的錯誤,并且檢查/處理這些返回值。和其他語言相比,這一點可能看起來有些繁瑣和不人性化。

Go 2希望錯誤檢查更加輕量級,減少用于錯誤檢查的Go程序文本的數(shù)量。

還希望使編寫錯誤處理變得更方便,從而提高程序員花時間處理錯誤的可能性。

且錯誤檢查和錯誤處理必須保持顯式,即在程序文本中可見。

草案設計

草案設計引入了兩種新的句法形式。

首先,它引入一個檢查表達式來檢查f(x, y, z)或檢查err,并標記一個顯式錯誤檢查。

其次,它引入了一個定義錯誤處理程序的handle語句。當錯誤檢查失敗時,它將控制轉(zhuǎn)移到最內(nèi)層處理程序,該處理程序?qū)⒖刂妻D(zhuǎn)移到它上面的下一個處理程序,以此類推,直到處理程序執(zhí)行返回語句為止。例如:

1funcCopyFile(src,dststring)error{ 2handleerr{ 3returnfmt.Errorf("copy%s%s:%v",src,dst,err) 4} 5 6r:=checkos.Open(src) 7deferr.Close() 8 9w:=checkos.Create(dst)10handleerr{11w.Close()12os.Remove(dst)//(onlyifacheckfails)13}1415checkio.Copy(w,r)16checkw.Close()17returnnil18}

在不返回錯誤的函數(shù)中允許check/handle組合。例如,一下是一個有用卻很簡單的程序功能:

1funcmain(){ 2hex,err:=ioutil.ReadAll(os.Stdin) 3iferr!=nil{ 4log.Fatal(err) 5} 6 7data,err:=parseHexdump(string(hex)) 8iferr!=nil{ 9log.Fatal(err)10}1112os.Stdout.Write(data)13}

這么寫會更簡單、清晰:

1funcmain(){2handleerr{3log.Fatal(err)4}56hex:=checkioutil.ReadAll(os.Stdin)7data:=checkparseHexdump(string(hex))8os.Stdout.Write(data)9}

錯誤值語義

改進目標

也許用戶對于Go的程序化的err有許多問題:這是一個RPCError嗎?這是net.OpError嗎?它適應net.Error的接口嗎?這是os.PathError嗎?

對于錯誤值,第一個問題,就是很難回答上述那些疑問。函數(shù)os.IsExist,os.IsNotExist,os.IsPermission和os.IsTimeout是主要問題。它們在通用性方面有兩個缺陷:每個函數(shù)僅測試一種特定類型的錯誤,第二,每個函數(shù)只能理解非常有限數(shù)量的包類型。

第二個問題看似沒什么,卻也很重要:深度嵌套錯誤(nested error)的報告太難以閱讀,并且沒有留給額外的細節(jié)空間,比如程序中的相關文件位置。

針對上述存在的兩個問題,Go 2首先希望能讓程序的錯誤檢查更容易,更不容易出錯,以提高實際程序的錯誤處理和魯棒性。其次,希望能夠以標準格式打印帶有附加細節(jié)的錯誤。

草案設計

這里有兩個主要問題:錯誤檢查和錯誤格式化,分別用兩個不同的方案解決。需要保持與現(xiàn)有代碼的互操作性,并允許包繼續(xù)定義自身的錯誤類型的約束,指向定義錯誤實現(xiàn)可以滿足的可選界面。

錯誤檢查(Error inspection)

對于錯誤檢查,設計草案遵循現(xiàn)有包(如github.com/pkg/errors)的規(guī)則,并為錯誤定義了一個可選接口,以返回錯誤包裝鏈中的下一個錯誤:

1packageerrors23typeWrapperinterface{4Unwrap()error5}

例如,上面假設的WriteError需要:

1func(e*WriteError)Unwrap()error{returne.Err}

利用這種方法,方案設計中添加了兩個新函數(shù)對錯誤打包:

1//Isreportswhethererroranyoftheerrorsinitschainisequaltotarget.2funcIs(err,targeterror)bool34//AscheckswhethererroranyoftheerrorsinitschainisavalueoftypeE.5//Ifso,itreturnsthediscoveredvalueoftypeE,withoksettotrue.6//Ifnot,itreturnsthezerovalueoftypeE,withoksettofalse.7funcAs(typeE)(errerror)(eE,okbool)8

錯誤格式(Error formatting)

對于錯誤格式,設計草案定義了根據(jù)錯誤來實現(xiàn)的可選接口:

1packageerrors23typeFormatterinterface{4Format(pPrinter)(nexterror)5}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 編譯器
    +關注

    關注

    1

    文章

    1617

    瀏覽量

    49019
  • go語言
    +關注

    關注

    1

    文章

    158

    瀏覽量

    9016

原文標題:Go 2.0發(fā)布在即,程序員有太多話要說

文章出處:【微信號:AI_era,微信公眾號:新智元】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    AI編程工具會不會搶程序員飯碗

    AI編程工具可輔助編程,減少手動編碼,提升效率,對程序員積極影響也有挑戰(zhàn)。程序員需深化技能、拓寬知識應對。長遠看,AI與人類程序員將共生共榮。
    的頭像 發(fā)表于 11-08 10:17 ?59次閱讀

    第五屆長沙·中國1024程序員節(jié)開幕

    場精彩活動將輪番上演。超200名海內(nèi)外技術人員圍繞人工智能、數(shù)據(jù)技術等前沿領域展開深入研討。 本屆1024程序員節(jié)中機器人與具身智能、大模型等主題引發(fā)熱烈討論;程序員、開發(fā)者如何利用生成式AI提升
    的頭像 發(fā)表于 10-25 15:42 ?141次閱讀

    華為原生鴻蒙之夜官宣1024程序員節(jié)彩蛋:與鴻蒙開發(fā)者共碼未來

    歷史性突破!會上,華為終端BG CEO何剛向所有鴻蒙開發(fā)者致以誠摯的敬意,同時官宣在10月24日程序員節(jié),華為將舉辦以“共碼未來,待到山花爛漫時”為主題的致敬鴻蒙開發(fā)者專屬活動,希望更多開發(fā)者
    的頭像 發(fā)表于 10-23 15:01 ?147次閱讀
    華為原生鴻蒙之夜官宣1024<b class='flag-5'>程序員</b>節(jié)彩蛋:與鴻蒙<b class='flag-5'>開發(fā)者</b>共碼未來

    阿里云發(fā)布首個AI程序員,引領應用開發(fā)進入“分鐘級”時代

    近日,在備受矚目的阿里云上海AI峰會上,阿里云向全球開發(fā)者們展示了其最新的技術成果——首個“AI程序員”。這款創(chuàng)新應用基于通義大模型構建,具備了令人驚嘆的多項技能,包括架構師、開發(fā)工程師、測試工程師等,為軟件
    的頭像 發(fā)表于 06-24 10:36 ?605次閱讀

    機智云開發(fā)者中心:讓移動APP應用開發(fā)更智能化

    智能化和高效。 ? 新版本開發(fā)者中心的介紹 機智云物聯(lián)網(wǎng)新版本開發(fā)者中心是一款專為開發(fā)者設計的一體化開發(fā)
    的頭像 發(fā)表于 03-26 16:45 ?306次閱讀
    機智云<b class='flag-5'>開發(fā)者</b>中心:讓移動APP應用<b class='flag-5'>開發(fā)</b>更智能化

    感覺我國的程序員前景一片灰暗,是這樣嗎?

    程序員也分為好幾等,在現(xiàn)在看來大部分的Android、Java、前端等等開發(fā)。已經(jīng)看不到希望了,很多人都在邊緣掙扎;剛看到一位Android開發(fā)者,過完年回公司就通知被裁;可見每年都會有很多互聯(lián)網(wǎng)
    發(fā)表于 02-20 20:52

    鴻蒙開發(fā)者預覽版如何?

    : 高清完整版,可在主頁或qr23.cn/AKFP8k保存。 鴻蒙的趨勢已經(jīng)來到,許多Android、Java、前端的程序員也都聽到風口。準備進入到鴻蒙的生態(tài)建設當中。所以2024是最好布局的時候,趁現(xiàn)在行業(yè)還沒內(nèi)卷。更多詳細的鴻蒙
    發(fā)表于 02-17 21:54

    鴻蒙系統(tǒng)優(yōu)缺點,能否作為開發(fā)者選擇

    星河版已經(jīng)是純血鴻蒙,但是它的發(fā)展一些周期。生態(tài)圈的建立難度大,各大廠商加入鴻蒙原生開發(fā)需要時間累積。 鴻蒙開發(fā)人才空缺,由于鴻蒙作為一款新型的系統(tǒng),程序員們都是從0學起。所以市面上很少有鴻蒙
    發(fā)表于 02-16 21:00

    您有一份OpenHarmony開發(fā)者論壇2023年度總結(jié),請查收~

    2023 年 11 月,OpenHarmony 開發(fā)者論壇 1.0 版本正式上線。 感謝各位開發(fā)者對 OpenHarmony 的大力支持和熱愛,成為 OpenHarmony 開發(fā)者論壇
    發(fā)表于 01-26 17:27

    1月18號“純鴻蒙”千帆啟航,程序員預備!

    。 如何正確看待鴻蒙? 我作為程序員來說,首先是看鴻蒙的發(fā)展、市場開發(fā)崗位、薪資以及前景。 這幾年對鴻蒙的發(fā)展情況來分析,從2019年開始鴻蒙的出來今天,華為鴻蒙取得了很大的成就。從“不兼容
    發(fā)表于 01-16 22:13

    “GPT 驅(qū)動的新程序員時代 ,我們該如何編程”分論壇圓滿舉辦

    的 AI 工具已經(jīng)將全球的知識庫和代碼庫變得觸手可及,只要有足夠的創(chuàng)造力和想象力,幾乎每個人都能成為“新程序員”。在這一背景下,軟件工程領域正在經(jīng)歷一場巨變,那么開發(fā)者如何適應這種變化? 12 月 17 日,2023 開放原子開發(fā)者
    的頭像 發(fā)表于 12-25 14:40 ?403次閱讀
    “GPT 驅(qū)動的新<b class='flag-5'>程序員</b>時代 ,我們該如何編程”分論壇圓滿舉辦

    開發(fā)者說】開發(fā)案例:使用canvas實現(xiàn)圖表系列之折線圖

    】,即可獲得投稿渠道。期待你們的分享~ 由于對HarmonyOS的興趣與開發(fā)需求,我已經(jīng)打卡學習ArkTS語言28天了。在模擬開發(fā)歷史項目的時候,會經(jīng)常需要使用到圖表這類樣式展示,我決定結(jié)合之前學習的canvas繪畫知識,自己寫
    的頭像 發(fā)表于 12-13 16:05 ?576次閱讀
    【<b class='flag-5'>開發(fā)者</b>說】<b class='flag-5'>開發(fā)</b>案例:使用canvas實現(xiàn)圖表系列之折線圖

    誠邀報名 | GPT驅(qū)動的新程序員時代,開發(fā)者如何編程?

    模式,開發(fā)者們迎來了編程范式的全新變革。傳統(tǒng)的編程不再局限于編寫線性代碼和優(yōu)化邏輯,自然語言取而代之,成為了編程的新工具,這大大降低了開發(fā)的門檻。 如今,以ChatGPT、Copilot等為代表的AI工具,將全球的知識庫和代碼庫
    的頭像 發(fā)表于 12-11 22:20 ?501次閱讀

    TUYA開發(fā)者大會(蘇州)盛大開幕,涂鴉智能攜手全球開發(fā)者共建IoT新生態(tài)

    精彩紛呈的商業(yè)洞見?!綯UYA開發(fā)者大會(蘇州)現(xiàn)場】涂鴉PaaS2.0如何助力開發(fā)者打造差異化產(chǎn)品,IoT長連接能力如何拓展戶外出行場景,智慧商業(yè)IoTsolut
    的頭像 發(fā)表于 12-08 15:49 ?827次閱讀
    TUYA<b class='flag-5'>開發(fā)者</b>大會(蘇州)盛大開幕,涂鴉智能攜手全球<b class='flag-5'>開發(fā)者</b>共建IoT新生態(tài)

    程序員表白程序

    電子發(fā)燒友網(wǎng)站提供《程序員表白程序.rar》資料免費下載
    發(fā)表于 11-21 10:41 ?16次下載
    <b class='flag-5'>程序員</b>表白<b class='flag-5'>程序</b>