不可以尋址, 指的是不能通過&獲得其地址。
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)
}