当前位置: 首页 > news >正文

为什么go语言中返回的指针类型,不需要用*取值(解引用),就可以直接赋值呢?

Go 中返回的是指针,但你却能直接用“.”访问字段,看起来像是“没有解引用”,其实是 Go 帮你自动处理了“指针解引用”的语法糖。

在 Go 中,如果你有一个结构体指针(例如 *FileMeta),你可以直接用 p.Field 的方式访问字段,Go 会自动帮你做 (*p).Field 的转换。

🧠 背后原理:自动解引用(auto dereferencing)

type FileMeta struct {FileName string
}var f = &FileMeta{FileName: "test"}
fmt.Println(f.FileName)  // ✅ 等价于 fmt.Println((*f).FileName)

Go 编译器会自动将指针字段访问 f.Field 翻译为 (*f).Field,这叫做“自动解引用”,是 Go 语言为了简化语法做的语法糖处理。

❓ 那什么时候需要 * 解引用?
你只在需要整个值而不是字段的时候才需要手动解引用,例如赋值、拷贝等:

p := &Person{Name: "Alice"}
val := *p  // 拷贝整个结构体
fmt.Println(val.Name)

今天在写代码的时候发现的很奇妙的go特性:go不需要手动解引用,可以直接.field取值

func GetFileInfo(fileSha1 string) (*fileInfo, bool) {stmt, err := mydb.DBconn().Prepare("select file_sha1,file_addr,file_name,file_size from tbl_file " +"where file_sha1=? and status=1 limit 1")if err != nil {fmt.Println(err)return &fileInfo{}, false}defer stmt.Close()fileInfo := fileInfo{}//var fileInfo fileInfoerr = stmt.QueryRow(fileSha1).Scan(&fileInfo.FileSha1, &fileInfo.Location, &fileInfo.FileName, &fileInfo.FileSize)if err != nil {fmt.Println("查询失败!" + err.Error())return &fileInfo, false}return &fileInfo, true
}
func GetFileMetaDB(filehash string) (*FileMeta, bool) {fileInfo, ok := db.GetFileInfo(filehash)if !ok {return &FileMeta{}, false}filemetaDB := FileMeta{FileSha1: fileInfo.FileSha1,FileSize: fileInfo.FileSize.Int64,Location: fileInfo.Location.String,FileName: fileInfo.FileName.String,}return &filemetaDB, true
}

相关文章:

  • Python调用SQLite及pandas相关API详解
  • Profibus DP主站转Modbus RTU/TCP网关接艾默生流量计与上位机通讯
  • ajax提交form表单数据举例
  • Ubuntu24.04编译ORB_SLAM的一系列报错解决
  • LeetCode 热题 100 105. 从前序与中序遍历序列构造二叉树
  • 季报中的FPGA行业:U型反转,春江水暖
  • Cursor 0.5版本发布,新功能介绍
  • SQL看最多的数据,但想从小到大排列看趋势
  • 家庭宽带的内网穿透实践
  • PyQt5完整指南:从入门到实践
  • 三维CAD皇冠CAD(CrownCAD)建模教程:工程图模块二
  • QT+opencv实现卡尺工具找圆、拟合圆
  • 虚幻引擎5-Unreal Engine笔记之Qt与UE中的Meta和Property
  • uniapp -- 验证码倒计时按钮组件
  • 【starrocks】StarRocks 常见 HTTP 操作与导入错误排查指南
  • 使用Qt操作SQLite数据库
  • 《Effective Python》第2章 字符串和切片操作——Python 字符串格式化的现代选择f-strings
  • 使用Thrust库实现异步操作与回调函数
  • 一篇解决Redis:持久化机制
  • 从入门到精通:阿里云/腾讯云服务器深度优化实践
  • 以军向也门3个港口的居民发布撤离令
  • 支持企业增强战略敏捷更好发展,上海市领导密集走访外贸外资企业
  • 山东鄄城发生一起交通事故,造成4人死亡、2人受伤
  • 全国汽车以旧换新补贴申请量突破1000万份
  • 影子调查丨三名“淘金客”殒命雪峰山:千余废弃金矿洞的监管难题
  • 央行等印发《关于金融支持广州南沙深化面向世界的粤港澳全面合作的意见》