首頁  >  文章  >  後端開發  >  如何在 Go 結構體中封裝私有欄位和方法?

如何在 Go 結構體中封裝私有欄位和方法?

Susan Sarandon
Susan Sarandon原創
2024-11-17 08:32:03615瀏覽

How can I Encapsulate Private Fields and Methods in Go Structs?

封裝結構體的私有欄位和方法

在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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn