>백엔드 개발 >Golang >Go 맵 값 내에서 구조체 필드를 수정하는 방법은 무엇입니까?

Go 맵 값 내에서 구조체 필드를 수정하는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-28 19:51:11928검색

How to Modify Struct Fields Within Go Map Values?

맵 값 처리

Go에서는 다음 예와 같이 맵 값 내에서 직접 구조체 필드를 수정하려고 시도하면 컴파일 오류가 발생합니다.

import (
    "fmt"
)

type pair struct {
    a float64
    b float64
}

func main() {
    // Create a map where values are of the "pair" type.
    dictionary := make(map[string]pair)

    // Add an element to the map.
    dictionary["xxoo"] = pair{5.0, 2.0}

    fmt.Println(dictionary["xxoo"]) // Output: {5 2}

    // Attempt to modify a field within the map value.
    dictionary["xxoo"].b = 5.0 // Error: cannot assign to dictionary["xxoo"].b
}

이 오류 메시지는 맵 값을 주소 지정할 수 없기 때문에 발생합니다. 주소 지정 가능성은 Go의 기본 개념으로, 변수의 메모리 주소를 찾는 기능을 나타냅니다. 주소를 지정할 수 없는 값의 구조체 필드에 액세스하려고 하면 컴파일 오류가 발생하므로 주소를 지정할 수 없는 값을 간접적으로 수정할 수 없습니다.

이 문제를 해결하려면 다음 두 가지 주요 접근 방식이 있습니다.

포인터 값 사용

한 가지 접근 방식은 포인터 값을 맵 값으로 사용하는 것입니다. 이러한 간접 참조는 값을 주소 지정 가능하게 만들어 필드 수정을 허용합니다. 예는 다음과 같습니다.

import (
    "fmt"
)

type pair struct {
    a float64
    b float64
}

func main() {
    // Create a map where values are pointers to "pair" structs.
    dictionary := make(map[string]*pair)

    // Add an element to the map.
    dictionary["xxoo"] = &pair{5.0, 2.0}

    fmt.Println(dictionary["xxoo"]) // Output: &{5 2}

    // Modify a field within the pointed-to struct.
    dictionary["xxoo"].b = 5.0

    fmt.Println(dictionary["xxoo"].b) // Output: 5
}

값 복사 또는 대체

또는 값을 복사하거나 완전히 대체하여 주소 지정이 불가능한 값으로 작업할 수 있습니다. 다음은 두 가지 예입니다.

// Value Copying
dictionary["xxoo"] = pair{5.0, 5.0}
// Value Replacement
p := dictionary["xxoo"]
p.b = 5.0
dictionary["xxoo"] = p

이 두 접근 방식 모두 지도 내에서 "쌍" 구조체를 수정할 수 있습니다.

위 내용은 Go 맵 값 내에서 구조체 필드를 수정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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