<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 11.4 類型判斷:type-switch 接口變量的類型也可以使用一種特殊形式的 `swtich` 來檢測:**type-swtich** (下面是示例 11.4 的第二部分): ``` switch t := areaIntf.(type) { case *Square: fmt.Printf("Type Square %T with value %v\n", t, t) case *Circle: fmt.Printf("Type Circle %T with value %v\n", t, t) case nil: fmt.Printf("nil value: nothing to check?\n") default: fmt.Printf("Unexpected type %T\n", t) } ``` 輸出: ``` Type Square *main.Square with value &{5} ``` 變量 `t` 得到了 `areaIntf` 的值和類型, 所有 `case` 語句中列舉的類型(`nil` 除外)都必須實現對應的接口(在上例中即 `Shaper`),如果被檢測類型沒有在 `case` 語句列舉的類型中,就會執行 `default` 語句。 可以用 `type-switch` 進行運行時類型分析,但是在 `type-switch` 不允許有 `fallthrough` 。 如果僅僅是測試變量的類型,不用它的值,那么就可以不需要賦值語句,比如: ``` switch areaIntf.(type) { case *Square: // TODO case *Circle: // TODO ... default: // TODO } ``` 下面的代碼片段展示了一個類型分類函數,它有一個可變長度參數,可以是任意類型的數組,它會根據數組元素的實際類型執行不同的動作: ``` func classifier(items ...interface{}) { for i, x := range items { switch x.(type) { case bool: fmt.Printf("Param #%d is a bool\n", i) case float64: fmt.Printf("Param #%d is a float64\n", i) case int, int64: fmt.Printf("Param #%d is a int\n", i) case nil: fmt.Printf("Param #%d is a nil\n", i) case string: fmt.Printf("Param #%d is a string\n", i) default: fmt.Printf("Param #%d is unknown\n", i) } } } ``` 可以這樣調用此方法:`classifier(13, -14.3, "BELGIUM", complex(1, 2), nil, false)` 。 在處理來自于外部的、類型未知的數據時,比如解析諸如 JSON 或 XML 編碼的數據,類型測試和轉換會非常有用。 在示例 12.17(xml.go)中解析 XML 文檔時,我們就會用到 `type-switch`。 **練習 11.4** simple\_interface2.go: 接著練習 11.1 中的內容,創建第二個類型 `RSimple`,它也實現了接口 `Simpler`,寫一個函數 `fi`,使它可以區分`Simple` 和 `RSimple` 類型的變量。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看