golang强制类型转换和类型断言
1.强制类型转换
golang是强类型语言,但是和c++,Java不太一样的是,go中没有隐式类型转换,go中的类型转换只有:强制类型转换和断言
在java中:
public static void main(String[] args){ int a = 1; double b = 1.0; System.out.println(a * b); }
在java中这样是没有问题,编译器隐式的把a向上转为double
类型
但是在go中是会报错的:
需要进行强制类型转换:
func Test() { var a int = 1 var b float32 = 1.0 fmt.Println(float32(a) * b) }
go中的强制类型转换为:
type(v)
普通变量类型int
,float
,string
都可以使用 type (a)
这种形式来进行强制类型转换,
比如:
var a int32 = 10 var b int64 = int64(a) var c float32 = 12.3 var d float64 =float64(c)
指针的强制类型转换需要用到unsafe
包中的函数实现
func Test() { var a int =10 var b *int =&a var c *int64 = (*int64)(unsafe.Pointer(b)) fmt.Println(*c) }
2.类型断言
go中的类型判断则是判断一个变量是否属于某一种类型
func Test() { var a interface{} = 10 _,isInt := a.(int) // 进行类型的断言的变量必须是空接口 if isInt{ fmt.Println(a) } }
形式如下:
interface{}.(type)
到此这篇关于golang强制类型转换和类型断言的文章就介绍到这了,更多相关golang类型转换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Golang微服务框架Kratos实现分布式任务队列Asynq的方法详解
任务队列(Task Queue) 一般用于跨线程或跨计算机分配工作的一种机制,在Golang语言里面,我们有像Asynq和Machinery这样的类似于Celery的分布式任务队列,本文就给大家详细介绍一下Golang微服务框架Kratos实现分布式任务队列Asynq的方法,需要的朋友可以参考下2023-09-09Go语言同步与异步执行多个任务封装详解(Runner和RunnerAsync)
这篇文章主要给大家介绍了关于Go语言同步与异步执行多个任务封装(Runner和RunnerAsync)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。2018-01-01
最新评论