惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

量子位
S
Securelist
MyScale Blog
MyScale Blog
Jina AI
Jina AI
罗磊的独立博客
The Cloudflare Blog
美团技术团队
博客园 - 叶小钗
阮一峰的网络日志
阮一峰的网络日志
博客园 - 三生石上(FineUI控件)
月光博客
月光博客
雷峰网
雷峰网
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
大猫的无限游戏
大猫的无限游戏
博客园 - Franky
博客园 - 聂微东
Y
Y Combinator Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
MongoDB | Blog
MongoDB | Blog
T
Tailwind CSS Blog
Attack and Defense Labs
Attack and Defense Labs
博客园_首页
Latest news
Latest news
Apple Machine Learning Research
Apple Machine Learning Research
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Hacker News
The Hacker News
G
GRAHAM CLULEY
Simon Willison's Weblog
Simon Willison's Weblog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
U
Unit 42
D
Docker
Webroot Blog
Webroot Blog
N
Netflix TechBlog - Medium
T
Tor Project blog
C
Cyber Attacks, Cyber Crime and Cyber Security
L
LINUX DO - 最新话题
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
The Last Watchdog
The Last Watchdog
B
Blog
Recent Announcements
Recent Announcements
GbyAI
GbyAI
Microsoft Azure Blog
Microsoft Azure Blog
Security Latest
Security Latest
V2EX - 技术
V2EX - 技术
N
News | PayPal Newsroom
Microsoft Security Blog
Microsoft Security Blog

崔八由

内网设备被挖矿了 对华宸未来债券基金更名的总结 凸(艹皿艹 ) 推特被封了 第一次装机过程与记录 记录一下今年治牙的过程 预测未来 最终还是投向了obsidian pve lxc容器使用vnpy的问题 扔垃圾的感受 解决macos sierra重新安装时报错-准备安装时发生错误 记录一下使用vercel搭建umami中需要注意的地方 还是不能太依赖自建服务 Android应用在上架Google Play时封闭式测试的一些建议 JVM中的Shallow Size 和 Retained Size解释 acme.sh自动生成泛域名证书的几个坑 老了 pve主机使用smart_ctl监控磁盘信息 tailscale的设置与安装 go中获取某个包下定义的所有变量
go学习笔记之指针
崔八由 · 2024-03-08 · via 崔八由

发表于|更新于|编程go

|浏览量:|

什么是指针

一个变量,指向了另外一个变量的内存地址。

指针变量通常用于引用其他变量的内存地址,以便能够直接访问或修改该变量的值。

指针用法

  • * 声明变量类型为指针;或者使用指针访问变量的值
  • & 指针指向的内存地址, 也是将一个普通变量赋值给一个指针变量的方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package main

import "fmt"

func main() {
var a int= 20
var ip *int

ip = &a

fmt.Printf("a 变量的地址是: %x\n", &a )


fmt.Printf("ip 变量储存的指针地址: %x\n", ip )


fmt.Printf("*ip 变量的值: %d\n", *ip )
}


a 变量的地址是: 20818a220
ip 变量储存的指针地址: 20818a220
*ip 变量的值: 20

什么时候适合用指针

  • 如果需要修改外部变量的值,我们需要使用指针
  • 不需要对map,slice等引用类型使用指针,因为他们本身就是一个指针
  • 如果有超级大的结构体需要作为函数的参数,使用指针可以节省内存开销
  • 因为指针可以修改其指向数据的值,所以最好不要随意在并发场景下使用
  • 最好不要嵌套使用指针,比如b := &a, c := &b,这样代码会比较复杂难懂
  • 对于一些特殊场景,比如接口传参,假如参数类型是布尔类型,因为go中变量必定会存在一个默认值,对于布尔类型是false, 如果不想有默认值,可以将这个参数设置为布尔类型的指针

总结

  • 指针也是变量,只不过存储的是地址
  • 通过指针可以去修改其指向数据的值
  • 指针可以帮助我们在任何地方修改其所指向数据的值
  • 传递指针参数可以节省拷贝大结构体的内存开销