ホームページ >バックエンド開発 >Golang >golang エラーの解決: 構造体の外部でエクスポートされていないフィールド 'x' が使用されています

golang エラーの解決: 構造体の外部でエクスポートされていないフィールド 'x' が使用されています

PHPz
PHPzオリジナル
2023-08-26 08:03:291423ブラウズ

解决golang报错:use of unexported field \'x\' outside of struct

golang エラーの解決策: struct の外でエクスポートされていないフィールド 'x' が使用されています

golang を使用して開発する過程で、さまざまなエラー レポートに遭遇することがよくあります。よくあるエラーの 1 つは、「構造体の外でエクスポートされていないフィールド 'x' が使用されています」です。このエラーは、構造体の外でエクスポートされていないフィールドを使用しようとしていることを意味します。

まず、golang のフィールド エクスポート ルールを理解する必要があります。 golang では、大文字のフィールドはエクスポートされ、外部パッケージからアクセスして使用できます。小文字のフィールドはエクスポートされず、現在のパッケージでのみアクセスして使用できます。

簡単な例を見てみましょう:

package main

import "fmt"

type person struct {
    name string
    age  int
}

func main() {
    p := person{"Alice", 20}
    fmt.Println(p.name) // 通过访问导出字段'name',没有问题
    fmt.Println(p.age) // 通过访问导出字段'age',也没有问题
    fmt.Println(p.x) // 报错:use of unexported field 'x' outside of struct
}

上の例では、name、age、x の 3 つのフィールドを含む person 構造を定義します。名前と年齢は両方ともエクスポートされたフィールドなので、main 関数で通常どおりアクセスできます。ただし、x はエクスポートされていないフィールドなので、それにアクセスしようとするとコンパイラがエラーを出します。

それでは、この問題をどのように解決すればよいでしょうか?

解決策は 2 つあります。1 つ目はフィールドをエクスポートされたフィールドに変更することで、2 つ目はパブリック メソッドを提供してフィールドの値にアクセスすることです。

方法 1: フィールドをエクスポートされたフィールドに変更する

package main

import "fmt"

type person struct {
    name string
    age  int
    X    int // 将字段名改为首字母大写
}

func main() {
    p := person{"Alice", 20, 100}
    fmt.Println(p.name)
    fmt.Println(p.age)
    fmt.Println(p.X) // 现在通过访问导出字段'X',没有问题
}

上の例では、x フィールドを X に変更して、エクスポートされたフィールドにしました。これで、main 関数で通常どおりアクセスできるようになりました。

方法 2: フィールドの値にアクセスするパブリック メソッドを提供する

package main

import "fmt"

type person struct {
    name string
    age  int
    x    int // 未导出字段,首字母小写
}

func (p person) GetX() int { // 提供一个公开的方法GetX来返回x字段的值
    return p.x
}

func main() {
    p := person{"Alice", 20, 100}
    fmt.Println(p.name)
    fmt.Println(p.age)
    fmt.Println(p.GetX()) // 通过调用GetX方法来访问x字段的值,没有问题
}

上の例では、x フィールドの値を返す GetX メソッドを定義しました。このメソッドを呼び出すことで、エクスポートされていないフィールドに直接アクセスせずに、main 関数の x フィールドの値にアクセスできます。

要約すると、「golang エラー: 構造体の外でエクスポートされていないフィールド 'x' が使用されています」が発生した場合、フィールドをエクスポートされたフィールドに変更するか、次に従ってフィールドにアクセスするためのパブリック メソッドを提供するかを選択できます。私たちのニーズ、この問題を解決するための価値。このようにして、構造体のフィールドにアクセスし、コード内で正しく使用できるようになります。

以上がgolang エラーの解決: 構造体の外部でエクスポートされていないフィールド 'x' が使用されていますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。