3 回答

TA貢獻(xiàn)1909條經(jīng)驗(yàn) 獲得超7個(gè)贊
以大寫(xiě)字母開(kāi)頭的類型被導(dǎo)出到其他包。以小寫(xiě)字母開(kāi)頭的只能在包裝內(nèi)使用。重要提示:可以導(dǎo)出接口而不導(dǎo)出實(shí)現(xiàn)它的結(jié)構(gòu)。
導(dǎo)出類型不是慣例。僅當(dāng)您允許它們?cè)诎馐褂脮r(shí)才導(dǎo)出它們。在您提供的示例中,不需要導(dǎo)出Server
類型,因?yàn)樗鼪](méi)有導(dǎo)出的字段或方法。
僅導(dǎo)出屬于與客戶的合同的一部分的類型。導(dǎo)出僅在內(nèi)部使用的類型是一個(gè)錯(cuò)誤,并且在文檔中令人困惑。
編輯:
關(guān)于Server
類型的一點(diǎn)說(shuō)明。它實(shí)現(xiàn)了http.Handler
接口(必須定義ServeHTTP(http.ResponseWriter, *http.Request)
),因此可以使其不導(dǎo)出并使用接口作為NewServer
函數(shù)的返回類型。

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊
類型可以是私有的。
然而,讓一個(gè)公共函數(shù)返回一個(gè)私有類型是行不通的。只要該類型僅在內(nèi)部使用包,我將其保密。
編輯:在您的示例中,服務(wù)器必須是公共的,因?yàn)樗晒埠瘮?shù)返回,因此在包外使用。函數(shù) NewServer 返回 *Server。
編輯新示例:
在新示例中,這是主包。反正也不能導(dǎo)入。

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超10個(gè)贊
這不是約定俗成的問(wèn)題,Go 實(shí)際上使用大小寫(xiě)來(lái)確定導(dǎo)出哪些內(nèi)容,即在導(dǎo)入包時(shí)可用。
例如,如果我有:
package a
const Exported = "hi"
const nonExported = "mom"
然后在不同的包中,您可以導(dǎo)入a.Exported但不能a.nonExported:
package main
import "PATH/a"
func main() {
println(a.Exported)
// this won't compile
// println(a.nonExported)
}
- 3 回答
- 0 關(guān)注
- 349 瀏覽
添加回答
舉報(bào)