關於介面實現的一個小問題
type geometry interface {
area() float64
perim() float64
}
type rect struct {
width, height float64
}
type circle struct {
radius float64
}
func (r rect) area() float64 {
return r.width * r.height
}
func (r rect) perim() float64 {
return 2*r.width + 2*r.height
}
func (c *circle) area() float64 {
return math.Pi * c.radius * c.radius
}
func (c *circle) perim() float64 {
return 2 * math.Pi * c.radius
}
func measure(g geometry) {
fmt.Println(g)
fmt.Println(g.area())
fmt.Println(g.perim())
}
r := rect{3, 4}
c := circle{5}
measure(r)
measure(&c) //如果這樣寫 measure(c)就不行,也就是說c沒有實現相應的介面,報錯。必須 傳地址進去,意思是&c 實現了介面。
看下面程式碼:
var cc circle= circle{6}
var ccptr *circle= &cc
fmt.Println(cc.area())
fmt.Println(ccptr.area())
fmt.Println(cc)
既然編譯器可以聰明的在適當的時候進行取地址 和 指標解引用 ,為何在介面這裡就不行了呢?為什麼要區分這麼嚴格呢?
謝謝。
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- 關於 http cache 的一個小問題以及引發的思考HTTP
- 關於DrawerLayout的小問題
- 關於 /dev/null 差點直播吃鞋的一個小問題devNull
- 關於一個歸檔問題?
- 關於Integer面試的一個問題面試
- 關於CSS中的float可能出現的小問題CSS
- 一個關於JAVA GC的小實驗JavaGC
- Elasticsearch中關於transform的一個問題分析ElasticsearchORM
- Python關於使用subprocess.Popen時遇到的一個小問題記錄Python
- 關於 AppCrawler 執行過程中的幾個小問題APP
- 一個小問題
- 關於 django-ckeditor 前段使用的一個問題Django
- 關於一個最簡單的數獨解題實現與疑惑一
- JS:關於JS字面量及其容易忽略的12個小問題JS
- 關於IDEA使用xml實現動態sql的問題IdeaXMLSQL
- 最近積累的幾個關於 PHP 類與 MySQL 的小問題PHPMySql
- 一個關於ace-editor編輯器的問題
- 自己整理的關於windows圖形介面的問題Windows
- 求助!關於npm install 老是出現這個問題NPM
- 關於Redis的一些小問題Redis
- 發現 postman 自動生成介面呼叫程式碼的一個問題Postman
- 關於ImageView的幾個常見問題View
- 關於解決問題的幾個段位
- 關於dcat-admin的兩個問題...
- pl/sql developer的一個小問題SQLDeveloper
- 一個nvcc編譯的小問題編譯
- 一個關於JS解決陣列相乘問題JS陣列
- 記錄一個小問題
- 一個極限小問題
- 關於vue請求laravel介面跨域問題VueLaravel跨域
- 中小企業幾個關於seo的小常識問題,你是否知道?
- 關於 JavaScript 字串的一個小知識JavaScript字串
- 關於效能測試時線上介面訪問比例的整理的問題
- 請教各位一個關於websocket協議開發的問題Web協議
- 基於DotNetty實現一個介面自動釋出工具 - 通訊實現Netty
- 發現一個問題
- SpringBoot中關於Mybatis使用的三個問題Spring BootMyBatis
- 基於 Jepsen 來發現幾個 Raft 實現中的一致性問題(2)Raft
- 關於this指向的問題