golang 包繼承

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

以我自己的項目為例,項目的目錄結構是這樣的:

1、我有兩個項目,一個項目做為基礎項目,裡面的方法大都具有通用性。

2、還有一個正在開發的項目,這個項目需要調用基礎項目裡的很多函數。

現在基礎項目裡有一個包含所有對資料庫進行操作的函數的檔案,名叫servicebase.go,包名:db

代碼如下:

packaeg db

typeServiceBasestruct{

    DBE *xorm.Engine
}

在正在開發的項目裡我建了一個baseservice.go(包名:base)這個檔案,這個檔案裡面的函數也都具有通用性,它作為一個基礎函數庫供我當前項目調用,就是說裡面的函數不是為了某一個模組設計的,而是在項目中很多模組都需要用到的函數。


現在我讓baseservice去繼承ServiceBase ,代碼如下:

package base

typeBaseServicestruct{

    ServiceBase
}

這樣一來,baseservice就繼承了ServiceBase 包裡面的函數,當你取得了指向BaseService的指標的時候,就可以通過指標調用ServiceBase和BaseService裡面的函數了。

這不是重點,重點是這個項目的其他模組的service也應該來繼承BaseService ,代碼如下:

package foodsafety

typeFoodSafetyServicestruct{

    BaseService
}那麼為什麼要這樣做呢?因為其他模組如果繼承了baseservice,就同時繼承了servicebase,指向foodsafetyservice這個結構體的指標就可以同時調用servicebase、baseservice和foodsafetyservice這三個模組裡的函數。注意:如果這三個檔案裡有同名的函數,用指向foodsafetyservice的指標調用這個同名函數的時候,系統會調用foodsafetyservice這個檔案裡的函數,這就和物件導向中的函數重寫一樣。


那又有人要問了,就算是這樣那又怎麼樣呢?
這樣做有以下幾個好處:
1、如果你的foodsafetyservice包含的是servicebase,那麼當你需要調用當前項目某個公用函數的時候,是不是需要取得指向baseservice的指標,然後再用這個指標去
調用公用函數。但是如果你的foodsafetyservice包含的是baseservice,這一步就可以省略了,這在一定程度上可以簡化程式的代碼。
2、項目的階層更加清楚。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.