<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          驚!這道題正確率竟然只有 22%:答案詳解

          共 1839字,需瀏覽 4分鐘

           ·

          2022-06-26 14:16

          閱讀本文大概需要 3 分鐘。

          大家好,我是 polarisxu。

          《Go 語(yǔ)言愛(ài)好者周刊》第 148 期有一道題目:以下代碼輸出什么?

          package main

          import (
           "fmt"
          )

          func main() {
           m := [...]int{
            'a'1,
            'b'2,
            'c'3,
           }
           m['a'] = 3
           fmt.Println(len(m))
          }

          A:3;B:4;C:100;D:編譯失敗

          大家的答題情況如下:

          正確率只有 22%(正確答案是 C)。不知道你選對(duì)了嗎?

          核心知識(shí)點(diǎn)

          這道題目的核心點(diǎn)在于對(duì) rune 字面量的理解和數(shù)組的語(yǔ)法。

          在 Go 語(yǔ)言規(guī)范中有這么一句話:

          A rune literal represents a rune constant[1], an integer value identifying a Unicode code point. A rune literal is expressed as one or more characters enclosed in single quotes, as in 'x' or '\n'.

          即一個(gè) rune 字面量代表一個(gè) rune 常量。而常量分為有類(lèi)型常量(typed)和無(wú)類(lèi)型常量(untyped)。而字面量屬于無(wú)類(lèi)型常量,只不過(guò)每一個(gè)無(wú)類(lèi)型常量都有一個(gè)默認(rèn)類(lèi)型。比如 a 字面量是一個(gè)無(wú)類(lèi)型常量,它的默認(rèn)類(lèi)型是 rune。關(guān)于常量的這個(gè)知識(shí)點(diǎn),之前周刊題解有過(guò)詳細(xì)介紹:常量表達(dá)式這個(gè)規(guī)則應(yīng)該了解下[2]

          當(dāng)在上下文中需要一個(gè)無(wú)類(lèi)型常量帶類(lèi)型的值時(shí),會(huì)進(jìn)行隱式轉(zhuǎn)換(或使用默認(rèn)類(lèi)型)。本題中,abc 是 rune 字面量(rune 是 int32 的別名),但被當(dāng)做了 int 數(shù)組的下標(biāo)或索引([...]int 這是數(shù)組的一種語(yǔ)法,數(shù)組長(zhǎng)度編譯時(shí)推斷出來(lái)的)。語(yǔ)言規(guī)范中關(guān)于索引表達(dá)式有這么一句話:

          a constant index that is untyped is given type int

          以下示例有助于你理解這個(gè)這道題:

          // 這樣正常
          const r = 'a'
          var a int = r
          // 這樣不能編譯
          const r rune = 'a'
          var a int = r

          而我們知曉 c 的 ASCII 碼是 99,這道題相當(dāng)于這樣:

          package main

          import (
           "fmt"
          )

          func main() {
           m := [...]int{
            971,
            982,
            993,
           }
           m[97] = 3
           fmt.Println(len(m))
          }

          很顯然長(zhǎng)度是 100。


          不要在乎題目是不是變態(tài),而是希望能夠通過(guò)題目掌握一兩個(gè)知識(shí)點(diǎn)。

          參考資料

          [1]

          rune constant: https://docs.studygolang.com/ref/spec#Constants

          [2]

          常量表達(dá)式這個(gè)規(guī)則應(yīng)該了解下: https://polarisxu.studygolang.com/posts/go/action/weekly-question-94/




          往期推薦


          我是 polarisxu,北大碩士畢業(yè),曾在 360 等知名互聯(lián)網(wǎng)公司工作,10多年技術(shù)研發(fā)與架構(gòu)經(jīng)驗(yàn)!2012 年接觸 Go 語(yǔ)言并創(chuàng)建了 Go 語(yǔ)言中文網(wǎng)!著有《Go語(yǔ)言編程之旅》、開(kāi)源圖書(shū)《Go語(yǔ)言標(biāo)準(zhǔn)庫(kù)》等。


          堅(jiān)持輸出技術(shù)(包括 Go、Rust 等技術(shù))、職場(chǎng)心得和創(chuàng)業(yè)感悟!歡迎關(guān)注「polarisxu」一起成長(zhǎng)!也歡迎加我微信好友交流:gopherstudio


          瀏覽 116
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧洲亚洲蜜桃 | 亚洲欧美视频免费观看 | 91磨菇视频免费两分钟 | 操逼视频网站大全 | 小早怜子一区二区三区 |