溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

c語(yǔ)言與go語(yǔ)言的區(qū)別有哪些

發(fā)布時(shí)間:2021-03-04 15:10:52 來(lái)源:億速云 閱讀:376 作者:小新 欄目:編程語(yǔ)言

小編給大家分享一下c語(yǔ)言與go語(yǔ)言的區(qū)別有哪些,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

區(qū)別:1、C語(yǔ)言源文件的擴(kuò)展名是“.h”和“.c”,Go語(yǔ)言源文件的擴(kuò)展名是“.go”。2、C語(yǔ)言中通過(guò)文件來(lái)管理代碼,Go語(yǔ)言中通過(guò)包來(lái)管理代碼。3、C語(yǔ)言中一共有32個(gè)關(guān)鍵字,Go語(yǔ)言中一共有25個(gè)關(guān)鍵字。

源文件對(duì)比

  • C語(yǔ)言源文件

文件擴(kuò)展名源類型
.h頭文件,存放代碼聲明
.cC語(yǔ)言源文件,存放代碼實(shí)現(xiàn)
  • Go語(yǔ)言源文件

文件擴(kuò)展名源類型
.goGo語(yǔ)言源文件,存放代碼實(shí)現(xiàn)

代碼管理對(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ù)名稱首字母大小寫實(shí)現(xiàn)是否公開(kāi)函數(shù)

    • 通過(guò)變量名稱首字母大小寫實(shí)現(xiàn)是否公開(kāi)變量


關(guān)鍵字對(duì)比

  • C語(yǔ)言中一共有32個(gè)關(guān)鍵字

12345678
ifelseswitchcasedefaultbreakreturngoto
dowhileforcontinuetypedefstructenumunion
charshortintlongfloatdoublevoidsizeof
signedunsignedconstautoregisterstaticexternvolatile
  • Go語(yǔ)言中一共有25個(gè)關(guān)鍵字

12345678
ifelseswitchcasedefaultbreakreturngoto
fallthroughforcontinuetypestructvarconstmap
funcinterfacerangeimportpackagedefergoselect
chan







數(shù)據(jù)類型對(duì)比

  • C語(yǔ)言數(shù)據(jù)類型

    c語(yǔ)言與go語(yǔ)言的區(qū)別有哪些

  • Go語(yǔ)言數(shù)據(jù)類型

    c語(yǔ)言與go語(yǔ)言的區(qū)別有哪些


  • C語(yǔ)言各數(shù)據(jù)類型占用內(nèi)存空間

類型32位編譯器64位編譯器
char11
int44
float44
double88
short22
long48
long long88
void*48
  • Go語(yǔ)言各數(shù)據(jù)類型占用內(nèi)存空間

類型32位編譯器64位編譯器本質(zhì)
int8/uint811signed char/unsigned char
int16/uint1622signed short/unsigned short
int32/uint3244signed int/unsigned int
int64/uint6488signed long long int/unsigned long long int
byte11uint8/unsigned char
rune44int32/signed int
int48根據(jù)機(jī)器位數(shù)決定長(zhǎng)度
uintptr48根據(jù)機(jī)器位數(shù)決定長(zhǎng)度 uint32/uint64
float3244float
float6488double
true11char類型的整型
false11char類型的整型
  • 和C語(yǔ)言一樣,Go語(yǔ)言也提供了Sizeof計(jì)算變量的內(nèi)存空間

    • 1.導(dǎo)入import "unsafe"包

    • 2.通過(guò)unsafe.Sizeof()計(jì)算變量?jī)?nèi)存空間


  • Go語(yǔ)言基本數(shù)據(jù)類型內(nèi)部實(shí)現(xiàn)

    c語(yǔ)言與go語(yǔ)言的區(qū)別有哪些

    • 得到如下實(shí)現(xiàn)代碼

    • 越老版本的代碼越純粹,越適合新手學(xué)習(xí)

    • 隨著代碼的更新迭代會(huì)逐步變得非常復(fù)雜, 所以此處建議下載1.4版本

    • golang官方網(wǎng)站下載go1.4版本源代碼

    • 解壓后打開(kāi)路徑: go\src\runtime\runtime.h

// 第8行到35行
typedef signed char     int8;
typedef unsigned char       uint8;
typedef signed short        int16;
typedef unsigned short      uint16;
typedef signed int      int32;
typedef unsigned int        uint32;
typedef signed long long int    int64;
typedef unsigned long long int  uint64;
typedef float           float32;
typedef double          float64;

#ifdef _64BIT
typedef uint64      uintptr;
typedef int64       intptr;
typedef int64       intgo; // Go's int
typedef uint64      uintgo; // Go's uint
#else
typedef uint32      uintptr;
typedef int32       intptr;
typedef int32       intgo; // Go's int
typedef uint32      uintgo; // Go's uint
#endif

#ifdef _64BITREG
typedef uint64      uintreg;
#else
typedef uint32      uintreg;
#endif

// 第153行到157行
enum
{
    true    = 1,
    false   = 0,
};

install B 時(shí)刻:
Go本質(zhì)就是用C語(yǔ)言編寫的一門高級(jí)編程語(yǔ)言
所以江哥前面教你C語(yǔ)言就是為了今天能讓你看懂Go的實(shí)現(xiàn)代碼,做到知其然知其所以然


常量變量對(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ù)類型 = 值;

注釋對(duì)比

  • 和C語(yǔ)言一樣,Go語(yǔ)言也支持單行注釋和多行注釋, 并且所有注釋的特性都和C語(yǔ)言一樣

    • 單行注釋 // 被注釋內(nèi)容

    • 多行注釋 /* 被注釋內(nèi)容*/

  • 在Go語(yǔ)言中,官方更加推薦使用單行注釋,而非多行注釋(詳情可以直接查看Go官方源碼)


運(yùn)算符對(duì)比

  • 算數(shù)運(yùn)算符和C語(yǔ)言幾乎一樣

    • 錯(cuò)誤寫法: a = i++;  return i++;

    • 錯(cuò)誤寫法: ++i; --i;

    • Go語(yǔ)言中++、--運(yùn)算符不支持前置

    • Go語(yǔ)言中++、--是語(yǔ)句,不是表達(dá)式,所以必須獨(dú)占一行

運(yùn)算符描述實(shí)例
+相加A + B
-相減A - B
*相乘A * B
/相除B / A
%求余B % A
++自增A++
--自減A--

  • 關(guān)系算符和C語(yǔ)言一樣

運(yùn)算符描述實(shí)例
==檢查兩個(gè)值是否相等,如果相等返回 True 否則返回 False。A == B
!=檢查兩個(gè)值是否不相等,如果不相等返回 True 否則返回 False。A != B
>檢查左邊值是否大于右邊值,如果是返回 True 否則返回 False。A > B
<檢查左邊值是否小于右邊值,如果是返回 True 否則返回 False。A < B
>=檢查左邊值是否大于等于右邊值,如果是返回 True 否則返回 False。A >= B
<=檢查左邊值是否小于等于右邊值,如果是返回 True 否則返回 False。A <= B

  • 邏輯運(yùn)算符和C語(yǔ)言一樣

運(yùn)算符描述實(shí)例
&&如果兩邊的操作數(shù)都是 True,則條件 True,否則為 False。A && B
||如果兩邊的操作數(shù)有一個(gè) True,則條件 True,否則為 False。A || B
!如果條件為 True,則邏輯 NOT 條件 False,否則為 True。!A

  • 位運(yùn)算符和C語(yǔ)言幾乎一樣

    • 新增一個(gè)&^運(yùn)算符

運(yùn)算符描述實(shí)例
&參與運(yùn)算的兩數(shù)各對(duì)應(yīng)的二進(jìn)位相與, 對(duì)應(yīng)位只要都是1結(jié)果就為1A & B
|參與運(yùn)算的兩數(shù)各對(duì)應(yīng)的二進(jìn)位相或,對(duì)應(yīng)位只要其中一個(gè)是1結(jié)果就為1A | B
^參與運(yùn)算的兩數(shù)各對(duì)應(yīng)的二進(jìn)位相異或,對(duì)應(yīng)位只要不同結(jié)果就是1A ^ B
<<左移運(yùn)算符,左移n位就是乘以2的n次方A << 2
>>右移運(yùn)算符,右移n位就是除以2的n次方B >> 2
&^邏輯清零運(yùn)算符, B對(duì)應(yīng)位是1,A對(duì)應(yīng)位清零,B對(duì)應(yīng)位是0, A對(duì)應(yīng)位保留原樣A &^ B
int main(){
    /*
      0110      a
    &^1011      b 如果b位位1,那么結(jié)果為0, 否則結(jié)果為a位對(duì)應(yīng)的值
    ----------
      0100
    */
    a1 := 6
    b1 := 11
    res1 := a1 &^ b1
    fmt.Println("res1 = ", res1) // 4

    /*
      1011      a
    &^1101      b 如果b位位1,那么結(jié)果為0, 否則結(jié)果為a位對(duì)應(yīng)的值
    ----------
      0010
    */
    a2 := 11
    b2 := 13
    res2 := a2 &^ b2
    fmt.Println("res2 = ", res2) // 2
}

  • 賦值運(yùn)算符和C語(yǔ)言幾乎一樣

    • 新增一個(gè)&^=運(yùn)算符

運(yùn)算符描述實(shí)例
=將右邊賦值給左邊C = A + B 將 A + B 表達(dá)式結(jié)果賦值給 C
+=相加后再賦值C += A 等于 C = C + A
-=相減后再賦值C -= A 等于 C = C - A
*=相乘后再賦值C *= A 等于 C = C * A
/=相除后再賦值C /= A 等于 C = C / A
%=求余后再賦值C %= A 等于 C = C % A
<<=左移賦值C <<= 2 等于 C = C << 2
>>=右移賦值C >>= 2 等于 C = C >> 2
&=位邏輯與賦值C &= 2 等于 C = C & 2
^=位邏輯或賦值C ^= 2 等于 C = C ^ 2
|=位邏輯異或賦值C |= 2 等于 C = C | 2
&^=位邏輯清零賦值C &^= 2 等于 C = C &^ 2

流程控制語(yǔ)句對(duì)比

  • C語(yǔ)言流程控制中的if、switch、for在Go語(yǔ)言都可以使用

  • C語(yǔ)言中的四大跳轉(zhuǎn)語(yǔ)句return、break、continue、goto在Go語(yǔ)言都可以使用

  • Go語(yǔ)言除了實(shí)現(xiàn)C語(yǔ)言中if、switch、for、return、break、continue、goto的基本功能以外,還對(duì)if、switch、for、break、continue進(jìn)行了增強(qiáng)

    • 例如: if 條件表達(dá)式前面可以添加初始化表達(dá)式

    • 例如: break、continue可以指定標(biāo)簽

    • 例如: switch語(yǔ)句可以當(dāng)做if/elseif來(lái)使用

    • ... ...

  • 值得注意的是Go語(yǔ)言中沒(méi)有while循環(huán)和dowhile循環(huán), 因?yàn)樗鼈兡茏龅腉o語(yǔ)言中的for循環(huán)都可以做


函數(shù)和方法對(duì)比

  • C語(yǔ)言定義函數(shù)格式

返回值類型 函數(shù)名稱(形參列表) {
        函數(shù)體相關(guān)語(yǔ)句;
        return 返回值;
}
  • Go語(yǔ)言定義函數(shù)格式

func  函數(shù)名稱(形參列表)(返回值列表) {
        函數(shù)體相關(guān)語(yǔ)句;
        return 返回值;
}
  • C語(yǔ)言中沒(méi)有方法的概念, 但是Go語(yǔ)言中有方法

    • 對(duì)于初學(xué)者而言,可以簡(jiǎn)單的把方法理解為一種特殊的函數(shù)

func  (接收者 接受者類型)函數(shù)名稱(形參列表)(返回值列表) {
        函數(shù)體相關(guān)語(yǔ)句;
        return 返回值;
}

編程思想對(duì)比

  • C語(yǔ)言是一門面向過(guò)程的編程語(yǔ)言

    • 1.上街買菜

    • 2.摘菜

    • 3.洗菜

    • 4.切菜

    • 5.開(kāi)火炒菜

    • 6.淘米煮飯

    • 7.吃飯

    • 面向過(guò)程: 按部就班, 親力親為,關(guān)注的是我應(yīng)該怎么做?

    • 做飯例子: 面向過(guò)程做飯

  • Go語(yǔ)言是門面向?qū)ο蟮木幊陶Z(yǔ)言

    • 面向?qū)ο?化繁為簡(jiǎn), 能不自己干自己就不干,關(guān)注的是我應(yīng)該讓誰(shuí)來(lái)做?

    • 做飯例子: 面向?qū)ο笞鲲?/p>

    • 1.找個(gè)會(huì)做飯女朋友 or 男朋友

    • 2.老婆我餓了 or 老公我餓了

    • 3.躺著...等她/他把飯做好

    • 4.吃飯

  • 不要把面向過(guò)程和面向?qū)ο笙胂蟮媚敲瓷衿? 它們只是思考問(wèn)題的方式不同而已

看完了這篇文章,相信你對(duì)“c語(yǔ)言與go語(yǔ)言的區(qū)別有哪些”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI