<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                在Go 1.6之前, 內置的map類型是部分goroutine安全的,并發的讀沒有問題,并發的寫可能有問題。自go 1.6之后, 并發地讀寫map會報錯,這在一些知名的開源庫中都存在這個問題,所以go 1.9之前的解決方案是額外綁定一個鎖,封裝成一個新的struct或者單獨使用鎖都可以。 在Go1.9之前,go自帶的map不是并發安全的,也就是說,我們需要自己再封裝一層,給map加上把讀寫鎖,比如像下面這樣: ~~~ type MapWithLock struct { sync.RWMutex M map[string]Kline } ~~~ 用MapWithLock的讀寫鎖去控制map的并發安全。 但是到了Go1.9發布,它有了一個新的特性,那就是sync.map,它是原生支持并發安全的map,不過它的用法和以前我們熟悉的map完全不一樣,主要還是因為sync.map封裝了更為復雜的數據結構,以實現比之前加鎖map更優秀的性能。 使用 ~~~ var mySMap sync.Map ~~~ sync.map就是1.9版本帶的線程安全map,主要有如下幾種方法: ~~~ Load(key interface{}) (value interface{}, ok bool) 通過提供一個鍵key,查找對應的值value,如果不存在,則返回nil。ok的結果表示是否在map中找到值 ~~~ ~~~ Store(key, value interface{}) 這個相當于是寫map(更新或新增),第一個參數是key,第二個參數是value ~~~ ~~~ LoadOrStore(key, value interface{}) (actual interface{}, loaded bool) 通過提供一個鍵key,查找對應的值value,如果存在返回鍵的現有值,否則存儲并返回給定的值,如果是讀取則返回true,如果是存儲返回false ~~~ ~~~ Delete(key interface{}) 通過提供一個鍵key,刪除鍵對應的值 ~~~ ~~~ Range(f func(key, value interface{}) bool) 循環讀取map中的值。 因為for ... range map是內置的語言特性,所以沒有辦法使用for range遍歷sync.Map, 但是可以使用它的Range方法,通過回調的方式遍歷。 ~~~ 應用: ~~~ package main import ( "fmt" "sync" ) type userInfo struct { Name string Age int } var m sync.Map func main() { vv, ok := m.LoadOrStore("1", "one") fmt.Println(vv, ok) //one false vv, ok = m.Load("1") fmt.Println(vv, ok) //one true vv, ok = m.LoadOrStore("1", "oneone") fmt.Println(vv, ok) //one true vv, ok = m.Load("1") fmt.Println(vv, ok) //one true m.Store("1", "oneone") vv, ok = m.Load("1") fmt.Println(vv, ok) // oneone true m.Store("2", "two") m.Range(func(k, v interface{}) bool { fmt.Println(k, v) return true }) m.Delete("1") m.Range(func(k, v interface{}) bool { fmt.Println(k, v) return true }) map1 := make(map[string]userInfo) var user1 userInfo user1.Name = "ChamPly" user1.Age = 24 map1["user1"] = user1 var user2 userInfo user2.Name = "Tom" user2.Age = 18 m.Store("map_test", map1) mapValue, _ := m.Load("map_test") for k, v := range mapValue.(interface{}).(map[string]userInfo) { fmt.Println(k, v) fmt.Println("name:", v.Name) } } ~~~ ~~~ package main import ( "fmt" "sync" ) var myMap sync.Map func main() { // 增 myMap.Store("1", []string{"hi"}) //業務邏輯,其實兩個都是string類型 myMap.Store(1, 11111) // 查 if val, ok := myMap.Load("1"); ok { fmt.Println("查", val) } // 改 myMap.Store("1", 2222222) if val, ok := myMap.Load("1"); ok { fmt.Println("改", val) } // 查找 or 存在返回,存在添加 if v, ok := myMap.LoadOrStore("22", "33333333"); ok { fmt.Println("LoadOrStore", v) } // 刪除 myMap.Delete("1") // 遍歷 f := func(key, value interface{}) bool { fmt.Println("遍歷", key, value) return true } myMap.Range(f) } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看