2014年1月9号发布Go1.21.6并修复相关运行时以及maps克隆等问题

发布时间:2024年01月13日
大家好,我是萧楚河,公众号:golang面试经典讲解,感谢关注,一起学习一起成长。

一、前言

2024年01月9日,Go官方宣布Go 1.21.6发布了,这个版本主要修复一些问题,包包括:the compiler, the runtime, and the crypto/tls, maps, and runtime/pprof packages。

二、介绍

2.1 crypto/tls

因为FIPS法规要求自2024年1月1日起启用TLS 1.3,go在1.21.6中决定迁移到boringcrypto的代表IPS版本并启用TLS1.3 ,所以这个功能主要为了支持TLS 1.3。

Go的立场是,TLS 1.3的支持优先于此boringcrypto版本的认证。

2.2 maps.Clone 克隆问题

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

这个问题导致克隆后的变量也值也会改变。

2.3 runtime/pprof

主要问题就是内联泛型函数的位置不正确

2.4 cmd/compile:max/min内置与字符串(字节)转换一起使用时损坏


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

2.5 其他问题

  • 运行时:内存使用过多,介于1.21.0->1.21.1
文章来源:https://blog.csdn.net/zf766045962/article/details/135574974
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。