国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

答應(yīng)我,這次一定徹底搞懂 Go 中的類型別名

開發(fā) 后端
在 Go 語言中,字面量是無類型(untyped)的。無類型是什么意思?無類型意味著可以賦值給類似類型的變量或常量。用上面例子,32.0 是無類型的浮點(diǎn)數(shù)字面量,因此它可以賦值給任意數(shù)字相關(guān)類型變量(或常量)。

[[391741]]

大家好,我是站長(zhǎng) polarisxu。

有下面 3 行代碼:

  1. // 32 位機(jī)器 
  2. 1)var x int32 = 32.0 
  3. 2)var y int = x 
  4. 3)var z rune = x 

它們是否能編譯通過?為什么?

如果面試時(shí)問這道題,你需要想想面試官想考察你什么。在往下看之前,建議你記下自己的答案。

01 數(shù)字字面量

在 Go 語言中,字面量是無類型(untyped)的。無類型是什么意思?無類型意味著可以賦值給類似類型的變量或常量。用上面例子,32.0 是無類型的浮點(diǎn)數(shù)字面量,因此它可以賦值給任意數(shù)字相關(guān)類型變量(或常量)。以下都是合法的:

  1. var a int64 = 32.0 
  2. var b int = 32.0 
  3. var c float32 = 32.0 
  4. var d complex64 = 32.0 
  5. var e byte = 32.0 
  6. var f rune = 32.0 

所以上題中 1)是正確的。

02 不同類型

在目前 Go 1.16 版本中(實(shí)際上只有很早期的版本不是),int 類型在 32 位機(jī)器占 4 字節(jié),64 位機(jī)器占 8 字節(jié)。所以,在 32 位機(jī)器上,int32 和 int 的內(nèi)存占用和內(nèi)存布局是完全一樣的。但 Go 語言不會(huì)做隱式類型轉(zhuǎn)換,int 和 int32 是不同的類型,因此上題中 2)編譯不通過。

03 類型別名

熟悉 C 語言的小伙伴,看到 Go 中以下定義:

  1. type myint int 

會(huì)以為 myint 和 int 是一樣的,認(rèn)為 myint 是 int 的別名。而實(shí)際上,myint 是和 int 完全不一樣的類型,只不過 myint 的底層類型是 int,它們直接可以強(qiáng)制類型轉(zhuǎn)換,卻不會(huì)隱式轉(zhuǎn)換。關(guān)于這點(diǎn)無需多講,重點(diǎn)要講的是類型別名。

從 Go1.9 開始引入了類型別名,定義如下:

  1. AliasDecl = identifier, "=", Type . 

具體例子:

  1. type intalias = int 

myint 是新類型,和 int 不一樣;而 intalias 卻和 int 一樣,它只是 int 的別名:所有使用 intalias 的地方都可以使用 int。

那為什么 Go 中會(huì)引入類型別名呢?Russ Cox 的論文 Codebase Refactoring (with help from Go) 介紹了它的背景。總結(jié)一下類型別名的用途,主要有兩點(diǎn):

  • 在大規(guī)模重構(gòu)項(xiàng)目代碼的時(shí)候,尤其是將一個(gè)類型從一個(gè)包移動(dòng)到另一個(gè)包中的時(shí)候,有些代碼會(huì)使用新包中的類型,有些代碼使用舊包中的類型, 最典型的是 context 包。最開始,context 包名是 golang.org/x/net/context,1.7 開始,引入標(biāo)準(zhǔn)庫(kù),這樣一來,存在兩份。Go 1.9 開始采用別名重構(gòu)了它;
  • 允許一個(gè)龐大的包分解成內(nèi)部的幾個(gè)小包,但是小包中的類型需要集中暴漏在上層的大包中;

在 Go 中,你可以為任意類型定義別名,比如數(shù)組、結(jié)構(gòu)體、指針、函數(shù)、接口、Slice、Map、Channel 等,包括為自定義類型定義別名。

  1. type F = func() 
  2. type I = interface{} 
  3. ... 

此外,還可以為其他包中的類型定義別名,比如為標(biāo)準(zhǔn)庫(kù)類型定義別名:

  1. type MyReader = bufio.Reader 

關(guān)于類型別名的一些注意事項(xiàng):

  • 別名和原類型是一樣的,因此 switch-type 結(jié)構(gòu)中,不能存在兩個(gè) case,一個(gè)是原類型,一個(gè)是別名;
  • 類型別名不能循環(huán)定義,比如以下是不允許的:
  1. type T = struct { 
  2.  next *T1 
  3.  
  4. type T1 = T 
  • 因?yàn)閯e名和原類型是一樣的,因此共享同樣的方法集,不論這個(gè)方法是定義在原類型還是別名上;
  • 別名的導(dǎo)出性可以和原類型不一樣;
  • 不能為別的包的類型通過定義別名來增加方法。以下行為是不允許的:
  1. type MyReader = bufio.Reader 
  2. func (MyReader) AliasMethod() { 
  3.  fmt.Println("This is alias method"

編譯報(bào)錯(cuò):cannot define new methods on non-local type bufio.Reader。

回到開頭題目的 3),rune 是什么類型?定義如下:

  1. type rune = int32 

很顯然,rune 是 int32 的別名,因此題目中 3)也能編譯通過。

除了 rune,Go 內(nèi)置類型中,還有 byte 是 uint8 的別名:

  1. type byte = uint8 

需要說明的是,在 Go1.9 之前,rune 和 byte 的別名性質(zhì)就存在,是編譯器負(fù)責(zé)處理的。只是 Go1.9 之后,別名可以用于其他類型了。

04 總結(jié)

一道看似簡(jiǎn)單的題目,如果你能夠分析透徹,把語言的變化都說出來,我相信面試官會(huì)給你加分。

今天的題目,你做對(duì)了嗎?

本文轉(zhuǎn)載自微信公眾號(hào)「polarisxu」,作者 站長(zhǎng)polaris。轉(zhuǎn)載本文請(qǐng)聯(lián)系polarisxu公眾號(hào)。

 

責(zé)任編輯:武曉燕 來源: polarisxu
相關(guān)推薦

2022-03-26 08:49:13

MySQL數(shù)據(jù)存儲(chǔ)

2025-03-17 00:21:00

2025-02-08 11:00:33

2021-03-17 16:53:51

IO多路

2020-10-23 10:10:59

Promise前端代碼

2024-01-03 13:39:00

JS,Javascrip算法

2024-12-30 11:05:28

泛型Go類型別名

2024-11-11 08:32:00

2024-09-30 08:34:01

TypeScript可讀性安全性

2021-12-29 17:29:07

KubernetesEvents集群

2022-07-20 07:29:52

Java

2025-05-06 08:00:35

2025-10-09 01:33:00

2025-10-23 14:47:19

ReactclassCSS

2021-10-09 19:05:06

channelGo原理

2020-07-02 09:15:59

Netty內(nèi)存RPC

2021-03-23 10:25:05

Redis數(shù)據(jù)結(jié)構(gòu)

2019-11-14 05:22:41

Javascript語言this

2021-07-08 10:08:03

DvaJS前端Dva

2020-12-07 06:19:50

監(jiān)控前端用戶
點(diǎn)贊
收藏

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

欧美日韩高清在线观看| 你懂的网址国产 欧美| 性欧美videosex高清少妇| 欧美性欧美巨大黑白大战| 中文字幕日韩一区二区不卡| 天堂在线视频| 日韩av色综合| 亚洲一区二区三区中文字幕在线| 欧美丝袜丝交足nylons172| 性欧美18+| 成人av免费在线看| 欧美精品自拍偷拍| 麻豆一区二区三区| 欧美一区=区三区| 日韩免费高清在线| 欧美人与性动交| av在线电影院| 精品国产三级a∨在线| 久久精品成人动漫| 国产精品久久久久久亚洲影视| 久久午夜色播影院免费高清| 亚洲三级av| 免费白浆视频| 国产精品白丝jk白祙| 日韩三级在线观看| 国产精品中文欧美| 成人爽a毛片免费啪啪红桃视频| 又黄又www| 日本a级片久久久| 最新的欧美黄色| 一区二区三区四区亚洲| 一区在线免费观看| 7777kkk亚洲综合欧美网站| 日日橹狠狠爱欧美超碰| 国产精品久久久av| 日韩免费在线观看| 久久蜜桃一区二区| 欧美日韩蜜桃| 日韩制服一区| 美女被人操视频在线观看| 欧美xxxx黑人又粗又长密月 | 国产一区二区三区在线观看视频 | 精品国产欧美一区二区三区成人| 亚洲免费影视第一页| 国产亚洲精品一区二区| 国产精品久久久久久久av大片| 国产午夜亚洲精品午夜鲁丝片 | 亚洲一区二区三区乱码aⅴ| 制服丝袜亚洲精品中文字幕| 成人福利视频在线| 久久看人人摘| 中文字幕人成乱码在线观看| 2020中文字幕在线| 日本一区二区三区视频在线观看 | 国产精品乱码人人做人人爱| 亚洲国产综合在线看不卡| 日韩综合久久| 第一页在线观看| 国产在线青青草| 国产亚洲二区| 欧美精品激情blacked18| 欧美日韩国产综合视频在线观看| 成人精品鲁一区一区二区| 久久久久久久久国产一区| 精品视频在线一区二区在线| 日本一区高清| www日韩在线观看| 免费精品视频一区二区三区| 久久久亚洲天堂| 亚洲成人激情在线| 午夜在线成人av| bt欧美亚洲午夜电影天堂| 欧美激情亚洲| 露出调教综合另类| 中文在线免费| 黄动漫在线看| 国产原创中文在线观看 | 91久久久久久久一区二区| 日韩午夜在线播放| 国产精品免费视频一区| 日本成人中文字幕| 黄色成人av在线| 亚洲国产精品一区二区三区| 亚洲精品一区二区三区不| 九九爱精品视频| 91免费视频国产| 欧美丰满老妇厨房牲生活| 日韩免费视频线观看| 亚洲国产精品麻豆| 久久综合网色—综合色88| 久久香蕉精品| 国精一区二区| 久久伊人久久| av午夜在线观看| 黄色毛片在线观看| av男人的天堂网| 国产精品沙发午睡系列| 狠狠干一区二区| 国产精品尤物福利片在线观看| 欧美成人午夜视频| 日韩激情在线视频| 在线观看亚洲成人| 一区二区三区在线视频观看| 91亚洲国产成人精品一区二三| 免费成人av在线| 亚洲精选国产| 女生裸体视频一区二区三区| 清纯唯美亚洲经典中文字幕| 成人一级视频| 欧美国产大片| 毛片在线网址| 国产精品实拍| av在线免费观看网站| 日本福利片高清在线观看| 国产羞羞视频| 奇米影视四色在线| 国产成人综合一区| 欧美性大战久久久久xxx| 国产成人免费高清视频| 亚洲综合欧美日韩| 亚洲国产欧美日韩| 久久资源av| 欧美一区二视频在线免费观看| 999久久久| 91九色蝌蚪成人| 国产日韩在线看| 国产欧美日韩中文字幕| 日韩av高清不卡| 日韩美女写真福利在线观看| 日韩免费中文字幕| 欧美孕妇与黑人孕交| 7777kkkk成人观看| 97视频免费在线看| 午夜精品久久久久久久99热浪潮 | 日本v片在线高清不卡在线观看| 99xxxx成人网| 午夜一级在线看亚洲| 性一交一乱一区二区洋洋av| 国产日产高清欧美一区二区三区| 先锋亚洲精品| 久久99精品国产91久久来源| 国产一区二区三区香蕉| 国产精品99久久久久久宅男| 国产成人精品免费网站| av电影一区二区| 91丨九色丨国产丨porny| 2024国产精品视频| 国产日韩欧美a| 麻豆一区二区三| 国产麻豆视频一区二区| www.性欧美| 国产精品久久久久aaaa| 一级做a爱片久久| 91福利小视频| 日韩一区二区三区在线观看| 亚洲精品二三区| 精品精品国产国产自在线| 久久免费在线观看| 国产精品成人v| 国产一区二区在线网站| 日日夜夜精品网站| 熟女少妇在线视频播放| 污版网站在线观看| 在线观看国产高清视频| 午夜免费福利在线观看| f2c人成在线观看免费视频| 婷婷激情一区| 中文字幕精品av| 欧美一区二区视频| 自拍欧美日韩| 亚洲免费观看高清完整版在线观看 | 国产成人精品影院| 久久亚洲综合av| 一区二区三区日韩精品| 91在线精品秘密一区二区| 欧美福利视频网站| 欧美第一黄网免费网站| 日本精品久久中文字幕佐佐木| 国产精品一香蕉国产线看观看| 粉嫩av四季av绯色av第一区| 日本一区高清不卡| 国产免费黄色一级片| 超碰超碰97| 九色视频在线观看免费播放| 日本资源在线| 国产aa精品| 亚洲无中文字幕| 久久www免费人成看片高清| 国产亚洲欧美中文| 色婷婷综合久久久中文一区二区| 欧美一级日韩免费不卡| 精品国产一区av| 国产一区香蕉久久| 亚洲mv在线看| 先锋影音成人资源| 麻豆网在线观看| 超碰97久久| 黄色精品视频网站| 欧美极品少妇xxxxⅹ免费视频| 久久99精品国产自在现线|