>백엔드 개발 >Golang >golang 오류 해결: 구조체 외부에서 내보내지 않은 필드 'x' 사용

golang 오류 해결: 구조체 외부에서 내보내지 않은 필드 'x' 사용

PHPz
PHPz원래의
2023-08-26 08:03:291426검색

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

golang 오류 보고서 해결: 구조체 외부에서 내보내지 않은 'x' 필드 사용

golang 개발을 사용하는 과정에서 다양한 오류 보고서를 자주 접하게 됩니다. 일반적인 오류 중 하나는 "구조체 외부에서 내보내지 않은 필드 '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
}

위 예에서는 이름, 나이, x라는 세 가지 필드가 포함된 사람 구조를 정의했습니다. 이름과 나이 모두 내보낸 필드이므로 기본 기능에서 정상적으로 액세스할 수 있습니다. 그러나 x는 내보내지지 않은 필드이므로 액세스하려고 하면 컴파일러에서 오류가 발생합니다.

그렇다면 이 문제를 어떻게 해결해야 할까요?

두 가지 해결 방법이 있습니다. 첫 번째는 필드를 내보낸 필드로 변경하는 것이고, 두 번째는 공개 메서드를 제공하여 필드의 값에 액세스하는 것입니다.

방법 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 메서드를 정의했습니다. 이 메서드를 호출하면 내보내지 않은 필드에 직접 액세스하지 않고도 기본 함수의 x 필드 값에 액세스할 수 있습니다.

요약하자면, "golang 오류: 구조체 외부에서 내보내지 않은 필드 'x' 사용"이 발생하면 필드를 내보낸 필드로 변경하거나 우리의 지침에 따라 필드 값에 액세스할 수 있는 공개 메서드를 제공하도록 선택할 수 있습니다. 이 문제를 해결해야 합니다. 이러한 방식으로 구조의 필드에 액세스하고 코드에서 올바르게 사용할 수 있습니다.

위 내용은 golang 오류 해결: 구조체 외부에서 내보내지 않은 필드 'x' 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.