Go 語(yǔ)言 一些建議

2023-03-14 16:55 更新

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


7.15. 一些建議

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

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

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

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



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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)