一架梯子,一头程序猿,仰望星空!
Golang初级特性面试题 > 内容正文

Go 中哪些是可寻址,哪些是不可寻址的?


问题简答

Go语言中,常量、字面量、函数、map中的元素都是不可寻址的。

问题详解:

Golang中可直接使用 & 操作符取地址的对象,就是可寻址的(Addressable)。

func main() {
    site := "tizi365.com"
    fmt.Println(&site)
    // 输出: 0xc000010001
}

程序运行不会报错,说明 site 这个变量是可寻址的。

Go语言中,常量、字面量、函数、map中的元素都是不可寻址的,否则会直接报错,下面例子都是错误的。

常量例子:

import "fmt"

const VERSION  = "1.0"

func main() {
    fmt.Println(&VERSION)
}

函数例子:

func getStr() string {
    return "iswbm"
}
func main() {
    fmt.Println(&getStr)
    // cannot take the address of getStr
}

map 中的元素:

func main() {
    p := map[string]string {
        "name": "tizi365",
    }

    fmt.Println(&p["name"])
    // cannot take the address of p["name"]
}