当前位置:网站首页>go 语言指针,值引用和指针引用
go 语言指针,值引用和指针引用
2022-06-24 19:44:00 【fenglllle】
前言
最近做项目,开发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是面向接口,鸭子类型。即相同的行为就认为是一类。
总结
实际上很多语音都有借鉴,有时候设计殊途同归,典型的就是算法,任何语言,算法结果是相同的。&取地址,*表示指针的值

边栏推荐
- Jetpack Compose 最新进展
- Financial management [4]
- Installation and deployment of ganglia
- 记录一下MySql update会锁定哪些范围的数据
- Blogs personal blog test point (manual test)
- Gocolly manual
- Selection (028) - what is the output of the following code?
- Financial management [1]
- Websocket long link pressure test
- 还在用 SimpleDateFormat 做时间格式化?小心项目崩掉
猜你喜欢

【基础知识】~ 半加器 & 全加器

idea创建模块提示已存在

From client to server

【UVM入门 ===> Episode_8 】~ Sequence 和 Sequencer、Sequence 层次化
![[JS] - [linked list - application] - learning notes](/img/e1/76d2a347b05212de349322f43e0b3a.png)
[JS] - [linked list - application] - learning notes

Main cause of EMI - mold current

安装IBM CPLEX学术版 academic edition | conda 安装 CPLEX

【js】-【数组、栈、队列、链表基础】-笔记

斐波那契

Harmonyos accessing database instances (3) -- use ORM bee to test how good harmonyos is
随机推荐
Accounting standards for business enterprises application [5]
. Net 7 Preview 1 has been officially released
[JS] - [string - application] - learning notes
Paddledtx v1.0 has been released, and its security and flexibility have been comprehensively improved!
378. 骑士放置
二分查找数组下标
RT thread uses RT kprintf
golang convert map to json string
华为机器学习服务语音识别功能,让应用绘“声”绘色
Use of laravel verifier
379. 捉迷藏
7-7 求解众数问题
SQL -convert function
Simpledateformat concrete classes for formatting and parsing dates
Huawei machine learning service speech recognition function enables applications to paint "sound" and color
Pseudo original intelligent rewriting API Baidu - good collection
7-2 后序+中序序列构造二叉树
376. Tâches mécaniques
Whereabouts computer desktop small arrow
golang map clear