golang和c語(yǔ)言的區(qū)別
1、表面差異——行尾分號(hào)
從C、C++、C#、Java過(guò)來(lái)的程序員,會(huì)很奇怪所看到的Go代碼沒(méi)有行尾分號(hào)(“;”)作為一行的結(jié)束符。在說(shuō)明這個(gè)問(wèn)題之前我們聲明一個(gè)重要事實(shí):正式的Go語(yǔ)法是使用英文分號(hào)(“;”)做為結(jié)尾標(biāo)識(shí)符的。
我們之所以不用在行尾加分號(hào),是Go在設(shè)計(jì)中基于以下兩點(diǎn)考慮:
-
可用幾個(gè)簡(jiǎn)單規(guī)則確定語(yǔ)句行尾,因此行尾分號(hào)是可省略的;
-
省略行尾分號(hào)可以更好的規(guī)范代碼。
Golang在編譯時(shí),當(dāng)代碼行(非注釋行)的最后一個(gè)詞段為下列五種情況之一時(shí),則自動(dòng)在行尾插入分號(hào):
-
行尾為三種右括號(hào)之一:)、]、};
-
行尾為自增或者自減運(yùn)算符(++、–);
-
行尾為類型的具體值:布爾值、整數(shù)、浮點(diǎn)數(shù)、復(fù)數(shù)、Unicode碼點(diǎn)或者字符串字面量;
-
行尾為一個(gè)標(biāo)識(shí)符:包括類型名、變量名、常量名、跳轉(zhuǎn)標(biāo)簽、包名和包的引入名(不包括關(guān)鍵字);
-
行尾為4個(gè)跳轉(zhuǎn)關(guān)鍵字:包括break、continue、fallthrough和return(不包括其他關(guān)鍵字)。
2、常量變量對(duì)比
C語(yǔ)言定義常量和變量格式
數(shù)據(jù)類型 變量名稱 = 值; const 數(shù)據(jù)類型 常量名稱 = 值;
Go語(yǔ)言定義常量和變量格式
除了以下標(biāo)準(zhǔn)格式外,Go語(yǔ)言還提供了好幾種簡(jiǎn)單的語(yǔ)法糖
var 變量名稱 數(shù)據(jù)類型 = 值; const 變量名稱 數(shù)據(jù)類型 = 值;
3、代碼管理對(duì)比
C語(yǔ)言中通過(guò)文件來(lái)管理代碼
● 想使用某一個(gè)函數(shù)時(shí),只需要include導(dǎo)入對(duì)應(yīng)的.h文件即可
Go語(yǔ)言中通過(guò)包來(lái)管理代碼
● Go語(yǔ)言沒(méi)有.h文件的概念, 在Go中想使用某一個(gè)函數(shù)時(shí), 只需要import導(dǎo)入對(duì)應(yīng)的包即可
C語(yǔ)言中函數(shù)、變量公私有管理
● 通過(guò)extern和static實(shí)現(xiàn)是否公開(kāi)函數(shù)和變量
Go語(yǔ)言中函數(shù)、變量公私有管理
● 通過(guò)函數(shù)名稱首字母大小寫(xiě)實(shí)現(xiàn)是否公開(kāi)函數(shù)
● 通過(guò)變量名稱首字母大小寫(xiě)實(shí)現(xiàn)是否公開(kāi)變量
4、核心差異
總結(jié)了以下八點(diǎn):
-
并發(fā)編程
-
面向接口編程
-
函數(shù)多返回值
-
延后執(zhí)行
-
異常處理
-
強(qiáng)大且高性能的網(wǎng)絡(luò)編程
-
內(nèi)存管理及回收
-
代碼跨平臺(tái)及交叉編譯
真是因?yàn)樯鲜霭它c(diǎn)核心差異,讓Go被譽(yù)為互聯(lián)網(wǎng)時(shí)代的C語(yǔ)言。
5、具體差異
至于C與Go的具體差異,在hyperpolyglot上有詳細(xì)的對(duì)比表格:http://hyperpolyglot.org/c
hyperpolyglot.org中對(duì)一些相似的開(kāi)發(fā)語(yǔ)言和工具做詳細(xì)對(duì)比,沒(méi)事的時(shí)候可以看看。
推薦學(xué)習(xí):Golang教程