欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

簡(jiǎn)單對(duì)比一下?C語(yǔ)言?與?Go語(yǔ)言

 更新時(shí)間:2023年08月25日 08:39:57   作者:ENG八戒  
這篇文章主要介紹了簡(jiǎn)單對(duì)比一下?C語(yǔ)言?與?Go語(yǔ)言的相關(guān)資料,需要的朋友可以參考下

Go 是一種現(xiàn)代編程語(yǔ)言,追溯其歷史大部分源自編程語(yǔ)言 C。所以,任何熟悉 C 語(yǔ)言的開發(fā)者都可能會(huì)覺得 Go 很熟悉。C 程序員使用 Go 編寫新程序變得容易,同時(shí)避免了 C 編程語(yǔ)言的許多常見缺陷。

下面通過實(shí)現(xiàn)一個(gè)簡(jiǎn)單的加法邏輯,來(lái)比較 C 和 GO 的區(qū)別。該程序?qū)?shù)字從一加到十,計(jì)算過程和結(jié)果數(shù)值都比較小,所以代碼僅使用普通整數(shù)變量。像這樣的循環(huán)邏輯在編程中很常見,所以對(duì)比效果會(huì)顯而易見。

C 語(yǔ)言做循環(huán)

C 語(yǔ)言中的基本循環(huán)是 for 循環(huán),它可以實(shí)現(xiàn)對(duì)一組值的迭代訪問。

for 基本語(yǔ)法:

for (初始化條件; 判斷條件為真; 每次循環(huán)之后的操作) {
  // do something;
}

比如,可以編寫一個(gè)循環(huán),初始化條件時(shí)設(shè)置變量 count 為 1,然后判斷 count <= 10 為真時(shí)執(zhí)行 {} 內(nèi)的語(yǔ)句,在再次執(zhí)行條件判斷之前,對(duì)變量 count 增加 1。直到判斷 count <= 10 為假就退出循環(huán)。

在每次迭代后,對(duì)變量 count 增加 1,除了常規(guī)的 count = count + 1 書寫格式之外,也可以對(duì)變量采用 ++ 的自加操作符,這種變通可以使得代碼更簡(jiǎn)潔易讀。

在循環(huán)內(nèi)部,為了直觀查看變量的變化過程,可以使用標(biāo)準(zhǔn)庫(kù)函數(shù) printf 打印變量 count 的值:

for (int count = 1; count <= 10; count ++) {
  printf("%d\n", count);
}

為了演示完整的邏輯,下面是一個(gè)示例程序,將數(shù)字從 1 加到 10,然后打印和的結(jié)果。

#include <stdio.h>
int main()
{
  puts("adding 1 to 10 ..");
  int sum = 0;
  for (int count = 1; count <= 10; count ++) {
    sum += count;
  }
  printf("sum is %d\n", sum);
  return 0;
}

上面的代碼使用了兩種函數(shù)把信息打印出來(lái),最終輸出到標(biāo)準(zhǔn)輸出 stdout。puts 函數(shù)打印一個(gè)字符串,直到遇到字符串的空字符,而 printf 函數(shù)支持格式化打印,非常靈活,所以更常用。關(guān)鍵字 %d 表示打印一個(gè)十進(jìn)制(或整數(shù))值,\n 表示換行符。

如果編譯并運(yùn)行該程序,你將看到以下輸出:

adding 1 to 10 ..
sum is 55

GO 語(yǔ)言做循環(huán)

在 GO 語(yǔ)言中,同樣提供了 for 循環(huán),而且與 C 語(yǔ)言中的 for 循環(huán)語(yǔ)法非常相似,甚至可以直接轉(zhuǎn)換成 GO 的書寫格式。

下面為了直觀查看變量的變化過程,在循環(huán)內(nèi)部同樣使用方法打印變量 count 的值:

var count int
for count = 1; count <= 10; count ++ {
  fmt.Printf("%d\n", count)
}

fmt 是包名,使用包之前需要先導(dǎo)入,用關(guān)鍵詞 import。C 語(yǔ)言中就沒有導(dǎo)入包的概念,只能通過包含頭文件 .h 來(lái)引入其它現(xiàn)成模塊。

fmt 實(shí)現(xiàn)了類似 C 語(yǔ)言的打印輸出 printf 和讀取輸入 scanf。fmt.Printf 方法也是支持格式化輸出的,甚至格式變量就是從 C 語(yǔ)言的 printf 派生而來(lái)。

在 C/C ++ 代碼中,比較推薦的編碼規(guī)范中通常每行是只寫一句操作語(yǔ)句,雖然語(yǔ)法上多個(gè)操作語(yǔ)句是允許書寫在同一行的,但這樣易讀性就很差。有沒有發(fā)現(xiàn),在每行 GO 語(yǔ)句的末尾都沒有分號(hào) ';' 了? 因?yàn)?GO 編譯器默認(rèn)每行就是一個(gè)語(yǔ)句,這樣其實(shí)是強(qiáng)制提高了代碼的可讀性。

再來(lái)看看 GO 語(yǔ)言實(shí)現(xiàn)的完整邏輯,基于上面的 C 語(yǔ)言代碼版本直接翻譯如下

package main
import "fmt"
func main() {
  var sum, count int
  fmt.Println("adding 1 to 10 ..")
  for count = 1; count <= 10; count ++ {
    sum = sum + count
  }
  fmt.Printf("sum is %d\n", sum)
}

上面的代碼是有效和可以正確運(yùn)行輸出的,但是這很不 GO ! GO 不單單是一門語(yǔ)言,也是一種態(tài)度。

有沒有看到 C 語(yǔ)言版本中, for 循環(huán)里的初始化條件是可以同時(shí)聲明定義并賦值變量的?換成在 GO 中是否也支持類似操作?

在 GO 中,有個(gè)聲明變量并賦值的操作符 :=,就可以做到

for count := 1; count <= 10; count ++ {
  sum = sum + count
}

另外,你如果再細(xì)心一點(diǎn)可能會(huì)發(fā)現(xiàn),GO 代碼里聲明定義的變量會(huì)被默認(rèn)初始化為 0,而 C 代碼中定義的變量如果未經(jīng)初始化會(huì)是任何未知的值,如此看來(lái) GO 的安全性有了很大的提高。

變量的生命周期管理對(duì)開發(fā)者來(lái)說是很耗費(fèi)心智的,所以很多時(shí)候變量的聲明定義都是應(yīng)該盡量靠近使用的地方,并且縮窄變量的生命周期,對(duì)于事故的發(fā)生可以有效縮小排查錯(cuò)誤的范圍,簡(jiǎn)直就是在打救程序員的生命啊。

再來(lái)看看,優(yōu)化后的 GO 范式代碼

package main
import "fmt"
func main() {
  fmt.Println("adding 1 to 10 ..")
  var sum int
  for count := 1; count <= 10; count++ {
    sum += count
  }
  fmt.Printf("sum is %d\n", sum)
}

看到這里,和 C 代碼的 main 函數(shù)比起來(lái),GO 的 main 函數(shù)沒有顯式的返回值。實(shí)際上,GO 的 main 函數(shù)默認(rèn)返回值 0,如果需要返回其它值,可以調(diào)用 os.Exit(n) 返回值 n,這個(gè)方法可在任何位置調(diào)用,程序會(huì)在調(diào)用該方法后會(huì)終止運(yùn)行并退出,就類似 C 語(yǔ)言中的標(biāo)準(zhǔn)庫(kù)函數(shù) exit(n) 一樣。

簡(jiǎn)單回顧

從上面的邏輯實(shí)現(xiàn)過程來(lái)看,兩種語(yǔ)言實(shí)現(xiàn)過程差別不大,語(yǔ)法上是有差別的,書寫的習(xí)慣其實(shí)就透露著各自的態(tài)度。

雖然老氣橫秋的 C 語(yǔ)言代碼很多,但是如果按照現(xiàn)代 C 語(yǔ)言書寫規(guī)范來(lái)看,GO 的代碼是何其相似。

雖然你會(huì)說新出來(lái)的語(yǔ)言有很多方便到爆炸的語(yǔ)法糖。但問題是,語(yǔ)言的精髓是語(yǔ)法糖嗎?答案不唯一,酸甜苦辣唯有嘗過的人才知道。

到此這篇關(guān)于簡(jiǎn)單對(duì)比一下 C語(yǔ)言 與 Go語(yǔ)言的文章就介紹到這了,更多相關(guān)C語(yǔ)言 與 Go語(yǔ)言對(duì)比內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • GO中sync包自由控制并發(fā)示例詳解

    GO中sync包自由控制并發(fā)示例詳解

    這篇文章主要為大家介紹了GO中sync包自由控制并發(fā)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Golang 字符串與字節(jié)數(shù)組互轉(zhuǎn)的實(shí)現(xiàn)

    Golang 字符串與字節(jié)數(shù)組互轉(zhuǎn)的實(shí)現(xiàn)

    在Go語(yǔ)言中,我們經(jīng)常在字符串和切片之間進(jìn)行轉(zhuǎn)換,本文就詳細(xì)的介紹一下Golang 字符串與字節(jié)數(shù)組互轉(zhuǎn)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • go select的用法

    go select的用法

    本文主要介紹了go select的用法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Go 語(yǔ)言中程序編譯過程詳解

    Go 語(yǔ)言中程序編譯過程詳解

    本文旨在深入探討Go語(yǔ)言的編譯機(jī)制和最新的模塊管理系統(tǒng)——Go Modules,通過詳細(xì)的示例和步驟,我們將演示從簡(jiǎn)單的 “Hello World” 程序到使用第三方庫(kù)的更復(fù)雜項(xiàng)目的開發(fā)過程,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • Go計(jì)算某段代碼運(yùn)行所耗時(shí)間簡(jiǎn)單實(shí)例

    Go計(jì)算某段代碼運(yùn)行所耗時(shí)間簡(jiǎn)單實(shí)例

    這篇文章主要給大家介紹了關(guān)于Go計(jì)算某段代碼運(yùn)行所耗時(shí)間的相關(guān)資料,主要介紹了Golang記錄計(jì)算函數(shù)執(zhí)行耗時(shí)、運(yùn)行時(shí)間的一個(gè)簡(jiǎn)單方法,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下
    2023-11-11
  • Go語(yǔ)言實(shí)現(xiàn)熱更新具體步驟

    Go語(yǔ)言實(shí)現(xiàn)熱更新具體步驟

    這篇文章主要為大家介紹了Go語(yǔ)言實(shí)現(xiàn)熱更新具體步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Golang實(shí)現(xiàn)不被復(fù)制的結(jié)構(gòu)體的方法

    Golang實(shí)現(xiàn)不被復(fù)制的結(jié)構(gòu)體的方法

    sync包中的許多結(jié)構(gòu)都是不允許拷貝的,因?yàn)樗鼈冏陨泶鎯?chǔ)了一些狀態(tài)(比如等待者的數(shù)量),如果你嘗試復(fù)制這些結(jié)構(gòu)體,就會(huì)在你的?IDE中看到警告,那這是怎么實(shí)現(xiàn)的呢,下文就來(lái)和大家詳細(xì)講講
    2023-03-03
  • 使用Gorm操作Oracle數(shù)據(jù)庫(kù)踩坑記錄

    使用Gorm操作Oracle數(shù)據(jù)庫(kù)踩坑記錄

    gorm是目前用得最多的go語(yǔ)言orm庫(kù),本文主要介紹了使用Gorm操作Oracle數(shù)據(jù)庫(kù)踩坑記錄,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Golang Mutex互斥鎖深入理解

    Golang Mutex互斥鎖深入理解

    這篇文章主要為大家介紹了Golang Mutex互斥鎖深入理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Go?語(yǔ)言入門之Go?計(jì)時(shí)器介紹

    Go?語(yǔ)言入門之Go?計(jì)時(shí)器介紹

    這篇文章主要介紹了Go?語(yǔ)言入門之Go?計(jì)時(shí)器,文章基于GO語(yǔ)言的相關(guān)資料展開對(duì)其中計(jì)時(shí)器的詳細(xì)內(nèi)容。具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05

最新評(píng)論