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


本文摘自php中文网,作者(*-*)浩,侵删。

不可以寻址,指的是不能通过&获得其地址。 (推荐学习:go)

golang中不能寻址的可以总结为:不可变的,临时结果和不安全的。只要符合其中任何一个条件,它就是不可以寻址的。

具体为:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

package main   

type Named interface {   

    // Name 用于获取名字。   

    Name() string   

}   

type Dog struct {   

    name string   

}   

func (dog *Dog) SetName(name string) {   

    dog.name = name   

}   

func (dog Dog) Name() string {   

    return dog.name   

}   

func main() {   

    // 示例1。   

    const num = 123   

    //_ = &num // 常量不可寻址。   

    //_ = &(123) // 基本类型值的字面量不可寻址。   

    var str = "abc"   

    _ = str   

    //_ = &(str[0]) // 对字符串变量的索引结果值不可寻址。   

    //_ = &(str[0:2]) // 对字符串变量的切片结果值不可寻址。   

    str2 := str[0]   

    _ = &str2 // 但这样的寻址就是合法的。   

    //_ = &(123 + 456) // 算术操作的结果值不可寻址。   

    num2 := 456   

    _ = num2   

    //_ = &(num + num2) // 算术操作的结果值不可寻址。   

    //_ = &([3]int{1, 2, 3}[0]) // 对数组字面量的索引结果值不可寻址。   

    //_ = &([3]int{1, 2, 3}[0:2]) // 对数组字面量的切片结果值不可寻址。   

    _ = &([]int{1, 2, 3}[0]) // 对切片字面量的索引结果值却是可寻址的。   

    //_ = &([]int{1, 2, 3}[0:2]) // 对切片字面量的切片结果值不可寻址。   

    //_ = &(map[int]string{1: "a"}[0]) // 对字典字面量的索引结果值不可寻址。   

    var map1 = map[int]string{1: "a", 2: "b", 3: "c"}   

    _ = map1   

    //_ = &(map1[2]) // 对字典变量的索引结果值不可寻址。   

    //_ = &(func(x, y int) int {   

    //  return x + y   

    //}) // 字面量代表的函数不可寻址。   

    //_ = &(fmt.Sprintf) // 标识符代表的函数不可寻址。   

    //_ = &(fmt.Sprintln("abc")) // 对函数的调用结果值不可寻址。   

    dog := Dog{"little pig"}   

    _ = dog   

    //_ = &(dog.Name) // 标识符代表的函数不可寻址。   

    //_ = &(dog.Name()) // 对方法的调用结果值不可寻址。   

    //_ = &(Dog{"little pig"}.name) // 结构体字面量的字段不可寻址。   

    //_ = &(interface{}(dog)) // 类型转换表达式的结果值不可寻址。   

    dogI := interface{}(dog)   

    _ = dogI   

    //_ = &(dogI.(Named)) // 类型断言表达式的结果值不可寻址。   

    named := dogI.(Named)   

    _ = named   

    //_ = &(named.(Dog)) // 类型断言表达式的结果值不可寻址。   

    var chan1 = make(chan int, 1)   

    chan1 <- 1   

    //_ = &(<-chan1) // 接收表达式的结果值不可寻址。   

}

以上就是Golang中哪些值是不可以寻址的的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

golang cgo是什么

golang 协程并发编程

chaos-mesh on mips64

我为何从php 加入到 go 的潮流!

rabbitmq 入门 (go) - 1. 简介和安装

golang base64字符串的编码和解码

golang 创建型设计模式 建造者模式

[go] go语言实战-基于websocket浏览器通知的实现

go语言简介

手撸golang go与微服务 chatserver之2

更多相关阅读请进入《golang》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...