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 중국어 웹사이트의 기타 관련 기사를 참조하세요!