成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Go 1.21.0 新增標準庫 Slices 和 Mps 詳解

開發 前端
本文我們簡單介紹 Go 1.21.0 新增標準庫 slices? 和 maps?,標準庫提供了一些操作 slice? 和 map? 的函數,限于篇幅,分別介紹 slices? 的查找功能的函數,和 maps 的比較相同功能的函數。

01 、介紹

在 Go 語言項目開發中,我們經常會使用 slice 和 map 數據類型,因為 Go 1.18.0 開始支持泛型,所以 slice 的元素可能是任意類型,map 的 key 和 value 也可能是任意類型。

Go 1.21.0 新增操作 slice 和 map 數據類型的標準庫 slices 和 maps,提供了操作 slice 和 map 的泛型函數。

本文我們介紹標準庫 slices 和 maps 的使用方式。

02 、標準庫 slices

標準庫 slices 提供了許多操作任意類型元素 slice 的函數,可以方便我們實現業務需求。

建議感興趣的讀者朋友們閱讀手冊了解關于標準庫 slices[1] 的所有函數的功能。

限于篇幅,我們介紹關于查找的函數的使用方式。

查找功能的函數 BinarySearch 和 BinarySearchFunc。

函數 BinarySearch 示例代碼:

func main() {
 names := []string{"Alice", "Bob", "Vera"}
 n, found := slices.BinarySearch(names, "Vera")
 fmt.Println("Vera:", n, found)
 n, found = slices.BinarySearch(names, "Bill")
 fmt.Println("Bill:", n, found)
}

輸出結果:

Vera: 2 true
Bill: 1 false

閱讀上面這段代碼,我們定義一個字符串元素類型的切片 names,使用標準庫 slices 提供的二分查找函數 BinarySearch 查找 names 切片中的元素 Vera。

該函數返回被查找元素在切片中的索引位置或被查找元素在切片中應該出現的位置,和被查找元素是否真實存在于切片中的一個布爾值。

什么是被查找元素在切片中應該出現的位置?示例代碼中,查找 Bill,切片中沒有該元素,按照切片中遞增排序,Bill 應該在 Alice 后面,即索引為 1。

需要注意的是,使用函數 BinarySearch 查找元素的切片,切片中的元素必須是按照遞增順序排序。

函數 BinarySearchFunc 示例代碼:

func main() {
 type Person struct {
  Name string
  Age  int
 }
 people := []Person{
  {"Alice", 55},
  {"Bob", 24},
  {"Gopher", 13},
 }
 n, found := slices.BinarySearchFunc(people, Person{"Bob", 0}, func(a, b Person) int {
  return cmp.Compare(a.Name, b.Name)
 })
 fmt.Println("Bob:", n, found)
}

輸出結果:

Bob: 1 true

閱讀上面這段代碼,函數 BinarySearchFunc 與 函數 BinarySearch 的功能類似,區別是可以使用自定義比較函數。

03 、標準庫 maps

標準庫 maps 提供了許多操作任意類型 key 和 value 的 map 的函數,可以方便我們實現業務需求。

建議感興趣的讀者朋友們閱讀手冊了解關于標準庫 maps[2] 的所有函數的功能。

限于篇幅,我們介紹關于比較兩個 map 中的 key 和 value 是否相同的函數的使用方式。

函數 Equal 示例代碼:

func main() {
 m1 := map[string]int{"lucy": 17, "lily": 18}
 m2 := map[string]int{"lucy": 17, "lily": 18}
 m3 := map[string]int{"lucy": 18, "lily": 17}
 fmt.Println(maps.Equal(m1, m2))
 fmt.Println(maps.Equal(m1, m3))
}

輸出結果:

true
false

閱讀上面這段代碼,我們定義三個 map 類型的變量,其中 m1 和 m2 的 key 和 value 完全相同,而 m3 的 value 與 m1 和 m2 的 value 不同。

使用函數 Equal 比較,分別返回 true 和 false。

需要注意的是 map 的 key 和 value 必須都是可比較的類型。

函數 EqualFunc 和函數 Equal 的功能類似,區別是使用 eq 比較 value。key 仍然使用比較運算符 == 進行比較。

函數 EqualFunc 示例代碼:

func main() {
 m1 := map[int]string{
  1:    "one",
  10:   "Ten",
  1000: "THOUSAND",
 }
 m2 := map[int][]byte{
  1:    []byte("One"),
  10:   []byte("Ten"),
  1000: []byte("Thousand"),
 }
 eq := maps.EqualFunc(m1, m2, func(v1 string, v2 []byte) bool {
  return strings.ToLower(v1) == strings.ToLower(string(v2))
 })
 fmt.Println(eq)
}

輸出結果:

true

04、總結

本文我們簡單介紹 Go 1.21.0 新增標準庫 slices 和 maps,標準庫提供了一些操作 slice 和 map 的函數,限于篇幅,分別介紹 slices 的查找功能的函數,和 maps 的比較相同功能的函數。

建議讀者朋友們,閱讀文檔,了解標準庫提供的所有函數的功能和使用方式。

責任編輯:武曉燕 來源: Golang語言開發棧
相關推薦

2023-10-07 00:10:27

日志格式函數

2023-04-02 23:13:07

Go語言bufio

2023-11-03 14:02:04

Go切片泛型庫

2021-11-27 22:20:13

SlicesGo泛型

2021-08-09 10:36:20

GoSlices Maps

2023-05-05 08:51:18

Go語言泛型

2021-08-13 12:05:15

Goneturl

2024-09-29 16:04:14

2021-12-10 15:22:26

Go Zip 文件

2023-10-11 08:45:55

Go標準庫指標

2023-04-17 14:32:20

2021-10-18 10:53:26

Go 代碼技術

2024-06-13 09:10:22

2023-11-01 08:41:24

Go標準庫http

2023-12-26 07:37:27

2014-01-14 09:10:53

GoHTTP內存泄漏

2023-12-04 08:46:40

Go標準庫

2024-08-07 08:51:20

Go優化開發

2023-06-07 10:32:57

內置函數clear

2024-10-28 11:39:30

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: www.午夜 | 国产视频一区二区三区四区五区 | 国产在线不卡视频 | 日韩电影免费在线观看中文字幕 | 欧美日韩一区二区三区四区 | 欧洲色综合 | 亚洲一区二区三区视频 | 中文字幕免费中文 | 中文字幕日韩欧美 | 91精品国产综合久久久久久 | 国产精品日韩 | 国产精品视频在线观看 | 亚洲日产精品 | 成人av一区二区在线观看 | 国产欧美精品区一区二区三区 | 天天爱爱网 | 美女黄18岁以下禁止观看 | 伊人色综合久久天天五月婷 | 亚洲男人网 | 毛片免费观看 | 这里只有精品99re | 亚洲精品国产第一综合99久久 | 黄色毛片在线看 | 精品欧美色视频网站在线观看 | 久久精品视频播放 | 亚洲日日| 国产精品一区视频 | 欧美成人二区 | 美女黄网站 | 日韩欧美国产不卡 | 亚洲啪啪 | 久久亚洲精品久久国产一区二区 | 在线观看成人 | 日操操 | 91欧美精品成人综合在线观看 | 欧美午夜精品久久久久久浪潮 | 日韩免费视频一区二区 | 国产清纯白嫩初高生视频在线观看 | 美女艹b | 日韩久久精品 | 国产精品久久久久久久久 |