golang取地址操作采坑:for idx,item := range arr中的item是个独立对象
2024-09-01 01:32:45
先看代码:
package main
import "fmt"
func main() {
type s struct {
A string
B int32
}
arr := []s{
{"123", 123},
{"456", 456},
{"789", 789},
}
m := make(map[string]*s)
for idx, item := range arr {
m[item.A] = &item
fmt.Printf("idx=%d, addr=%p, item addr=%p\n", idx, &arr[idx], &item)
}
for k, v := range m {
fmt.Printf("key=%s, v=%+v\n", k, v)
}
}
运行输出:
idx=0, addr=0xc00004e050, item addr=0xc0000044a0
idx=1, addr=0xc00004e068, item addr=0xc0000044a0
idx=2, addr=0xc00004e080, item addr=0xc0000044a0
key=123, v=&{A:789 B:789}
key=456, v=&{A:789 B:789}
key=789, v=&{A:789 B:789}
我傻傻的在循环中取item的地址,结果所有map中的值都指向最后一个!
看来item是一个独立对象,这个对象指向了数组中的对应元素。
是时候静下来认真读《go专家编程》了!
最新文章
- 在DevExpress程序中使用内置的图标构建美观的界面元素
- Android之Linearlayouy线性布局
- Office密码破解工具最好用的是哪款
- Azure 数据库中文乱码的问题
- import_site
- HDU 2609 最小表示法
- Centos 安装 Java
- MVC中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别
- 编译时:virtual memory exhausted: Cannot allocate memory
- C# 字符串的截取和替换
- startActivityForResult用法详解
- mysql数据库创建database(实例),和用户,并授权
- angular 服务
- 打开U盘后文件都不见了的解决方法
- Android中界面实现全屏显示的两种方式
- hadoop 2.0--YARN
- 深入浅出Node.js (3) - 异步I/O
- LVS+Keepalived实现mysql的负载均衡
- jquery中 after append appendTo 的区别
- Freemarker 页面静态化技术使用入门案例
热门文章
- Sentry 开发者贡献指南 - SDK 开发(性能监控)
- tomcat startup.bat 启动中文显示乱码
- JAVA上传文件到FTP上
- 【LeetCode】962. Maximum Width Ramp 解题报告(Python)
- 1025 - The Specials Menu
- 1054 - Efficient Pseudo Code
- Certified Adversarial Robustness via Randomized Smoothing
- vue使用v-chart图表出现的问题
- 【jvm】02-手写自己的类加载器
- 编写Java程序,实现客户端向服务端上传文件的功能