go语言中不可以寻址的值有哪些

不可以寻址,指的是不能通过&获得其地址。 

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

具体为:

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中哪些值是不可以寻址的的详细内容,更多请关注北单博客其它相关文章!

原创文章,作者:ICPGI,如若转载,请注明出处:https://www.beidanyezhu.com/a/26315.html

(0)
ICPGI的头像ICPGI
上一篇 2025-01-02
下一篇 2025-01-02

相关推荐

  • go语言有哪些优点

    go语言的优点:1、可直接编译成机器码,不依赖其他库;2、静态类型语言,但是有动态语言的感觉,写起来的效率很高;3、语言层面支持并发;4、内置runtime,支持垃圾回收;5、简单…

  • go语言中make和new有哪些区别

    区别:在go语言中,make和new都是内存的分配(堆上),但是make只用于slice、map以及channel的初始化(非零值);而new用于类型的内存分配,并且内存置为零。m…

  • go语言的开发工具有哪些

    go语言开发工具:Gogland、Eclipse、LiteIDE、KomodoIDE、Atom、Brackets、Visual Studio Code、Cloud9、CodeEnv…

  • go语言和python有哪些区别

    区别:1、Python是一种基于面向对象编程的多范式,命令式和函数式编程语言;Go是一种基于并发编程范式的过程编程语言。2、Python是动态类型语言,Go是静态类型语言。3、Py…

  • go语言和Java语言有哪些区别

    区别:1、Go不允许函数重载,必须具有方法和函数的唯一名称;java允许函数重载。2、Java默认允许多态,Go没有。3、Go代码可以自动扩展到多个核心;而Java并不总是具有足够…

  • Go语言有哪些优势

    Go语言有优势:1、学习曲线容易;2、开发效率和运行效率高;3、Go语言可以说是开发效率和运行效率二者的完美融合,天生的并发编程支持;4、Go语言拥有强大的编译检查、严格的编码规范…

    2025-01-05
  • go语言是不是开源的

    go是开源语言。Go也称为Golang,是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的开源编程语言,它能让构造简单、可靠且高效的软件变得容易 Go也称为G…

  • go语言如何实现string转float

    go语言实现string转float的方法:首先创建一个go示例文件;然后定义一个字符串;最后通过“v1, err:=strconv.ParseFloat(v, 32)”方式将st…

  • go语言导包时“.”和“_”有什么区别

    区别:“_”操作其实只是引入该包;使用“_”操作引用包是无法通过包名来调用包中的导出函数,而是只是为了简单的调用其init()函数。“.”操作的含义就是这个包导入之后在你调用这个包…

    2025-01-05
  • go语言中run与build命令有哪些区别

    区别:“go run”命令可以编译并直接运行程序,但不会产生exe文件,运行速度也相应较慢;“go build”命令用于测试编译包,主要检查是否会有编译错误,会产生exe文件,运行…

    2025-01-05

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

分享本页
返回顶部