Golang 中哪些值是不可以尋址的

不可以尋址, 指的是不能通過&獲得其地址。
golang中不能尋址的可以總結爲:不可變的,臨時結果和不安全的。只要符合其中任何一個條件,它就是不可以尋址的。

具體爲:
常量的值。
基本類型值的字面量
算術操作的結果值
對各種字面量的索引表達式和切片表達式的結果值:
不過有一個例外,對切片字面量的索引結果值卻是可尋址的。
對字符串變量的索引表達式和切片表達式的結果值。
對字典變量的索引表達式的結果值。
函數字面量和方法字面量,以及對它們的調用表達式的結果值。
結構體字面量的字段值,也就是對結構體字面量的選擇表達式的結果值。
類型轉換表達式的結果值。
類型斷言表達式的結果值。
接收表達式的結果值。

所以,各種變量都是可以尋址的,比如
var e error
var c chan int
var m map[int]int

上述e,c,m都是可以取地址的

package main

import (
	"errors"
	"fmt"
)

func main() {
	var err error
	err2 := &err
	*err2 = errors.New("sssss")
	fmt.Printf("%#v, %#v\n", err, err2)

	c := make(chan int, 0)
	c2 := &c
	fmt.Printf("%#v\n", c2)

	m := make(map[int]int)
	m2 := &m
	fmt.Printf("%#v\n", m2)
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章