Golang 1.21在这里(第2部分)
#教程 #发展 #go

在这篇全面的帖子中,我将深入研究地图 cmp 包装的复杂性。我将阐明出色的功能,这些功能在开发GO应用程序时已智能合并,以增强您的日常体验。请继续关注宝贵的见解和实用技巧!

地图

    m := map[string]string{
        "name": "Pedro",
        "age":  "20",
    }

    m2 := map[string]string{
        "name": "Pedro",
        "age":  "20",
    }

    m3 := make(map[string]string)

    r := maps.Equal(m, m2)
    r2 := maps.EqualFunc(m, m2, func(s1, s2 string) bool {
        return m["name"] == m2["name"] && m["age"] == m2["age"]
    })

    fmt.Println("Equal: ", r)
    fmt.Println("Equal Func: ", r2)

    cloned := maps.Clone[map[string]string](m)
    maps.Copy[map[string]string](m3, m)

    fmt.Printf("Cloned: %+v: \n", cloned)
    fmt.Printf("Copied: %+v: \n", m3)

在提出的代码段中,我们可以观察到一些非常有用的地图功能。当使用复制时,它会生成所选地图的浅克隆,当使用 clone 时,它会生成地图的完整副本。当目的是在保留原始数据的完整性的同时复制地图变量时,这变得非常有利。

上一个代码的结果是:

Equal:  true
Equal Func:  true
Cloned: map[age:20 name:Pedro] 
Copied: map[age:20 name:Pedro] 

您也可以检查代码here

CMP

在文档中,它很简单,如:

软件包CMP提供与比较有序值有关的类型和功能。

至关重要的是,CMP专门使用ordered types constraints运行,为数学操作增加了一层便利性。

这是CMP软件包中可用的两个功能的代码

    var num, num2, num3 int64 = 1, 2, 1
    var str, str2, str3 = "ab", "abc", "ab"

    r := cmp.Compare[int64](num, num2)
    r2 := cmp.Compare[int64](num, num3)

    r3 := cmp.Less[string](str, str2)
    r4 := cmp.Less[string](str, str3)

    fmt.Println("Num is less than Num2: ", r <= 0)
    fmt.Println("Num is equal to Num3: ", r2 >= 0)
    fmt.Println("Num2 is greater than Num: ", r2 >= 0)
    fmt.Println("")
    fmt.Println("Str is less than Str2: ", r3)
    fmt.Println("Str is less than Str3 ", r4)

结果

Num is less than Num2:  true
Num is equal to Num3:  true
Num2 is greater than Num:  true

Str is less than Str2:  true
Str is less than Str3  false

使用 cmp.compare 它将返回-1,0,1,这意味着从文档中:

-1如果x小于y,
0如果x等于y,
+1如果x大于y。

使用 cmp.less 时,它会评估第一个值是小于还是等于第二值。该效用证明对应对算法挑战非常有益。

您可以检查代码here

这就是这篇文章的结论。在下一部分中,我们将在日志/口号和切片软件包上进行讨论。敬请期待!