Go 語言 一些建議

2023-03-14 16:55 更新

原文鏈接:https://gopl-zh.github.io/ch7/ch7-15.html


7.15. 一些建議

當(dāng)設(shè)計一個新的包時,新手Go程序員總是先創(chuàng)建一套接口,然后再定義一些滿足它們的具體類型。這種方式的結(jié)果就是有很多的接口,它們中的每一個僅只有一個實現(xiàn)。不要再這么做了。這種接口是不必要的抽象;它們也有一個運行時損耗。你可以使用導(dǎo)出機制(§6.6)來限制一個類型的方法或一個結(jié)構(gòu)體的字段是否在包外可見。接口只有當(dāng)有兩個或兩個以上的具體類型必須以相同的方式進(jìn)行處理時才需要。

當(dāng)一個接口只被一個單一的具體類型實現(xiàn)時有一個例外,就是由于它的依賴,這個具體類型不能和這個接口存在在一個相同的包中。這種情況下,一個接口是解耦這兩個包的一個好方式。

因為在Go語言中只有當(dāng)兩個或更多的類型實現(xiàn)一個接口時才使用接口,它們必定會從任意特定的實現(xiàn)細(xì)節(jié)中抽象出來。結(jié)果就是有更少和更簡單方法的更小的接口(經(jīng)常和io.Writer或 fmt.Stringer一樣只有一個)。當(dāng)新的類型出現(xiàn)時,小的接口更容易滿足。對于接口設(shè)計的一個好的標(biāo)準(zhǔn)就是 ask only for what you need(只考慮你需要的東西)

我們完成了對方法和接口的學(xué)習(xí)過程。Go語言對面向?qū)ο箫L(fēng)格的編程支持良好,但這并不意味著你只能使用這一風(fēng)格。不是任何事物都需要被當(dāng)做一個對象;獨立的函數(shù)有它們自己的用處,未封裝的數(shù)據(jù)類型也是這樣。觀察一下,在本書前五章的例子中像input.Scan這樣的方法被調(diào)用不超過二十次,與之相反的是普遍調(diào)用的函數(shù)如fmt.Printf。



以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號