大家好,我是萧楚河,公众号:golang面试经典讲解,感谢关注,一起学习一起成长。
2024年01月9日,Go官方宣布Go 1.21.6发布了,这个版本主要修复一些问题,包包括:the compiler, the runtime, and the crypto/tls, maps, and runtime/pprof packages。
因为FIPS法规要求自2024年1月1日起启用TLS 1.3,go在1.21.6中决定迁移到boringcrypto的代表IPS版本并启用TLS1.3 ,所以这个功能主要为了支持TLS 1.3。
Go的立场是,TLS 1.3的支持优先于此boringcrypto版本的认证。
package main
import (
"fmt"
"maps"
)
type Value struct {
Val int
padding [100]int
}
func main() {
const key = "key"
m := make(map[string]Value)
m[key] = Value{Val: 1}
c := maps.Clone(m)
v := m[key]
v.Val = 2
m[key] = v
fmt.Println(m[key].Val, c[key].Val)
}
期望输出什么?
2 1
实际运行后输出如下:
2 2
这个问题导致克隆后的变量也值也会改变。
主要问题就是内联泛型函数的位置不正确
package main
import (
"fmt"
"slices"
)
func main() {
fmt.Println("======= Using slices.Max() ======")
num := "765"
maxSymbol := ""
for i := 0; i < len(num); i++ {
fmt.Printf("num[%d]=%q\n", i, num[i])
fmt.Printf("maxSymbol=%q\n", maxSymbol)
newMax := slices.Max([]string{string(num[i]), maxSymbol})
fmt.Printf("max(num[i], maxSymbol)=%q where num[i]=%q, and maxSymbol=%q\n", newMax, num[i], maxSymbol)
maxSymbol = newMax
fmt.Printf("maxSymbol=%q\n", newMax)
}
fmt.Println("\n\n\n======= Using max builtin ======")
maxSymbol = ""
for i := 0; i < len(num); i++ {
fmt.Printf("num[%d]=%q\n", i, num[i])
fmt.Printf("maxSymbol=%q\n", maxSymbol)
newMax := max(string(num[i]), maxSymbol)
fmt.Printf("max(num[i], maxSymbol)=%q where num[i]=%q, and maxSymbol=%q\n", newMax, num[i], maxSymbol)
maxSymbol = newMax
fmt.Printf("maxSymbol=%q\n", newMax)
}
}
期望输出什么?
max()和slices.Max()应该具有同样的结果。7是最大的数.
实际输出结果是什么?
max()将低于7的数字输出为maxes