官术网_书友最值得收藏!

2.1.3 空白標識符

在Go語言中還定義了一些特殊標識符,在安裝目錄doc文件夾的go_spec.html文件中能找到相應說明,如圖2-3所示。

圖2-3 預定義標識符

官方文檔將標識符分為4種類型,分別是空白標識符(Blank identifier)、預聲明標識符(Pre declared identifiers)、導出標識符(Exported identifiers)和唯一標識符(Uniqueness of identifiers)。

空白標識符僅由下劃線(_)表示,作為匿名占位符,因為Go語言定義變量且不被使用的時候,程序會提示異常,對于不被使用且存在的變量,可以使用空白標識符表示,并且能減少內存空間開支,一般用于3種場合,具體說明如下:

1)導入某個包,只執行包的初始化函數init(),不調用包的任何變量或函數,使用import _ XXX可以避免編譯錯誤。

2)函數設有多個返回值,但程序中只使用一個返回值,不被使用的返回值可以使用空白標識符表示。

3)類型斷言,判斷某個類型是否實現了接口,否則編譯出錯。

根據上述3種應用場合,在chapter2.1.3.go文件中分別使用代碼加以說明,代碼如下:

    package main
    // 場合一
    // 只使用net/http/pprof的初始化函數init()
    import (
        "fmt"
        _ "net/http/pprof"
    )
    
    func myfunc() (int, string){
        // 自定義函數,設置兩個返回值
        a := 10
        b := "golang"
        return a, b
    }
    
    type Foo interface {
        // 定義接口
        Say()
    }
    type Dog struct {
        // 定義結構體
        name string
    }
    func (d Dog) Say() {
        // 結構體實現接口Foo的使用
        fmt.Println(d.name + " say hi")
    }
    
    func main(){
        // 場合二
        // 調用函數myfunc()并只獲取第一個返回值
        a, _ := myfunc()
        fmt.Printf("只獲取函數myfunc的第一個返回值%d:\n", a)
    
        // 場合三
        // 判斷結構體Dog是否實現接口Foo的使用
        // 等同于判定有沒有定義func (d Dog) Say(){}
        // 用作類型斷言,如果Dog沒有實現Foo,則會報編譯錯誤
        var _ Foo = Dog{"black dog"}
    }
主站蜘蛛池模板: 电白县| 轮台县| 大田县| 孝昌县| 万载县| 惠水县| 安平县| 武穴市| 越西县| 兰州市| 白河县| 称多县| 云梦县| 昌黎县| 比如县| 绥宁县| 锦州市| 汝阳县| 兴海县| 定兴县| 溧阳市| 巴东县| 湄潭县| 鲁甸县| 沈丘县| 株洲市| 武清区| 石柱| 嘉禾县| 通辽市| 茂名市| 宜黄县| 黑龙江省| 甘德县| 开化县| 南平市| 凤凰县| 满洲里市| 华阴市| 灵台县| 石狮市|