当前位置: 首页 > news >正文

东莞证券官方网站郑州网站seo优化公司

东莞证券官方网站,郑州网站seo优化公司,下载登录微信,做平台外卖的网站需要什么资质语言行为变化 Go 1.20已经于今年2月份发布,Go 1.21也不远了,我们来先堵为快,看看Go 1.21版本里几个有趣的变化。 文末附送2道面试题。 panic(nil) func main() {defer func() {print(recover() nil)}()panic(nil) }大家先想一想这段代码…

语言行为变化

Go 1.20已经于今年2月份发布,Go 1.21也不远了,我们来先堵为快,看看Go 1.21版本里几个有趣的变化。

文末附送2道面试题。

panic(nil)

func main() {defer func() {print(recover() == nil)}()panic(nil)
}

大家先想一想这段代码会输出什么?是true还是false。

在Go 1.20版本及以前会输出true。

但是在Go 1.21版本开始会输出false。这是因为Go 1.21定义了一个新的类型*runtime.PanicNilError

panic(nil)后,recover()会返回一个类型为*runtime.PanicNilError,值为panic called with nil argument的变量,具体可以参考如下代码:

func main() {defer func() {r := recover()fmt.Printf("%T\n", r) // *runtime.PanicNilErrorfmt.Println(r) // panic called with nil argument}()panic(nil)
}

clear函数

Go 1.21会新增一个clear函数,用于清理map和slice里的元素。示例代码如下:

package mainimport "fmt"var x = 0.0
var nan = x / xfunc main() {s := []int{1, 2, 3}clear(s)fmt.Println(s) // [0 0 0]m := map[float64]int{0.1: 9}m[nan] = 5clear(m)fmt.Println(len(m)) // 0
}

官方源码说明如下:

// The clear built-in function clears maps and slices.

// For maps, clear deletes all entries, resulting in an empty map.

// For slices, clear sets all elements up to the length of the slice

// to the zero value of the respective element type. If the argument

// type is a type parameter, the type parameter’s type set must

// contain only map or slice types, and clear performs the operation

// implied by the type argument.

func clear[T ~[]Type | ~map[Type]Type1](t T “T ~[]Type | ~map[Type]Type1”)

对于map,调用clear函数,会直接把map里的元素清空,成为一个empty map。

对于slice,调用clear函数,会保持原slice的长度不变,把里面元素的值修改为slice元素类型的零值。

面试题

defer语义是Go开发人员经常使用到的,也是最容易理解错误的地方。

大家看看下面2道关于defer的程序会输出什么结果。

package mainimport "fmt"func f() {defer func() {defer func() { recover() }()defer recover()panic(2)}()panic(1)
}func main() {defer func() { fmt.Print(recover()) }()f()
}
  • A: 2
  • B: 1
  • C: nil
  • D: 抛panic异常
package mainimport "fmt"func main() {for i := 0; i < 3; i++ {defer func() { print(i) }()}for i := range [3]int{} {defer func() { print(i) }()}
}
  • A: 222333
  • B: 210333
  • C: 333333
  • D: 210210

想知道答案的发送消息121到公众号。

推荐阅读

  • Go 1.20来了,看看都有哪些变化

  • Go面试题系列,看看你会几题

  • Go常见错误和最佳实践系列

开源地址

文章和示例代码开源在GitHub: Go语言初级、中级和高级教程。

公众号:coding进阶。关注公众号可以获取最新Go面试题和技术栈。

个人网站:Jincheng’s Blog。

知乎:无忌。

福利

我为大家整理了一份后端开发学习资料礼包,包含编程语言入门到进阶知识(Go、C++、Python)、后端开发技术栈、面试题等。

关注公众号「coding进阶」,发送消息 backend 领取资料礼包,这份资料会不定期更新,加入我觉得有价值的资料。还可以发送消息「进群」,和同行一起交流学习,答疑解惑。

References

  • https://twitter.com/go100and1
  • https://twitter.com/go100and1/status/1623546829773361152
http://www.hkea.cn/news/761524/

相关文章:

  • 幼儿做爰网站seo工程师是什么职业
  • 申请空间 建立网站吗西安百度推广运营
  • 做花馍网站百度联盟
  • 沈阳建设企业网站google浏览器官网
  • 毕业论文 网站开发营销qq下载
  • 建网站要多长时间外贸网站优化
  • 苹果网站做的好的点电脑培训网上免费课程
  • 做网站开源互联网优化是什么意思
  • 模仿做网站b站上海热点新闻
  • phpcmsv9网站地图地推的60种方法
  • 湖南手机版建站系统哪个好百度网盘app怎么打开链接
  • asp网站开发的实训报告电商营销推广有哪些?
  • 交互设计流程外贸网站优化公司
  • 网络营销网站策划个人网站seo入门
  • 云南省网站备案要求全渠道营销的概念
  • 装修网站合作平台有哪些torrentkitty磁力猫
  • 大理网站开发长春seo结算
  • 西双版纳疫情最新情况seo营销的概念
  • 网站推广seo蜘蛛屯优化排名模板建网站价格
  • 怎样建设公司网站小程序b2b网站大全免费
  • 百度抓取不到网站百度识图搜索图片来源
  • 企业网站栏目规划的重要性网络营销的概述
  • 公司网站建设找谁做免费发布推广信息网站
  • 虚拟币网站开发seo百度关键字优化
  • 网站建设都 包括哪些淄博网站制作
  • 自己做装修网站南宁百度推广seo
  • 品牌建设浅谈seo网络营销外包
  • 昆山网站建设兼职千锋教育的官网
  • cm域名做网站盘古百晋广告营销是干嘛
  • 网站栏目策划企业网络营销方案