封裝結構體的私有欄位和方法
在Go 中,了解結構體中欄位和方法的可見性概念至關重要。預設情況下,以大寫字母開頭的欄位和方法被視為導出的,並且可以由任何外部程式碼或匯入聲明該結構的套件的套件存取。
考慮以下程式碼:
package mypackage type mytype struct { Size string Hash uint32 } func (r *mytype) doPrivate() string { return r.Size } func (r *mytype) Do() string { return doPrivate("dsdsd") }
在這個例子中,Size 和 Hash 字段,以及 doPrivate 方法,由於其首字母大寫,都被導出。這意味著 mypackage 套件外部的任何程式碼都可以存取這些成員。
但是,為了封裝 doPrivate 方法並防止外部訪問,我們可以利用 Go 的套件可見性規則。透過將 mytype 結構及其 doPrivate 方法放在單獨的套件中,我們可以使它們只能被該套件中的類型存取。
以下是我們實現此目的的方法:
// mytype.go package mytype type Type struct { Size string Hash uint32 } func (r *Type) doPrivate() string { return r.Size }
// mypackage.go package mypackage import "./mytype" func (r *mytype.Type) Do() string { return r.doPrivate() }
透過將結構體及其私有方法分離到一個單獨的包中,我們確保只有mytype 包中的類型可以存取doPrivate 方法。其他套件,包括 mypackage,仍然可以使用 Do 方法來存取 Type 結構體的公共成員,但它們不能直接存取 doPrivate 方法。
以上是如何在 Go 結構體中封裝私有欄位和方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!