Go 語言 與 C 語言 的比較學習

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。 目錄(?)[-]
  1. 關鍵字
  2. 操作符
  3. 變數
  4. 指標
  5. 函數
    1. 傳回值
    2. 閉包
  6. PO
  7. 編程規範
  8. OO
  9. 並發
  10. 專案管理
 

對於MarkDown 編譯器沒有自動儲存功能這件事情, 我表示嚴重的厭惡。 一個來小時的整理化為烏有,而且居然還不能匯入到HTML編輯器, 真是無法忍受!

關鍵字

分類 C Go
字元 char
字串 string
浮點數 double , float float32 , float64 , complex64 , complex128
整數 int long short uint8 , uint16 , uint32 , uint64 , int8 , int16 , int32 , int64 , uint , int , uintptr , byte = uint8 , rune=unit32
bool boolean true , false
函數 func
介面 interface
void
Any interface{}
彙總 enum , struct , union struct
符號限定符號 signed , unsigned , auto , const , extern , register , static , volatile auto , const
流程式控制制 break , case , do , for , goto , if , else , continue , default , return , switch , while for , if , else , goto , break , switch , case , default , fallthrough , range , select , range
資料結構 map
其他 sizeof , typedef iota , var , type , defer , go chan , package , import

操作符

功能 C Go
取反 ~ ^
選擇 ? :  
取指標內容 ->  
寫入讀出   <- ->
初始化並賦值   :=

其餘的運算子基本相同

變數

X C Go
聲明/定義 TYPE NAME int i (var) NAME TYPE var i int
字元(串) char , char [] byte byte[], string
整形位寬 依賴於特定的平台和編譯器 可以指定寬度, 也可以依賴平台編譯器
有效範圍 棧上開闢的變數在範圍內有效, 堆上開闢的變數手動釋放之前有效 最後一個引用離開範圍之前都有效
範圍控制 static 限制於本檔案有效 , extern 尋找其他檔案的全域變數 大寫開頭可以匯出, 小寫僅限本包使用

指標

假設a 是一個指向某結構體的指標,這個結構體中有個成員叫b 。

C Go
a->b a.b
  • 取指標& 運算子 和解指標 * 運算子是一樣的.
  • 在指標比較中, Go 中的 nil 等效C語言的 NULL .

函數

傳回值

C Go
只能有一個 可以有多個

比如:

func exchange( a  int , b int ) ( int , int ){    return b , a}
  • 1
  • 2
  • 3
  • 4

閉包

C Go

C 語言的函數和變數是兩個不同的概念, 變數僅可以通過函數指標的形式來標識一個函數. 
Go 語言的函數也是一種變數 . 
嘗試下一下代碼:

package mainimport "fmt"func GetFunc( ) func(int) int {    i := 0 //   這個變數被綁定到下面的返回函數    return increment_i ( j int ) int {        i += j;        return i    } }func main() {    func_i1 := GetFunc()    func_i2 := GetFunc()    // 上面兩次調用GetFunc, 獲得兩個increment_i 函數, 各自綁定自己的 i 變數    for i :=0 ; i < 10; i++ {        fmt.Println("Func1 print : ", func_i1(i))        fmt.Println("Func2 print : ", func_i2(i+1))    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

PO

X C Go
if “if ( condition) XXX else XXX“` “`if condition {XXX} else {XXX}
switch 只能選擇可以轉化為整形的 , case中沒有break自動繼續 可以任意類型, 不會自動繼續, 除非使用failthrough
select 是個函數 關鍵字, 選擇chan
for for ( ; ; ) XXX for ; ; {XXX}
while
do … while

編程規範

  • 句末不需要分號
  • if for 的程式碼片段必須被大括弧包圍
  • if 的 condition 不要括弧
  • for 的 指示部分不要括弧
  • 左花括弧不能自成一行

OO

  • Method 
    在關鍵字 func 和函數名字之間說明屬於那個結構體。
type OOTest struct {    a int}func ( this * OOTest) GetAByPointer() int {    return this.a}func ( this  OOTest) GetAByCopy() int {    return this.a}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • Interface 
    定義介面,說明函數類型
type IOOTest interface {    GetAByPointer() int }
  • 1
  • 2
  • 3

使用的時候將實現了對應的介面的結構體對象指標賦值給介面對象

var i_test IOOTestvar test OOTest i_test = &test
  • 1
  • 2
  • 3
  • Combination 
    沒啥子好說的

  • Inherit ( by anonymous combination )

type OOTest1 struct{    OOTest    b int}
  • 1
  • 2
  • 3
  • 4

這樣 OOTest1 就擁有了 OOTest 的成員變數和方法

並發

X C/C++ Go
實現 依賴系統介面的線程 go 關鍵字, goroutine協程
依賴系統提供或者庫或者自己實現 sync包
通訊 共用記憶體/訊息 訊息 chan機制

專案管理

X C/C++ Go
編譯器 自行挑選 內建
工程管理 自行挑選 內建
測試機制 自行挑選 內建
統一編碼格式 依賴程式員自覺 工具統一整理

 

原文地址

http://studygolang.com/wr?u=http%3a%2f%2fblog.csdn.net%2fcchd0001%2farticle%2fdetails%2f44982127

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.