> 백엔드 개발 > Golang > Go 구조체 내에서 지도를 올바르게 초기화하는 방법은 무엇입니까?

Go 구조체 내에서 지도를 올바르게 초기화하는 방법은 무엇입니까?

DDD
풀어 주다: 2024-12-09 22:12:28
원래의
901명이 탐색했습니다.

How to Properly Initialize Maps within Go Structs?

Go Structs 내에서 맵 초기화

구조체 내에서 맵을 초기화하는 것은 혼란스러운 작업일 수 있습니다. 이 문서에서는 이 문제를 해결하기 위한 다양한 접근 방식을 살펴봅니다.

문제: 런타임 오류

구조체 내에서 맵을 초기화하려고 할 때 다음 코드를 실행하면 런타임이 발생할 수 있습니다. 오류:

package main

type Vertex struct {
   label string
} 

type Graph struct {
  connections map[Vertex][]Vertex
} 

func main() {
  v1 := Vertex{"v1"}
  v2 := Vertex{"v2"}

  g := new(Graph)
  g.connections[v1] = append(g.coonections[v1], v2)
  g.connections[v2] = append(g.connections[v2], v1)
}
로그인 후 복사

이 오류는 해당 항목에 액세스하려고 할 때 연결 맵이 nil이기 때문에 발생합니다. 값.

해결책: 생성자

권장되는 한 가지 해결 방법은 아래와 같이 생성자 함수를 생성하는 것입니다.

func NewGraph() *Graph {
    var g Graph
    g.connections = make(map[Vertex][]Vertex)
    return &g
}
로그인 후 복사

이 함수는 초기화된 연결 맵이 있는 새로운 Graph 인스턴스.

해결책: add_connection 메서드

또 다른 옵션은 비어 있는 경우 맵을 초기화하는 add_connection 메서드를 구현하는 것입니다.

func (g *Graph) add_connection(v1, v2 Vertex) {
  if g.connections == nil {
    g.connections = make(map[Vertex][]Vertex)
  }
  g.connections[v1] = append(g.connections[v1], v2)
  g.connections[v2] = append(g.connections[v2], v1)
}
로그인 후 복사

이 메서드는 맵이 nil인지 확인하고 연결을 추가하기 전에 필요한 경우 초기화합니다. .

표준의 예 라이브러리

표준 라이브러리는 image/jpeg 패키지의 생성자를 사용하여 슬라이스로 구조체를 초기화하는 예를 제공합니다.

type Alpha struct {
    Pix []uint8
    Stride int
    Rect Rectangle
}

func NewAlpha(r Rectangle) *Alpha {
    w, h := r.Dx(), r.Dy()
    pix := make([]uint8, 1*w*h)
    return &Alpha{pix, 1 * w, r}
}
로그인 후 복사

전체적으로 초기화 방법의 선택은 다음과 같습니다. 특정 사용 사례에 대해. 생성자는 적절한 초기화를 보장하는 편리한 방법을 제공하는 반면, 메서드는 예외적인 경우를 처리하는 데 더 많은 유연성을 제공합니다.

위 내용은 Go 구조체 내에서 지도를 올바르게 초기화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿