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