栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

go 语言指针,值引用和指针引用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

go 语言指针,值引用和指针引用

前言

最近做项目,开发go的sdk,其中就涉及接口编程,类似typescript,指针,指针类型。就像C语音一样,指针就涉及指针引用。

在go语言中

*类型      在类型上表示当前类型是指针类型,在变量上表示指针的值

&变量     表示是当前变量的指针

demo

使用结构体模拟:

package main

import "fmt"

type Man struct {
	name string
	age int
}

func sayHello(m Man) string {
	m.name = "not tom"
	return "hello," + m.name
}

func sayHi(m *Man) string {
	m.name = "jim"
	return "hi, " + m.name
}


func main() {
	man := Man{
		name: "tom",
		age: 26,
	}

	fmt.Println(sayHello(man))
	fmt.Println(man.name)
	fmt.Println("---------------------")
	fmt.Println(sayHi(&man))
	fmt.Println(man.name)

}

模拟demo,一个使用结构体参数,一个使用指针参数,结果如下

 

 可以看到使用结构体传递,在函数里面修改的值并不会传递到函数之外,而通过指针类型传递的结构体却可以修改结构体的值。可以说明实际上函数的参数实际上是栈引用的结构体副本,只有修改指针,即内存地址存储的数据结构体的值才会真正修改数据。

如果使用基本数据类型,结果一样,反射的时候就是使用指针设置值,才能修改成功,也是相同的道理。

对比Java语音

(138条消息) Java 变量参数传入方法,修改后是否影响外面的值_fenglllle的博客-CSDN博客

笔者在2018年写了Java语音方法对参数值的修改是否影响外面的值,实际上也是一样的,殊途同归,但是Java语言不能直接操作基础数据类型的指针,只能操作引用对象的指针,从某种程度看,引用对象即是指针,实际上Java也是这样做的,方法执行时,栈的变量指向堆的对象内存地址。

go语言可以直接操作基本数据类型的指针也是很灵活的,这点是Java不具备的,Java需要封装对象才行,可能也是面向对象设计决定的,go是面向接口,鸭子类型。即相同的行为就认为是一类。

总结

实际上很多语音都有借鉴,有时候设计殊途同归,典型的就是算法,任何语言,算法结果是相同的。&取地址,*表示指针的值

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/988020.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号