婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識(shí)庫 > 為什么Go語言把類型聲明放在后面?

為什么Go語言把類型聲明放在后面?

熱門標(biāo)簽:中國地圖標(biāo)注省會(huì)高清 學(xué)海導(dǎo)航地圖標(biāo)注 江西轉(zhuǎn)化率高的羿智云外呼系統(tǒng) 浙江高速公路地圖標(biāo)注 地圖標(biāo)注的汽車標(biāo) 高德地圖標(biāo)注口訣 西部云谷一期地圖標(biāo)注 南通如皋申請(qǐng)開通400電話 廣州呼叫中心外呼系統(tǒng)

關(guān)于類型,官網(wǎng)上有一段仔細(xì)地介紹了一下函數(shù)指針的部分,現(xiàn)在的設(shè)計(jì)比起 C 的語法,清晰很多。

也就是說,類型放在后面是為了更加清晰易懂。Rob Pike 曾經(jīng)在 Go 官方博客解釋過這個(gè)問題(查看原文:Go's Declaration Syntax),簡(jiǎn)略翻譯如下(水平有限翻譯的不對(duì)的地方見諒):

引言

Go語言新人常常會(huì)很疑惑為什么這門語言的聲明語法(declaration syntax)會(huì)和傳統(tǒng)的C家族語言不同。在這篇博文里,我們會(huì)進(jìn)行一個(gè)比較,并做出解答。

C 的語法

首先,先看看 C 的語法。C 采用了一種聰明而不同尋常的聲明語法。聲明變量時(shí),只需寫出一個(gè)帶有目標(biāo)變量名的表達(dá)式,然后在表達(dá)式里指明該表達(dá)式本身的類型即可。比如:

int x;

上面的代碼聲明了 x 變量,并且其類型為 int——即,表達(dá)式 x 為 int 類型。一般而言,為了指明新變量的類型,我們得寫出一個(gè)表達(dá)式,其中含有我們要聲明的變量,這個(gè)表達(dá)式運(yùn)算的結(jié)果值屬于某種基本類型,我們把這種基本類型寫到表達(dá)式的左邊。所以,下述聲明:

int *p;
int a[3];

指明了 p 是一個(gè)int類型的指針,因?yàn)?*p的類型為int。而 a 是一個(gè) int 數(shù)組,因?yàn)?a[3]的類型為 int(別管這里出現(xiàn)的索引值,它只是用于指明數(shù)組的長(zhǎng)度)。

我們接下來看看函數(shù)聲明的情況。C 的函數(shù)聲明中關(guān)于參數(shù)的類型是寫在括號(hào)外的,像下面這樣:

int main(argc, argv)
  int argc;
  char *argv[];
{ /* ... */ }

如前所述,我們可以看到 main 之所以是函數(shù),是因?yàn)楸磉_(dá)式 main(argc, argv) 返回 int。在現(xiàn)代記法中我們是這么寫的:

int main(int argc, char *argv[]) { /* ... */ }

盡管看起來有些不同,但是基本的結(jié)構(gòu)是一樣的。

總的來看,當(dāng)類型比較簡(jiǎn)單時(shí),C的語法顯得很聰明。但是遺憾的是一旦類型開始復(fù)雜,C的這套語法很快就能讓人迷糊了。著名的例子如函數(shù)指針,我們得按下面這樣來寫:

int (*fp)(int a, int b);

在這兒,fp 之所以是一個(gè)指針是因?yàn)槿绻銓懗?(*fp)(a, b) 這樣的表達(dá)式將會(huì)調(diào)用一個(gè)函數(shù),其返回 int 類型的值。如果當(dāng) fp 的某個(gè)參數(shù)本身又是一個(gè)函數(shù),情況會(huì)怎樣呢?

int (*fp)(int (*ff)(int x, int y), int b)

這讀起來可就點(diǎn)難了。

當(dāng)然了,我們聲明函數(shù)時(shí)是可以不寫明參數(shù)的名稱的,因此 main 函數(shù)可以聲明為:

int main(int, char *[])

回想一下,之前 argv 是下面這樣的

char *argv[]

你有沒有發(fā)現(xiàn)你是從聲明的「中間」去掉變量名而后構(gòu)造出其變量類型的?盡管這不是很明顯,但你聲明某個(gè) char *[]類型的變量的時(shí)候,竟然需要把名字插入到變量類型的中間。

我們?cè)賮砜纯?,如果我們不命?fp 的參數(shù)會(huì)怎樣:

int (*fp)(int (*)(int, int), int)

這東西難懂的地方可不僅僅是要記得參數(shù)名原本是放這中間的

int (*)(int, int)

它更讓人混淆的地方還在于甚至可能都搞不清這竟然是個(gè)函數(shù)指針聲明。我們接著看看,如果返回值也是個(gè)函數(shù)指針類型又會(huì)怎么樣

int (*(*fp)(int (*)(int, int), int))(int, int)

這已經(jīng)很難看出是關(guān)于 fp 的聲明了。

你自己還可以構(gòu)建出比這更復(fù)雜的例子,但這已經(jīng)足以解釋 C 的聲明語法引入的某些復(fù)雜性了。

還有一點(diǎn)需要指出,由于類型語法和聲明語法是一樣的,要解析中間帶有類型的表達(dá)式可能會(huì)有些難度。這也就是為什么,C 在做類型轉(zhuǎn)換的時(shí)候總是要把類型用括號(hào)括起來的原因,像這樣

(int)M_PI

Go 的語法

非C家族的語言通常在聲明時(shí)使用一種不同的類型語法。一般是名字先出現(xiàn),然后常常跟著一個(gè)冒號(hào)。按照這樣來寫,我們上面所舉的例子就會(huì)變成下面這樣:

x: int
p: pointer to int
a: array[3] of int

這樣的聲明即便有些冗長(zhǎng),當(dāng)至少是清晰的——你只需從左向右讀就行。Go 語言所采用的方案就是以此為基礎(chǔ)的,但為了追求簡(jiǎn)潔性,Go 語言丟掉了冒號(hào)并去掉了部分關(guān)鍵詞,成了下面這樣:

x int
p *int
a [3]int

在 [3]int 和表達(dá)式中 a的用法沒有直接的對(duì)應(yīng)關(guān)系(我們?cè)谙乱还?jié)會(huì)回過頭來探討指針的問題)。至此,你獲得了代碼清晰性方面的提升,但付出的代價(jià)是語法上需要區(qū)別對(duì)待。

下面我們來考慮函數(shù)的問題。雖然在 Go 語言里,main 函數(shù)實(shí)際上沒有參數(shù),但是我們先謄抄一下之前的 main 函數(shù)的聲明:

func main(argc int, argv *[]byte) int

粗略一看和 C 沒什么不同,不過自左向右讀的話還不錯(cuò)。

main 函數(shù)接受一個(gè) int 和一個(gè)指針并返回一個(gè)int。

如果此時(shí)把參數(shù)名去掉,它還是很清楚——因?yàn)閰?shù)名總在類型的前面,所以不會(huì)引起混淆。

func main(int, *[]byte) int

這種自左向右風(fēng)格的聲明的一個(gè)價(jià)值在于,當(dāng)類型變得更復(fù)雜時(shí),它依然相對(duì)簡(jiǎn)單。下面是一個(gè)函數(shù)變量的聲明(相當(dāng)于 C 語言里的函數(shù)指針)

f func(func(int,int) int, int) int

或者當(dāng)它返回一個(gè)函數(shù)時(shí):

f func(func(int,int) int, int) func(int, int) int

上面的聲明讀起來還是很清晰,自左向右,而且究竟哪一個(gè)變量名是當(dāng)前被聲明的也容易看懂——因?yàn)樽兞棵肋h(yuǎn)在首位。

類型語法和表達(dá)式語法帶來的差別使得在 Go 語言里調(diào)用閉包也變得更簡(jiǎn)單:

sum := func(a, b int) int { return a+b } (3, 4)

指針

指針有些例外。注意在數(shù)組 (array )和切片 (slice) 中,Go 的類型語法把方括號(hào)放在了類型的左邊,但是在表達(dá)式語法中卻又把方括號(hào)放到了右邊:

var a []int
x = a[1]

類似的,Go 的指針沿用了 C 的 * 記法,但是我們寫的時(shí)候也是聲明時(shí) * 在變量名右邊,但在表達(dá)式中卻又得把 * 放到左左邊:

var p *int
x = *p

不能寫成下面這樣

var p *int
x = p*

因?yàn)楹缶Y的 * 可能會(huì)和乘法運(yùn)算混淆,也許我們可以改用 Pascal 的 ^ 標(biāo)記,像這樣

var p ^int
x = p^

我們也許還真的應(yīng)該把 * 像上面這樣改成 ^ (當(dāng)然這么一改 xor 運(yùn)算的符號(hào)也得改),因?yàn)樵陬愋秃捅磉_(dá)式中的 * 前綴確實(shí)把好些事兒都搞得有點(diǎn)復(fù)雜,舉個(gè)例子來說,雖然我們可以像下面這樣寫

[]int("hi")

但在轉(zhuǎn)換時(shí),如果類型是以 * 開頭的,就得加上括號(hào):

(*int)(nil)

如果有一天我們?cè)敢夥艞売?*作為指針語法的話,那么上面的括號(hào)就可以省略了。

可見,Go 的指針語法是和 C 相似的。但這種相似也意味著我們無法徹底避免在文法中有時(shí)為了避免類型和表達(dá)式的歧義需要補(bǔ)充括號(hào)的情況。

總而言之,盡管存在不足,但我們相信 Go 的類型語法要比 C 的容易懂。特別是當(dāng)類型比較復(fù)雜時(shí)。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

您可能感興趣的文章:
  • GO語言基本類型分析
  • GO語言類型轉(zhuǎn)換和類型斷言實(shí)例分析
  • Go語言基礎(chǔ)知識(shí)總結(jié)(語法、變量、數(shù)值類型、表達(dá)式、控制結(jié)構(gòu)等)
  • GO語言基本數(shù)據(jù)類型總結(jié)
  • Go語言的方法接受者類型用值類型還是指針類型?
  • Go語言中的復(fù)合類型詳細(xì)介紹
  • Go語言基本的語法和內(nèi)置數(shù)據(jù)類型初探
  • Go語言中如何通過方法為類型添加行為

標(biāo)簽:貴州 許昌 東營(yíng) 曲靖 常州 德宏 吐魯番 保定

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《為什么Go語言把類型聲明放在后面?》,本文關(guān)鍵詞  為什么,語言,把,類型,聲明,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《為什么Go語言把類型聲明放在后面?》相關(guān)的同類信息!
  • 本頁收集關(guān)于為什么Go語言把類型聲明放在后面?的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日本道在线观看一区二区| www激情久久| 成人不卡免费av| 粉嫩av亚洲一区二区图片| 在线免费观看不卡av| **网站欧美大片在线观看| 国产乱码一区二区三区| 精品国产一区二区三区不卡 | 不卡一卡二卡三乱码免费网站| 久久先锋影音av| 国产成人精品网址| 国产精品白丝在线| 欧美在线不卡视频| 亚洲高清在线视频| 欧美精品一区二区三区蜜桃| 丰满少妇久久久久久久| 亚洲精品成人在线| 欧美精品丝袜久久久中文字幕| 青青草97国产精品免费观看| 久久综合久久鬼色中文字| av在线不卡电影| 婷婷综合另类小说色区| 国产网站一区二区三区| 91论坛在线播放| 奇米综合一区二区三区精品视频 | 精品日韩一区二区| 国产成人aaa| 亚洲一区二区三区自拍| 精品国产亚洲在线| 色噜噜狠狠成人中文综合| 日本不卡的三区四区五区| 国产精品网曝门| 欧美人xxxx| av激情综合网| 激情五月婷婷综合网| 亚洲乱码一区二区三区在线观看| 欧美成人官网二区| 色天天综合色天天久久| 国内精品国产成人国产三级粉色| 一区二区三区加勒比av| 国产欧美一区二区三区沐欲| 欧美一区二区精品在线| 欧美三区免费完整视频在线观看| 国产精品一区二区在线观看网站| 午夜影院久久久| 国产精品家庭影院| 久久先锋影音av鲁色资源网| 在线播放中文字幕一区| 欧美性一二三区| 成人av网站在线观看免费| 麻豆精品视频在线观看免费| 久久激五月天综合精品| 欧美精选午夜久久久乱码6080| 九九精品视频在线看| 一区二区三区日韩欧美精品| 亚洲国产精品传媒在线观看| 精品久久久久久久久久久久久久久久久| 91丨九色丨黑人外教| 国产91清纯白嫩初高中在线观看| 亚洲国产精品自拍| 一区二区在线观看不卡| 樱花影视一区二区| 亚洲综合色自拍一区| 亚洲精选视频免费看| 一区在线观看免费| 中文字幕一区二区三| 最新不卡av在线| 国产精品国产三级国产a| 国产色综合久久| 日韩免费观看2025年上映的电影| 色狠狠色狠狠综合| caoporn国产精品| 激情综合网av| 久久精品国产999大香线蕉| 亚洲一区二区三区四区在线 | 国产精品网站一区| 中文子幕无线码一区tr| 精品国产在天天线2019| 精品三级在线看| 日韩欧美中文字幕制服| 欧美va日韩va| 91精品欧美久久久久久动漫| 日韩亚洲欧美高清| 欧美不卡一区二区| 精品裸体舞一区二区三区| 日韩一区二区免费电影| 精品国产91亚洲一区二区三区婷婷| 制服丝袜激情欧洲亚洲| 欧美亚洲自拍偷拍| 欧美一区二区网站| 欧美mv和日韩mv的网站| 国产精品久久久久久久浪潮网站 | 99国产一区二区三精品乱码| 色综合久久久久综合体桃花网| 97久久人人超碰| 成人夜色视频网站在线观看| 韩国女主播成人在线| 国产精品中文字幕一区二区三区| 精品一区二区三区在线视频| 日本v片在线高清不卡在线观看| 久久精品999| 成人app软件下载大全免费| 欧美在线观看视频在线| 日韩一区二区三区电影在线观看 | 91麻豆精品国产91久久久| 精品福利在线导航| 国产精品天天看| 亚洲香肠在线观看| 精品一区二区国语对白| 色综合天天做天天爱| 欧美日韩精品是欧美日韩精品| 日韩视频123| 亚洲国产成人一区二区三区| 亚洲无线码一区二区三区| 久久精品免费看| 成年人国产精品| 欧美人与禽zozo性伦| 久久精品一区二区三区av| 亚洲欧美日韩在线| 老汉av免费一区二区三区| 国产成+人+日韩+欧美+亚洲| 在线欧美日韩国产| 久久免费电影网| 日韩黄色在线观看| 91亚洲精华国产精华精华液| 日韩欧美国产一区二区在线播放| 国产精品久久免费看| 美脚の诱脚舐め脚责91| 91搞黄在线观看| 欧美激情中文字幕一区二区| 亚洲成人激情综合网| 夫妻av一区二区| 日韩三级视频中文字幕| 亚洲.国产.中文慕字在线| 成人天堂资源www在线| 91精品国产日韩91久久久久久| 亚洲美女少妇撒尿| 成人黄色777网| 国产午夜一区二区三区| 青青草国产精品亚洲专区无| 色一区在线观看| 国产精品久久久一本精品| 久久er精品视频| 欧美丰满一区二区免费视频| 日日噜噜夜夜狠狠视频欧美人| 99国产精品久久久| 欧美韩日一区二区三区四区| 国产综合色精品一区二区三区| 日韩欧美视频在线| 丝袜诱惑制服诱惑色一区在线观看| 91美女片黄在线观看91美女| 国产精品激情偷乱一区二区∴| 国产精品99久久久久久似苏梦涵| 精品免费国产一区二区三区四区| 天天色综合成人网| 日韩亚洲欧美高清| 精品综合免费视频观看| 欧美少妇xxx| 首页亚洲欧美制服丝腿| 91福利国产精品| 亚洲精品视频在线看| 欧美性欧美巨大黑白大战| 亚洲日本va午夜在线影院| 色婷婷久久综合| 日日摸夜夜添夜夜添精品视频| 精品国产不卡一区二区三区| 国产一区二区三区综合| 欧美国产成人精品| www.综合网.com| 有码一区二区三区| 欧美日韩国产免费一区二区| 另类中文字幕网| 久久精品夜色噜噜亚洲a∨| 日韩电影在线免费| 精品成人一区二区三区| 成人精品国产福利| 一区二区三区在线影院| 日韩欧美亚洲一区二区| 风间由美一区二区三区在线观看| 亚洲人成网站精品片在线观看| 欧美日韩激情在线| 国内精品免费在线观看| 亚洲综合在线五月| 欧美成人猛片aaaaaaa| 国产成人高清在线| 亚洲国产另类精品专区| 久久久久久久久免费| 色婷婷综合五月| 精品一区在线看| 午夜电影网一区| 国产精品乱码久久久久久| 欧美色爱综合网| 午夜久久久影院| 国产视频一区二区在线| 91久久精品一区二区二区| 成人少妇影院yyyy| 人人超碰91尤物精品国产| 亚洲欧美电影一区二区| 国产亚洲欧美日韩日本| 欧美日韩电影在线播放|