亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

c語言與go語言的區別有哪些

發布時間:2021-03-04 15:10:52 來源:億速云 閱讀:383 作者:小新 欄目:編程語言

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

區別:1、C語言源文件的擴展名是“.h”和“.c”,Go語言源文件的擴展名是“.go”。2、C語言中通過文件來管理代碼,Go語言中通過包來管理代碼。3、C語言中一共有32個關鍵字,Go語言中一共有25個關鍵字。

源文件對比

  • C語言源文件

文件擴展名源類型
.h頭文件,存放代碼聲明
.cC語言源文件,存放代碼實現
  • Go語言源文件

文件擴展名源類型
.goGo語言源文件,存放代碼實現

代碼管理對比

  • C語言中通過文件來管理代碼

    • 想使用某一個函數時,只需要include導入對應的.h文件即可

  • Go語言中通過包來管理代碼

    • Go語言沒有.h文件的概念, 在Go中想使用某一個函數時, 只需要import導入對應的包即可

  • C語言中函數、變量公私有管理

    • 通過extern和static實現是否公開函數和變量

  • Go語言中函數、變量公私有管理

    • 通過函數名稱首字母大小寫實現是否公開函數

    • 通過變量名稱首字母大小寫實現是否公開變量


關鍵字對比

  • C語言中一共有32個關鍵字

12345678
ifelseswitchcasedefaultbreakreturngoto
dowhileforcontinuetypedefstructenumunion
charshortintlongfloatdoublevoidsizeof
signedunsignedconstautoregisterstaticexternvolatile
  • Go語言中一共有25個關鍵字

12345678
ifelseswitchcasedefaultbreakreturngoto
fallthroughforcontinuetypestructvarconstmap
funcinterfacerangeimportpackagedefergoselect
chan







數據類型對比

  • C語言數據類型

    c語言與go語言的區別有哪些

  • Go語言數據類型

    c語言與go語言的區別有哪些


  • C語言各數據類型占用內存空間

類型32位編譯器64位編譯器
char11
int44
float44
double88
short22
long48
long long88
void*48
  • Go語言各數據類型占用內存空間

類型32位編譯器64位編譯器本質
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根據機器位數決定長度
uintptr48根據機器位數決定長度 uint32/uint64
float3244float
float6488double
true11char類型的整型
false11char類型的整型
  • 和C語言一樣,Go語言也提供了Sizeof計算變量的內存空間

    • 1.導入import "unsafe"包

    • 2.通過unsafe.Sizeof()計算變量內存空間


  • Go語言基本數據類型內部實現

    c語言與go語言的區別有哪些

    • 得到如下實現代碼

    • 越老版本的代碼越純粹,越適合新手學習

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

    • golang官方網站下載go1.4版本源代碼

    • 解壓后打開路徑: 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 時刻:
Go本質就是用C語言編寫的一門高級編程語言
所以江哥前面教你C語言就是為了今天能讓你看懂Go的實現代碼,做到知其然知其所以然


常量變量對比

  • C語言定義常量和變量格式

數據類型 變量名稱 = 值;
const 數據類型 常量名稱 = 值;
  • Go語言定義常量和變量格式

    • 除了以下標準格式外,Go語言還提供了好幾種簡單的語法糖

var 變量名稱 數據類型 = 值;
const 變量名稱 數據類型 = 值;

注釋對比

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

    • 單行注釋 // 被注釋內容

    • 多行注釋 /* 被注釋內容*/

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


運算符對比

  • 算數運算符和C語言幾乎一樣

    • 錯誤寫法: a = i++;  return i++;

    • 錯誤寫法: ++i; --i;

    • Go語言中++、--運算符不支持前置

    • Go語言中++、--是語句,不是表達式,所以必須獨占一行

運算符描述實例
+相加A + B
-相減A - B
*相乘A * B
/相除B / A
%求余B % A
++自增A++
--自減A--

  • 關系算符和C語言一樣

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

  • 邏輯運算符和C語言一樣

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

  • 位運算符和C語言幾乎一樣

    • 新增一個&^運算符

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

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

  • 賦值運算符和C語言幾乎一樣

    • 新增一個&^=運算符

運算符描述實例
=將右邊賦值給左邊C = A + B 將 A + B 表達式結果賦值給 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

流程控制語句對比

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

  • C語言中的四大跳轉語句return、break、continue、goto在Go語言都可以使用

  • Go語言除了實現C語言中if、switch、for、return、break、continue、goto的基本功能以外,還對if、switch、for、break、continue進行了增強

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

    • 例如: break、continue可以指定標簽

    • 例如: switch語句可以當做if/elseif來使用

    • ... ...

  • 值得注意的是Go語言中沒有while循環和dowhile循環, 因為它們能做的Go語言中的for循環都可以做


函數和方法對比

  • C語言定義函數格式

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

func  函數名稱(形參列表)(返回值列表) {
        函數體相關語句;
        return 返回值;
}
  • C語言中沒有方法的概念, 但是Go語言中有方法

    • 對于初學者而言,可以簡單的把方法理解為一種特殊的函數

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

編程思想對比

  • C語言是一門面向過程的編程語言

    • 1.上街買菜

    • 2.摘菜

    • 3.洗菜

    • 4.切菜

    • 5.開火炒菜

    • 6.淘米煮飯

    • 7.吃飯

    • 面向過程: 按部就班, 親力親為,關注的是我應該怎么做?

    • 做飯例子: 面向過程做飯

  • Go語言是門面向對象的編程語言

    • 面向對象:化繁為簡, 能不自己干自己就不干,關注的是我應該讓誰來做?

    • 做飯例子: 面向對象做飯

    • 1.找個會做飯女朋友 or 男朋友

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

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

    • 4.吃飯

  • 不要把面向過程和面向對象想象得那么神奇, 它們只是思考問題的方式不同而已

看完了這篇文章,相信你對“c語言與go語言的區別有哪些”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

呼玛县| 吉林省| 临澧县| 福清市| 岳阳县| 友谊县| 台北市| 彩票| 紫金县| 普兰店市| 苏尼特右旗| 柳林县| 高雄市| 龙海市| 弥渡县| 辽阳县| 临颍县| 静宁县| 抚宁县| 莱州市| 象州县| 大荔县| 尼勒克县| 达州市| 新疆| 阿城市| 章丘市| 通城县| 敦化市| 奉贤区| 中超| 扶绥县| 合肥市| 龙江县| 视频| 巴南区| 洞头县| 鸡西市| 潞西市| 乌拉特前旗| 沾益县|