Golang Go语言中的类型转换

Golang Go语言中的类型转换

接触 golang 不久,感觉这个语法用起来跟其他语言相比麻烦不少。。。。

使用 sync.map 存储 slice 切片的数据,代码如下

curSliceI, ok := syncMap.Load(curKey)

curSlice:= curSliceI.([]int)

curSlice:= append(curSlice, curId)

golang 官方 sync.map 的 Load 方法返回的是两个参数,curSliceI 是 interface 类型,ok 是 bool 类型代表是否成功

这样的话还要多写一行来做类型转换来拿到 value,有没有啥方法可以简写成一行直接拿值,做类型转换的。。。。

而且这个 interface 类型的 curSliceI, 如果为空的话,做类型转换还会 panic 报错,还要像下面这样来再

做一次判断,有没有啥简便的写法么?

curSlice, ok := curSliceI.([]int)
if !ok {
   fmt.Println("It's not ok for type")
   return
}

更多关于Golang Go语言中的类型转换的实战教程也可以访问 https://www.itying.com/category-94-b0.html

11 回复

因为没有泛型,没有通用容器,后面加上泛型就不会再自己转换了

更多关于Golang Go语言中的类型转换的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


看了下泛型的意义写的还挺好的 https://www.jianshu.com/p/5179ede4c4cf ,

现在 go 是用 interface 这种非侵入式的方式,还是需要手动去转换类型,对于习惯了其他语言的人估计一时有点难以适应。。。

不过听说 go2 泛型要出来了

没有,要不你写一个函数封装一下?

没有泛型,现在只能用 interface 这个,通过强转来搞

感觉用 map + RWMutex 方便点,不需要做 type assert

从来没用过这个 syncMap,使用场景是啥 (⊙ˍ⊙)

普通 map 在多线程同时读写时会报错,只读没事

噢,感谢解答,,不够我个人连 map 好像都很少用 ( ̄ m  ̄)

建议还是 map 加锁吧,syncMap 这种黑科技用起来麻烦性能也不如自己加锁

在Golang(Go语言)中,类型转换是一个常见的操作,用于在不同类型之间转换变量的值。Go语言是一种强类型语言,因此类型转换需要显式地进行,不能自动完成。

类型转换的基本语法是使用目标类型名称(以括号包围)作为转换函数,将变量作为参数传递给这个函数。例如,将整数类型int转换为浮点类型float64,可以使用如下代码:

var i int = 42
var f float64 = float64(i)

这里,float64(i)就是将int类型的变量i转换为float64类型。

需要注意的是,不是所有的类型转换都是安全的。例如,将较大的整数类型转换为较小的整数类型可能会导致数据溢出,而将浮点数转换为整数则会丢失小数部分。因此,在进行类型转换时,开发者需要谨慎处理,确保转换是合理且安全的。

此外,Go语言还提供了字符串与其他类型之间的转换,但通常需要借助fmtstrconv等标准库包中的函数来实现。例如,将整数转换为字符串可以使用fmt.Sprintfstrconv.Itoa函数,而将字符串转换为整数则可以使用strconv.Atoi函数。

总之,在Go语言中,类型转换是一个强大且灵活的功能,但也需要开发者在使用时保持谨慎,以避免潜在的错误和问题。

回到顶部