首頁  >  文章  >  後端開發  >  c語言與go語言的差別是什麼

c語言與go語言的差別是什麼

青灯夜游
青灯夜游原創
2021-03-04 14:51:479507瀏覽

區別:1、C語言原始檔的副檔名是“.h”和“.c”,Go語言原始檔的副檔名是“.go”。 2.C語言中透過檔案來管理程式碼,Go語言中透過套件來管理程式碼。 3.C語言中總共有32個關鍵字,Go語言中一共有25個關鍵字。

c語言與go語言的差別是什麼

本教學操作環境:windows7系統、c99&&GO 1.18版本、Dell G3電腦。

來源檔案比較

  • C語言原始檔
檔案副檔名 來源類型
.h #頭文件,存放程式碼聲明
.c C語言原始文件,存放程式碼實作
  • #Go語言原始檔
檔案副檔名 來源類型
#.go Go語言原始文件,存放程式碼實作

程式碼管理比較

  • #C語言中透過檔案來管理程式碼
    • 想使用某一個函數時,只需要include導入對應的.h檔即可
  • #Go語言中透過套件來管理程式碼
    • Go語言沒有.h文件的概念, 在Go中想使用某一個函數時, 只需要import導入對應的包即可
  • #C語言中函數、變量公私有管理
    • #透過extern和static實作是否公開函數和變數
  • Go語言中函數、變數公私有管理
    • 透過函數名稱首字母大小寫實作是否公開函數
    • 透過變數名稱首字母大小寫實作是否公開變數

#關鍵字對比

# #C語言中一共有32個關鍵字8forcontinuetypedefstruct#enumunioncharshortintlong#floatdouble# #sizeofsignedunsigned
1 #2 3 #4 5 6 7
#if else switch ##case default break
return #goto ##dowhile
void
    #const
##autoregister12default##typestruct
static extern volatile Go語言中總共有25個關鍵字
#345 678 if #else #switch ##switch case
#break return goto
fallthrough for continue

var

const

##map




  • funcc語言與go語言的差別是什麼

    interface
  • range

    import

    c語言與go語言的差別是什麼package

    defer
  • ##go

select
chan#資料型別比較C語言資料型別Go語言數據類型#C語言各資料型別佔用記憶體空間類型32位元編譯器64位元編譯器##charint
1 1
4#####4############ float######4######4############double######8#####8######## ####short######2######2############long######4#####8#### ########long long######8######8#############void*#####4##### #8############
  • Go語言各資料型別佔用記憶體空間
##byte1 1uint8/unsigned char#rune4#4 int32/signed intint48根據機器位元數決定長度uintptr48依機器位數決定長度uint32/uint64float3244float#float64#1
#類型 32位元編譯器 #64位元編譯器 本質
int8/uint8 1 1 signed char/unsigned char
int16/uint16 2 2 signed short/unsigned short
#int32/uint32 4 4 signed int/unsigned int
int64/ uint64 8 8 signed long long int/unsigned long long int
##8 8
##double true 1
char類型的整數
    • ##false
    1
1
    char類型的整數
      • 與C語言一樣,Go語言也提供了Sizeof計算變數的記憶體空間
      • 1.導入import "unsafe"套件
    • 2.透過unsafe.Sizeof()計算變數記憶體空間
    Go語言基本資料類型內部實作

    c語言與go語言的差別是什麼golang官方網站下載go1.4版本原始碼

    越老版本的程式碼越純粹,越適合新手學習
    • 隨著程式碼的更新迭代會逐步變得非常複雜, 所以這裡建議下載1.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語言幾乎一樣Go語言中、--運算子不支援前置錯誤寫法: a = i ;  return i ;#運算子##實例相加A B- 相減A - B*相乘/
      錯誤寫法: i; --i; Go語言中、--是語句,不是表達式,所以必須獨佔一行
      ##A * B
      相除
        B / A
      %##求餘 #B % A關係算符和C語言一樣描述
      自增 A
      -- #自減 A--
      #運算子
      實例###################==######檢查兩個值是否相等,如果相等回傳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结果就为1 A & B
      | 参与运算的两数各对应的二进位相或,对应位只要其中一个是1结果就为1 A | B
      ^ 参与运算的两数各对应的二进位相异或,对应位只要不同结果就是1 A ^ B
      左移运算符,左移n位就是乘以2的n次方 A
      >> 右移运算符,右移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
      >>= 右移赋值 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語言的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

      陳述:
      本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn