偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Go 新關(guān)鍵字 Any,Interface 會(huì)成歷史嗎?

開發(fā) 后端
從使用層面來(lái)講,新的關(guān)鍵字 any 會(huì)比 interface{} 方便不少,畢竟少打了好多個(gè)詞,更快了,其實(shí)也是參照現(xiàn)有 rune 類型的做法。

[[438997]]

大家好,我是煎魚。

在看 Go1.18 泛型的代碼時(shí),不知道是否有留意到一個(gè)新的關(guān)鍵字 any。

例子如下:

  1. func Print[T any](s []T) {} 

之前沒有專門提過(guò),但有沒有小伙伴以為這個(gè)關(guān)鍵字,是泛型代碼專屬的?

其實(shí)不是...在這次新的 Go1.18 更新中,any 是作為一個(gè)新的關(guān)鍵字出現(xiàn),any 有一個(gè)真身,本質(zhì)上是 interface{} 的別名:

  1. type any interface{} 

也就是,在常規(guī)代碼中,也可以直接使用:

  1. func f(a any) { 
  2.  switch a.(type) { 
  3.  case int
  4.   fmt.Println("進(jìn)腦子煎魚了"
  5.  case float64: 
  6.   fmt.Println("煎魚進(jìn)腦子了"
  7.  case string: 
  8.   fmt.Println("腦子進(jìn)煎魚了"
  9.  } 
  10.  
  11. func main() { 
  12.  f(2) 
  13.  f(3.1415) 
  14.  f("煎魚好!"

從使用層面來(lái)講,新的關(guān)鍵字 any 會(huì)比 interface{} 方便不少,畢竟少打了好多個(gè)詞,更快了,其實(shí)也是參照現(xiàn)有 rune 類型的做法。

增加新關(guān)鍵字后的對(duì)比如下:

長(zhǎng)聲明 短聲明
func f[T interface{}](s []T) []T func f[T any](s []T) []T
func f(a interface{}) func f(a any)
var a interface{} var a any

我們?cè)诹私馑谋憷院?,再?gòu)拇a一致性和可讀性來(lái)講,是有些問(wèn)題的,會(huì)造成一定的疑惑。

因此前兩天有人提出了《all: rewrite interface{} to any》的需求,打算把內(nèi)部所有的代碼都重寫一遍。

你可能會(huì)以為是人肉手工改?那肯定不是,Go 官方發(fā)起了 CL 進(jìn)行批量修改。

我們?cè)谌粘5墓こ讨?,也可以和他們一樣,直接借?Go 工具鏈來(lái)實(shí)現(xiàn)替換。

如下:

  1. gofmt -w -r 'interface{} -> any' ./... 

聽到這個(gè)消息時(shí),我的朋友咸魚就大驚了,在想 interface{} 會(huì)不會(huì)成為歷史,被新的關(guān)鍵字 any 完全替代?

顯然,答案是不會(huì)的。因?yàn)?Go1 有兼容性的保證,肯定不會(huì)在現(xiàn)階段刪除。不過(guò)后續(xù)會(huì)出現(xiàn)一個(gè)現(xiàn)象,就是我們的 Go 工程中,有人用 any,有人用 interface{},會(huì)在代碼可讀性上比較傷人。

 

不過(guò)我們也可以學(xué) Go 官方,在 linter 流程中借助 gofmt 工具來(lái)強(qiáng)行把所有 interface{} 都替換成 any 來(lái)實(shí)現(xiàn)代碼的一致性。

 

責(zé)任編輯:武曉燕 來(lái)源: 腦子進(jìn)煎魚了
相關(guān)推薦

2021-12-15 10:54:12

Gogofmt命令Go源代碼

2023-03-24 08:01:27

Go語(yǔ)言內(nèi)存

2009-09-17 09:30:00

Linq LET關(guān)鍵字

2022-01-04 16:35:42

C++Protected關(guān)鍵字

2009-09-02 09:24:03

C# this關(guān)鍵字

2012-03-01 12:50:03

Java

2009-08-21 14:58:56

C# this關(guān)鍵字

2013-01-30 10:12:14

Pythonyield

2018-04-20 15:56:09

Pythonglobal關(guān)鍵字

2022-02-17 08:31:38

C語(yǔ)言staic關(guān)鍵字

2022-06-29 08:05:25

Volatile關(guān)鍵字類型

2021-02-01 13:10:07

Staticc語(yǔ)言UNIX系統(tǒng)

2019-11-06 10:36:43

MavenoptionalJava

2009-08-13 13:04:29

C# lock關(guān)鍵字

2022-05-06 08:32:40

Pythonwith代碼

2025-01-09 10:30:40

2019-12-20 15:19:41

Synchroinze線程安全

2009-12-17 13:57:15

Ruby關(guān)鍵字

2009-08-06 17:52:23

C#增加that關(guān)鍵字

2009-08-13 17:44:34

C# using關(guān)鍵字
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)