91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Go語言與鴨子類型的關系是什么

發布時間:2021-10-14 16:44:39 來源:億速云 閱讀:271 作者:柒染 欄目:編程語言

這篇文章將為大家詳細講解有關Go語言與鴨子類型的關系是什么,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

Go語言與鴨子類型的關系

  先直接來看維基百科里的定義:

  If it looks like a duck, swims like a duck, and quacks like a duck, then it probably is a duck.

  翻譯過來就是:如果某個東西長得像鴨子,像鴨子一樣游泳,像鴨子一樣嘎嘎叫,那它就可以被看成是一只鴨子。

  DuckTyping,鴨子類型,是動態編程語言的一種對象推斷策略,它更關注對象能如何被使用,而不是對象的類型本身。Go語言作為一門靜態語言,它通過通過接口的方式完美支持鴨子類型。

  當調用此函數的時候,可以傳入任意類型,只要它實現了say_hello()函數就可以。如果沒有實現,運行過程中會出現錯誤。

  而在靜態語言如Java,C++中,必須要顯示地聲明實現了某個接口,之后,才能用在任何需要這個接口的地方。如果你在程序中調用hello_world函數,卻傳入了一個根本就沒有實現say_hello()的類型,那在編譯階段就不會通過。這也是靜態語言比動態語言更安全的原因。

  動態語言和靜態語言的差別在此就有所體現。靜態語言在編譯期間就能發現類型不匹配的錯誤,不像動態語言,必須要運行到那一行代碼才會報錯。插一句,這也是我不喜歡用python的一個原因。當然,靜態語言要求程序員在編碼階段就要按照規定來編寫程序,為每個變量規定數據類型,這在某種程度上,加大了工作量,也加長了代碼量。動態語言則沒有這些要求,可以讓人更專注在業務上,代碼也更短,寫起來更快,這一點,寫python的同學比較清楚。

  Go語言作為一門現代靜態語言,是有后發優勢的。它引入了動態語言的便利,同時又會進行靜態語言的類型檢查,寫起來是非常Happy的。Go采用了折中的做法:不要求類型顯示地聲明實現了某個接口,只要實現了相關的方法即可,編譯器就能檢測到。

  程序輸出:

  在main函數中,調用調用sayHello()函數時,傳入了golang,php對象,它們并沒有顯式地聲明實現了IGreeting類型,只是實現了接口所規定的sayHello()函數。實際上,編譯器在調用sayHello()函數時,會隱式地將golang,php對象轉換成IGreeting類型,這也是靜態語言的類型檢查功能。

順帶再提一下動態語言的特點:

  變量綁定的類型是不確定的,在運行期間才能確定函數和方法可以接收任何類型的參數,且調用時不檢查參數類型不需要實現接口

  總結一下,鴨子類型是一種動態語言的風格,在這種風格中,一個對象有效的語義,不是由繼承自特定的類或實現特定的接口,而是由它"當前方法和屬性的集合"決定。Go作為一種靜態語言,通過接口實現了鴨子類型,實際上是Go的編譯器在其中作了隱匿的轉換工作。

關于Go語言與鴨子類型的關系是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

渭源县| 南丹县| 西青区| 屏东县| 女性| 连南| 萍乡市| 阿勒泰市| 富平县| 饶平县| 邵武市| 昌宁县| 扬中市| 台湾省| 五寨县| 开江县| 沙田区| 交城县| 隆回县| 洪江市| 岳普湖县| 南皮县| 灯塔市| 贺州市| 固原市| 土默特左旗| 东海县| 黄浦区| 拜泉县| 乌海市| 安岳县| 嘉定区| 中阳县| 什邡市| 吉安县| 清水县| 鄂州市| 泸水县| 泰州市| 墨竹工卡县| 黄陵县|