返回顶部
首页 > 资讯 > 后端开发 > GO >go map value 和 nil 的区别
  • 947
分享到

go map value 和 nil 的区别

2024-04-04 23:04:52 947人浏览 安东尼
摘要

你在学习golang相关的知识吗?本文《Go map value 和 nil 的区别》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不

你在学习golang相关的知识吗?本文《Go map value 和 nil 的区别》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!

问题内容

在go中,当key不存在时,map的值是零值。 我下面有一个简短的代码片段: 演示

package main

import (
    "sync"
)

func main() {
    var mm map[int]sync.Mutex
    var m sync.Mutex
    mm[1].Lock() // not work due to cannot call pointer method on mm[1] and cannot take the address of mm[1]
    m.Lock() // work nORMal
}

上面的mm[1]m有什么区别?我用 reflect 来检查,但看不出它们之间的区别。关于造成差异的原因有任何线索吗?


解决方案


问题不在于映射的零值,而在于方法调用期间的可寻址性。

互斥上的 Lock 方法有一个指针接收器:

func (*mutex) lock

给定变量 msync.mutex,使用指针接收器调用它的方法将自动变成 &m.lock(),根据 spec:

如果 x(的类型)的方法集,则方法调用 x.m() 有效 包含 m 并且参数列表可以赋值给形参列表 米。如果 x 是可寻址的并且 &x 的方法集包含 m,则 x.m() 是 (&x).m() 的简写

其中重要的部分是 addressable 要求。变量 m 是可寻址的,但映射查找的返回值不是可寻址的。这意味着编译器不会尝试调用 &mm[1].lock()

这些可以在您尝试编译示例时返回的错误消息中看到:

./prog.go:11:7: cannot call pointer method on mm[1]
./prog.go:11:7: cannot take the address of mm[1]

今天关于《go map value 和 nil 的区别》的内容介绍就到此结束,如果有什么疑问或者建议,可以在编程网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

您可能感兴趣的文档:

--结束END--

本文标题: go map value 和 nil 的区别

本文链接: https://www.lsjlt.com/news/596238.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • go map value 和 nil 的区别
    你在学习Golang相关的知识吗?本文《go map value 和 nil 的区别》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不...
    99+
    2024-04-04
  • Go中的nil切片和空切片区别详解
    Go语言在声明变量的时候,会自动对变量对应的内存区域进行初始化操作。每个变量会被初始化成其类型的默认值,例如: 整型和浮点型变量的默认值为0。 字符串变量的默认值为空字符串。 ...
    99+
    2022-06-07
    nil GO
  • map 和 flatMap 的区别
    一、map 和 flatMap 对应的源码 ① map方法 Stream map(Function...
    99+
    2023-09-07
    intellij-idea 大数据 java
  • 关于@GetMapping和@GetMapping(value=““)的区别
    目录@GetMapping和@GetMapping(value=““)区别背景问题说明应用Demo初识GetMapping("")使用方法...
    99+
    2024-04-02
  • Android 对Map按key和value分别排序的实例
    一. 理论准备 Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。 TreeMap:基于红黑树(...
    99+
    2022-06-06
    value map 排序 key Android
  • redis和map有哪些区别
    这篇文章将为大家详细讲解有关redis和map有哪些区别,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。缓存的区别缓存分为本地缓存和分布式缓存。以java为例,使用自带的m...
    99+
    2024-04-02
  • 浅析java中Pair和Map的区别
    目录核心java配对实现Pair类AbstractMap.SimpleEntry 和 AbstractMap.SimpleImmutableEntryApache CommonsVa...
    99+
    2024-04-02
  • map, mergeMap和switchMap的区别是什么
    今天小编给大家分享一下map, mergeMap和switchMap的区别是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来...
    99+
    2023-07-02
  • es6的set和map的区别有哪些
    今天小编给大家分享一下es6的set和map的区别有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来...
    99+
    2024-04-02
  • shuffle和map shuffle有什么区别
    这篇文章将为大家详细讲解有关shuffle和map shuffle有什么区别,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。普通shuffle结构图:不同表由不同的map完成,shuffle把条件相等的ke...
    99+
    2023-06-02
  • 基于@RequestParam name和value属性的区别
    目录基于name和value属性的区别RequestParam内部有4个参数@RequestParam,参数是否必须传的问题一、源码展示二、说明2.1 @RequestParam2....
    99+
    2024-04-02
  • es6中filter和map的区别有哪些
    今天小编给大家分享一下es6中filter和map的区别有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们...
    99+
    2024-04-02
  • JavaScript中forEach() 和 map() 的区别是什么
    本篇文章为大家展示了JavaScript中forEach() 和 map() 的区别是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1.返回值forEach()...
    99+
    2024-04-02
  • js中filter和map的区别有哪些
    这篇文章主要介绍js中filter和map的区别有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!JavaScript有什么特点1、js属于一种解释性脚本语言;2、在绝大多数浏览器的支持下,js可以在多种平台下运行...
    99+
    2023-06-14
  • java中Pair和Map的区别有哪些
    这篇文章主要介绍了java中Pair和Map的区别有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在核心Java库中可以使用配对(Pair)的实现。除此之外,某些第三方库...
    99+
    2023-06-14
  • JS中Map、WeakMap和Object的区别解析
    目录JavaScript中的Map、WeakMap和Object都是用于存储键值对的数据结构:下面是Map、WeakMap和Object之间的区别:1. 键的类型:2. 垃圾回收:3...
    99+
    2023-05-16
    js map weakmap和object区别 js weakmap和object区别
  • es6中map和object的区别是什么
    本教程操作环境:windows7系统、ECMAScript 6版、Dell G3电脑。Map和Object的概念Object在ECMAScript中,Object是一个特殊的对象。它本身是一个顶级对象,同时还是一个构造函数,可以通过它(如:...
    99+
    2022-11-22
    ES6
  • ​​​​​​​Rxjs map, mergeMap 和 switchMap 的区别与联系
    目录前言mapmergeMapswitchMap前言 map、mergeMap 和 switchMap 是 RxJS 中的三个主要运算符,在 SAP Spartacus 开发中有着广...
    99+
    2024-04-02
  • es6中map和object的区别有哪些
    本篇内容介绍了“es6中map和object的区别有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!区别:1、Map的键可以是任意值,而O...
    99+
    2023-07-04
  • java map与list的区别
    java map与list的区别Map(映射)Map是一种把键对象和值对象映射的集合,它的每一个元素都包含一个键对象和值对象。 Map主要有以下两个实现类:HashMap:HashMap基于散列表实现,其插入和查询的开销是固定的,可以通过构...
    99+
    2017-06-24
    java基础 java map list
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作