您好,登錄后才能下訂單哦!
小編給大家分享一下c語言與go語言的區別有哪些,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
區別:1、C語言源文件的擴展名是“.h”和“.c”,Go語言源文件的擴展名是“.go”。2、C語言中通過文件來管理代碼,Go語言中通過包來管理代碼。3、C語言中一共有32個關鍵字,Go語言中一共有25個關鍵字。
C語言源文件
文件擴展名 | 源類型 |
---|---|
.h | 頭文件,存放代碼聲明 |
.c | C語言源文件,存放代碼實現 |
Go語言源文件
文件擴展名 | 源類型 |
---|---|
.go | Go語言源文件,存放代碼實現 |
C語言中通過文件來管理代碼
想使用某一個函數時,只需要include導入對應的.h文件即可
Go語言中通過包來管理代碼
Go語言沒有.h文件的概念, 在Go中想使用某一個函數時, 只需要import導入對應的包即可
C語言中函數、變量公私有管理
通過extern和static實現是否公開函數和變量
Go語言中函數、變量公私有管理
通過函數名稱首字母大小寫實現是否公開函數
通過變量名稱首字母大小寫實現是否公開變量
C語言中一共有32個關鍵字
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|
if | else | switch | case | default | break | return | goto |
do | while | for | continue | typedef | struct | enum | union |
char | short | int | long | float | double | void | sizeof |
signed | unsigned | const | auto | register | static | extern | volatile |
Go語言中一共有25個關鍵字
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|
if | else | switch | case | default | break | return | goto |
fallthrough | for | continue | type | struct | var | const | map |
func | interface | range | import | package | defer | go | select |
chan |
C語言數據類型
Go語言數據類型
C語言各數據類型占用內存空間
類型 | 32位編譯器 | 64位編譯器 |
---|---|---|
char | 1 | 1 |
int | 4 | 4 |
float | 4 | 4 |
double | 8 | 8 |
short | 2 | 2 |
long | 4 | 8 |
long long | 8 | 8 |
void* | 4 | 8 |
Go語言各數據類型占用內存空間
類型 | 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 |
byte | 1 | 1 | uint8/unsigned char |
rune | 4 | 4 | int32/signed int |
int | 4 | 8 | 根據機器位數決定長度 |
uintptr | 4 | 8 | 根據機器位數決定長度 uint32/uint64 |
float32 | 4 | 4 | float |
float64 | 8 | 8 | double |
true | 1 | 1 | char類型的整型 |
false | 1 | 1 | char類型的整型 |
和C語言一樣,Go語言也提供了Sizeof計算變量的內存空間
1.導入import "unsafe"包
2.通過unsafe.Sizeof()計算變量內存空間
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結果就為1 | A & B |
| | 參與運算的兩數各對應的二進位相或,對應位只要其中一個是1結果就為1 | A | B |
^ | 參與運算的兩數各對應的二進位相異或,對應位只要不同結果就是1 | A ^ 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語言的區別有哪些”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。