亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Go奇怪的語法背后的技術原因

Go奇怪的語法背后的技術原因

Go
滄海一幻覺 2022-09-05 17:58:37
我最近開始學習Go,我很困惑為什么它有一個奇怪的“非傳統”語法,不像其他語言(C,C++,C#,JAVA)。例如,Go 中的代碼如下所示:package mainimport "fmt"func sum(a int, b int) int {    return a + b}func main() {    numbers := [4] int {1, 2, 3, 4}    for _,n := range numbers {        result := sum(n, 2)        fmt.Println(result)    }}但是,可以用某些語言寫成這樣的東西:package mainimport "io"int sum(int a, int b) {    return a + b}void main() {    int numbers[4] = {1, 2, 3, 4}        foreach (n in range(numbers)) {        result = sum(n, 2)        io.print(result)    }}所以我的問題是,這種語法背后是否有任何技術原因,或者它只是團隊的個人偏好?特別是Go背后的團隊使用“C語言”來編寫Go,這意味著用C-Style語法鍵入它會更有意義?
查看完整描述

2 回答

?
翻閱古今

TA貢獻1780條經驗 獲得超5個贊

我想強調的幾點:

  1. Go的靈感來自許多語言,而不僅僅是C語言。

  • C:語句和表達式語法

  • 帕斯卡:聲明語法

  • Modula 2, Oberon 2: packages

  • CSP, Occam, Newsqueak, Limbo, Alef: 并發

  • BCPL:分號規則

  • 小話:方法

  • 新聞吱吱聲: <-, :=

  • APL: iota

  • 還有更多

  1. 從什么時候開始并成為C風格的語法?foreachrange

  2. 第三,不要將“For”語句與子句和子句混淆。閱讀規格。在 Go 中,您也可以通過以下方式執行此操作:forrange

for i := 0; i < len(numbers); i++

但是,一旦你理解了它,子句就會強大得多,是的,它不是奇怪的語法。我建議閱讀規范并查看一些示例。range

  1. 此外,它是Go而不是GoLang(閱讀)??偸歉矚g前者而不是后者。

  2. 嘗試 Go Tour。一些概念解釋得很好。

另外,請閱讀Go的FAQPike關于聲明語法的博客。常見問題解答應該回答許多這樣的問題。


查看完整回答
反對 回復 2022-09-05
?
森欄

TA貢獻1810條經驗 獲得超5個贊

import "io"

Go有和包,盡管它們確實有一些重疊。例如,允許您寫入任何 ,并允許您從任何 .fmtiofmt.Fprintio.Writerfmt.Fscanio.Reader


同樣,您可以使用 寫入控制臺,并使用 從控制臺讀取。io.Copy(os.Stdout, something)io.Copy(something, os.Stdin)


int sum(int a, int b) {

我想我讀到,通過首先,它使詞法解析更快。此外,Go 函數可以具有命名的返回值:func


func sum(a int, b int) (n int)

我不確定你會如何使用其他語法做到這一點。


int numbers[4] = {1, 2, 3, 4}

Go 語法允許您省略類型,而 C 語言則無法做到這一點。


foreach (n in range(numbers))

Go 沒有關鍵字,因為關鍵字越少,詞法解析就越快。相反,您有不同的調用:whilefor


var n int

for {

   if n > 9 {

      break

   }

   println(n)

   n++

}


var n int

for n < 9 {

   println(n)

   n++

}


for n := 0; n < 9; n++ {

   println(n)

}


for range numbers {

   println("hello")

}


for index := range numbers {

   println(index)

}


for index, value := range numbers {

   println(index, value)

}

為此:


result = sum(n, 2)

Go 有兩種不同的變量賦值語法:


result := 1

result = 2

第一個是聲明,第二個是分配給已聲明的變量。


io.print(result)

fmt.Println是大寫的,因為任何以大寫字母開頭的函數都是“公共”函數。這樣可以節省打字或任何地方。publicpub


查看完整回答
反對 回復 2022-09-05
  • 2 回答
  • 0 關注
  • 142 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號