>  기사  >  백엔드 개발  >  golang 업데이트 슬라이스 값이 컨테이너 객체에 반영되지 않았습니다.

golang 업데이트 슬라이스 값이 컨테이너 객체에 반영되지 않았습니다.

PHPz
PHPz앞으로
2024-02-08 21:57:301068검색

golang 업데이트 슬라이스 값이 컨테이너 객체에 반영되지 않았습니다.

php 편집기 Baicao는 이 문서에서 Golang의 슬라이스 값 업데이트에 대한 문제에 대해 논의할 것입니다. 슬라이스의 값을 업데이트할 때 컨테이너 개체의 값이 그에 따라 업데이트되지 않는 이유입니다. 이러한 문제는 Golang을 사용하는 개발자들 사이에서 흔히 발생하는 문제이므로, 원인을 파악하고 해결책을 제시해 드리겠습니다. 초보자이건 숙련된 개발자이건 이 글을 읽으면 Golang의 슬라이싱 작업을 더 잘 이해할 수 있을 것입니다.

질문 내용

package main

import (
    "fmt"

)

func main() {
    root := map[string]interface{} {
        "disney": "world",  
    }
    fmt.Printf("main begin %v\n", root)
    addList(root)
    fmt.Printf("main after addList %v\n", root)
    addMap(root)
    fmt.Printf("main after addMap  %v\n", root)
}

func addList(root map[string]interface{}) {
    root["list"] = make([]interface{},0,3) 
    mylist := root["list"]
    mylist = append(mylist.([]interface{}),"mickeymouse")
    fmt.Printf("addList %v\n", mylist)
    fmt.Printf("addList %v\n", root)
}

func addMap(root map[string]interface{}) {
    root["map"] = make(map[string]interface{})
    mymap := root["map"]
    mymap.(map[string]interface{})["donald"] = "duck"
    fmt.Printf("addMap %v\n", mymap)
    fmt.Printf("addMap %v\n", root)
}

"disney" -> "world" 쌍을 포함하는 루트 맵이 있습니다. 해당 루트 맵에서 함수 addlist에 "mickeymouse"가 있는 슬라이스를 추가한 다음 함수 addmap에 "donald"->"duck" 쌍이 있는 맵을 추가했습니다. 그러나 슬라이스는 추가되지 않고 루트 맵에 맵이 추가됩니다. 서브매핑은 예상된 동작이지만 슬라이스 추가는 비정상적인 동작인 것 같습니다. 내 생각에 슬라이스는 golang의 지도처럼 참조라고 생각합니다. 어떻게 진행되고 있나요? 자바에서 작동해야합니다. 내가 어디서 잘못됐나요? 어떻게 작동하게 할 수 있나요? 실제 더 큰 문제에서는 함수의 오류 외에는 아무것도 반환할 수 있는 다른 옵션이 없습니다.

솔루션

  • append 이 함수는 새 슬라이스를 반환합니다.
  • map에 값을 저장해도 새 지도가 생성되지 않습니다.

그래서 새로운 타일이 보이지 않는 것은 당연하지만 지도의 콘텐츠가 업데이트되었음을 ​​알 수 있습니다.

어떻게 작동하게 할 수 있나요?

예: 이전 슬라이스 대신 새 슬라이스를 저장합니다. 으아악

위 내용은 golang 업데이트 슬라이스 값이 컨테이너 객체에 반영되지 않았습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제