最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

簡單對比一下?C語言?與?Go語言

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

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

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

C 語言做循環(huán)

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

for 基本語法:

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

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

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

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

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

為了演示完整的邏輯,下面是一個示例程序,將數(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ù)把信息打印出來,最終輸出到標(biāo)準(zhǔn)輸出 stdout。puts 函數(shù)打印一個字符串,直到遇到字符串的空字符,而 printf 函數(shù)支持格式化打印,非常靈活,所以更常用。關(guān)鍵字 %d 表示打印一個十進制(或整數(shù))值,\n 表示換行符。

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

adding 1 to 10 ..
sum is 55

GO 語言做循環(huán)

在 GO 語言中,同樣提供了 for 循環(huán),而且與 C 語言中的 for 循環(huán)語法非常相似,甚至可以直接轉(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 語言中就沒有導(dǎo)入包的概念,只能通過包含頭文件 .h 來引入其它現(xiàn)成模塊。

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

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

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

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)
}

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

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

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

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

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

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

再來看看,優(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ù)比起來,GO 的 main 函數(shù)沒有顯式的返回值。實際上,GO 的 main 函數(shù)默認(rèn)返回值 0,如果需要返回其它值,可以調(diào)用 os.Exit(n) 返回值 n,這個方法可在任何位置調(diào)用,程序會在調(diào)用該方法后會終止運行并退出,就類似 C 語言中的標(biāo)準(zhǔn)庫函數(shù) exit(n) 一樣。

簡單回顧

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

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

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

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

相關(guān)文章

  • golang 對象池sync.Pool的實現(xiàn)

    golang 對象池sync.Pool的實現(xiàn)

    這篇文章主要介紹了golang 對象池sync.Pool的實現(xiàn), 用于緩存和復(fù)用臨時對象,以減少內(nèi)存分配和垃圾回收的壓力,下面就來介紹一下,感興趣的可以了解一下
    2025-05-05
  • Golang 統(tǒng)計字符串字?jǐn)?shù)的方法示例

    Golang 統(tǒng)計字符串字?jǐn)?shù)的方法示例

    本篇文章主要介紹了Golang 統(tǒng)計字符串字?jǐn)?shù)的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • B站新一代 golang規(guī)則引擎gengine基礎(chǔ)語法

    B站新一代 golang規(guī)則引擎gengine基礎(chǔ)語法

    這篇文章主要為大家介紹了B站新一代 golang規(guī)則引擎gengine基礎(chǔ)語法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • Go語言net/http包的實戰(zhàn)小結(jié)

    Go語言net/http包的實戰(zhàn)小結(jié)

    本文主要介紹了Go語言net/http包的實戰(zhàn),包括HTTP服務(wù)端搭建、請求處理、路由匹配、參數(shù)獲取等內(nèi)容,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-03-03
  • golang如何去除多余空白字符(含制表符)

    golang如何去除多余空白字符(含制表符)

    這篇文章主要介紹了golang去除多余空白字符(含制表符)的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Go項目配置管理神器之viper的介紹與使用詳解

    Go項目配置管理神器之viper的介紹與使用詳解

    viper是一個完整的?Go應(yīng)用程序的配置解決方案,它被設(shè)計為在應(yīng)用程序中工作,并能處理所有類型的配置需求和格式,下面這篇文章主要給大家介紹了關(guān)于Go項目配置管理神器之viper的介紹與使用,需要的朋友可以參考下
    2023-02-02
  • 深入探究Go語言中for?range語句

    深入探究Go語言中for?range語句

    為了更加便捷地遍歷這些數(shù)據(jù)類型,Go語言引入了for...range語句,本文將以數(shù)組遍歷為起點,逐步介紹for...range語句在不同數(shù)據(jù)類型中的應(yīng)用,希望對大家有所幫助
    2023-06-06
  • Golang實現(xiàn)yaml配置文件的解析

    Golang實現(xiàn)yaml配置文件的解析

    這篇文章主要介紹了Golang實現(xiàn)yaml配置文件的解析,文中通過圖文結(jié)合的方式講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-12-12
  • Go基礎(chǔ)教程系列之defer、panic和recover詳解

    Go基礎(chǔ)教程系列之defer、panic和recover詳解

    這篇文章主要介紹了Go基礎(chǔ)教程系列之defer、panic和recover,需要的朋友可以參考下
    2022-04-04
  • Golang?PHP?數(shù)據(jù)綁定示例分析

    Golang?PHP?數(shù)據(jù)綁定示例分析

    這篇文章主要為大家介紹了Golang?PHP?數(shù)據(jù)綁定示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08

最新評論

五常市| 额济纳旗| 武鸣县| 东乡族自治县| 新乐市| 盖州市| 章丘市| 巴南区| 正定县| 吐鲁番市| 辉南县| 香河县| 芷江| 巴楚县| 奉节县| 平邑县| 繁峙县| 五家渠市| 英吉沙县| 苍溪县| 定南县| 博客| 福贡县| 苍山县| 喀喇| 郸城县| 兰坪| 德格县| 射阳县| 靖边县| 烟台市| 库车县| 龙岩市| 台中县| 福安市| 桑日县| 榆社县| 枣阳市| 明星| 万载县| 霍城县|