> 백엔드 개발 > Golang > Go에서 지도의 전체 복사본을 효율적으로 만드는 방법은 무엇입니까?

Go에서 지도의 전체 복사본을 효율적으로 만드는 방법은 무엇입니까?

DDD
풀어 주다: 2024-11-29 21:29:11
원래의
998명이 탐색했습니다.

How to Efficiently Create Deep Copies of Maps in Go?

Go에서 지도 사본 만들기: 내장 기능이 있나요?

Go의 지도는 다목적 데이터 구조이지만 복사본 생성을 위한 내장 기능이 부족하면 문제가 될 수 있습니다. 다행히도 여러 접근 방식이 이를 달성하는 데 도움이 될 수 있습니다.

encoding/gob 패키지 사용

일반적인 솔루션의 경우 인코딩/gob 패키지는 다음을 수행하는 강력한 방법을 제공합니다. 맵을 포함한 복잡한 데이터 구조의 딥 카피. 원본 맵을 인코딩한 후 새 변수로 디코딩하면 다른 메모리 위치를 참조하는 복사본을 만들 수 있습니다.

package main

import (
    "bytes"
    "encoding/gob"
    "fmt"
    "log"
)

func main() {
    ori := map[string]int{
        "key":  3,
        "clef": 5,
    }

    var mod bytes.Buffer
    enc := gob.NewEncoder(&mod)
    dec := gob.NewDecoder(&mod)

    fmt.Println("ori:", ori) // key:3 clef:5
    err := enc.Encode(ori)
    if err != nil {
        log.Fatal("encode error:", err)
    }

    var cpy map[string]int
    err = dec.Decode(&cpy)
    if err != nil {
        log.Fatal("decode error:", err)
    }

    fmt.Println("cpy:", cpy) // key:3 clef:5
    cpy["key"] = 2
    fmt.Println("cpy:", cpy) // key:2 clef:5
    fmt.Println("ori:", ori) // key:3 clef:5
}
로그인 후 복사

encoding/gob을 사용하면 중첩된 구조도 존중하는 깊은 복사본을 만들 수 있습니다. , 맵 조각 또는 조각을 포함하는 맵과 같습니다.

기타 고려 사항

동안 인코딩/gob은 일반적인 솔루션을 제공하지만 모든 경우에 적합하지 않을 수 있습니다. 지도가 비교적 단순한 경우 얕은 복사본을 만들기 위한 사용자 정의 함수 작성을 고려할 수 있습니다. 또한 지도 복사 기능을 제공하는 타사 라이브러리도 있습니다.

Go의 복사본은 항상 깊다는 점을 기억하세요. 즉, 원본에 대한 참조만 생성하는 얕은 복사본과 달리 Go의 복사본은 데이터의 새로운 인스턴스를 생성한다는 의미입니다. 이는 지도를 조작할 때 고려해야 할 중요한 차이점입니다.

위 내용은 Go에서 지도의 전체 복사본을 효율적으로 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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