go
go
谜底666
我迷恋的时光自天空倾倒
展开
-
golang的并发读写问题
答案:有问题,可能会导致竞态条件和不确定的行为,这是因为每个字符串是不可变的,每次对字符串的修改实际上都会创建一个新的字符串,如果多个goroutinue同时修改同一个字符串,可能会导致不同的goroutine使用不同的版本,从而会引发错误或产生不一致的结果。答案:因为map变量为指针类型,并发写时,多个协程同时操作一个内存,类似于多线程操作同一个资源会发生竞争关系,共享资源会遭到破坏,因此golang出于安全的考虑,抛出错误;答案:没问题,字符串是不可变的,在并发读的时候是安全的。原创 2023-07-03 21:33:26 · 419 阅读 · 0 评论 -
golang 使用 JSON unmarshal() 序列化 int 被转成 float64 类型
根据JSON规范,数字可以表示为整数或浮点数,而Go语言中的float64类型可以容纳JSON中的所有数字范围。为了支持更广泛的数字类型,Go的JSON解析器默认将JSON中的数字解析为float64类型。在Go语言中,使用json.Unmarshal()函数将JSON数据反序列化为Go结构时,整数(int)类型可能会被转换为float64类型的原因是JSON中的数字默认为浮点数。因此可以使用cast.ToInt()再转成int。原创 2023-06-15 10:33:23 · 1592 阅读 · 0 评论 -
golang map使用踩坑
可以看到没有生效,理解起来应该是遍历的时候进行了值拷贝;那么如果要修改应该怎么处理呢?可以看到相当于引用传递;可以看到这样能够实现。原创 2023-04-27 16:57:36 · 220 阅读 · 0 评论 -
golang中如何实现类似于PHP的in_array
【代码】golang中如何实现类似于PHP的in_array。原创 2023-04-09 09:56:15 · 228 阅读 · 0 评论 -
golang接口
(interface)是一组仅包含的未具体实现的方法的集合。接口只定义规范而不去实现,细节由具体的对象来实现。golang中接口是一种抽象的类型。(注:接口与方法是绑定的)分析:1、使用值接收实现接口后,不管是值类型的 dog 结构体还是指针类型的 *dog 都可以赋值给该接口变量。2、使用指针接收实现接口后,只能将指针类型的 *cat 赋值给该接口变量,而值类型的 cat 不能赋值。原创 2023-04-09 09:28:21 · 62 阅读 · 0 评论 -
golang方法详解
1.值方法的接收者是该方法所属的那个类型值的一个副本。我们在该方法内对该副本的修改一般都不会体现在原值上,除非这个类型本身是某个引用类型(比如切片或字典)的别名类型。2.指针方法的接收者,是该方法所属的那个基本类型值的指针值的一个副本。我们在这样的方法内对该副本指向的值进行修改,一定会体现在原值上。2.使用指针类型可以避免在每次调用方法时复制该值,如果值的类型为大型结构体时,会更加高效。1.使用指针类型能够修改调用者的值。原创 2023-04-09 09:02:04 · 76 阅读 · 0 评论 -
golang指针相关
make也是用于内存分配的,区别于new,它只用于slice、map以及chan的内存创建,而且它返回的类型就是这三个类型本身,而不是他们的指针类型,因为这三种类型就是引用类型,所以就没有必要返回他们的指针了。比如现在有一句话:『谜底666』,这句话在程序中一启动,就要加载到内存中,假如内存地址0x123456,然后我们可以将这句话复制给变量A,这句话的地址复制给变量B,首先变量B就是一个指针变量。PS:地址是干嘛的:每个变量在运行是都有一个地址,这个地址代表该变量在内存中的位置。& 运算符:用于取地址。原创 2023-04-08 21:30:51 · 459 阅读 · 0 评论 -
golang数组(切片)转字符串
背景:在请求第三方服务的时候,比如对方返回的是一个类似的[]map[string]interface{}之类的结构,需要for循环遍历得到其中每个map的key,并将其append到一个切片中(比如是用户id);然后想把这些id set到redis中,存一个字符串。PHP中可以很方便这样:而go中没有类似的函数,第一种就是for循环处理这个切片,手动拼接成一个逗号分割的字符串;第二种就是先jsoniter.MarshalToString一下,就可以了原创 2022-11-12 09:27:44 · 1428 阅读 · 0 评论 -
golang判断返回值并映射到map
请求第三方服务,对方返回来某个字段,比如叫type,值为从1-9中的某个数字;我在这边接到这个返回值后,需要将1-5分别映射成某个字符串返回给前端,其余的数字都返回空。最惨不忍睹的方法就是判断,if这个值等于几,返回啥啥啥;最后的else返回空;用这个is-ok模式来判断。原创 2022-11-12 09:02:44 · 321 阅读 · 0 评论 -
golang中数组嵌套如何定义
【代码】golang中数组嵌套如何定义。原创 2022-11-02 22:28:51 · 443 阅读 · 0 评论 -
golang中如何接返回结果
【代码】golang中如何接返回结果。原创 2022-11-02 20:33:07 · 539 阅读 · 0 评论 -
golang1.18与jsoniter兼容问题
开发的过程中,团队某个代码库使用了golang1.18的any特性,因此跟着将go升级到了1.18版本,开发的过程中遇到了以下问题。该代码在运行时直接报错,将第一行改成原始的json.Marshal就没问题。升级后就可以解决这个问题,或者用原始的""encoding/json。原创 2022-10-30 17:51:37 · 476 阅读 · 0 评论 -
golang 使用switch对interface进行类型断言
【代码】golang 使用switch对interface进行类型断言。原创 2022-10-15 18:35:10 · 212 阅读 · 0 评论 -
golang关于channel
有缓冲channel在没有接收方的时候,如果缓冲区未满,则发送方并不会阻塞。无缓冲的channel是同步的,而有缓冲的channel是非同步的。无缓冲channel在没有接收方的时候,发送方会阻塞。原创 2022-07-26 23:07:18 · 175 阅读 · 0 评论 -
golang常用三方库与使用技巧整理
JSON相关1.官方默认的是encoding/json,可以在自己线下的代码里用这个,但性能一般,仅临时用一下;2.建议用"github.com/json-iterator/go"3.在PHP中主要是json_encode和json_decode那些;类型转换相关github.com/spf13/cast就是在类型转换的时候用这个,贴一个有用的博客:case...原创 2022-04-16 16:04:31 · 1220 阅读 · 0 评论 -
vscode安装go的插件失败
设置$ go env -w GO111MODULE=on$ go env -w GOPROXY=https://goproxy.cn,direct然后打开vscode,看右下角的安装,就能安装成功原创 2021-02-09 11:41:20 · 825 阅读 · 0 评论