ホームページ  >  記事  >  バックエンド開発  >  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 のマップのような参照だと思います。これはどうなっているでしょうか? Javaでも動作するはずです。どこで私は間違えましたか?どうすれば機能させることができますか?実際のより大きな問題では、関数のエラー以外に何かを返す選択肢はありません。 ######解決######

append

関数は新しいスライスを返します。
  • map に値を保存しても、新しいマップは生成されません。
  • したがって、新しいタイルが表示されないのは当然ですが、マップのコンテンツが更新されたことがわかります。
  • どうすれば機能させることができますか?

古いスライスの代わりに新しいスライスを保存します。例:

リーリー

以上がgolangの更新スライス値がコンテナオブジェクトに反映されないの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。