当前第2页 返回上一页
如以下的代码:
1 2 3 | func funcName(a interface {}) string {
return string(a)
}
|
编译器将会返回:
1 | cannot convert a (type interface {}) to type string: need type assertion
|
此时,意味着整个转化的过程需要类型断言。类型断言有以下几种形式:
直接断言使用
1 2 | var a interface {}
fmt.Println( "Where are you,Jonny?" , a.(string))
|
但是如果断言失败一般会导致panic的发生。所以为了防止panic的发生,我们需要在断言前进行一定的判断。
如果断言失败,那么ok的值将会是false,但是如果断言成功ok的值将会是true,同时value将会得到所期待的正确的值。示例:
1 2 3 4 5 6 | value, ok := a.(string)
if !ok {
fmt.Println( "It's not ok for type string" )
return
}
fmt.Println( "The value is " , value)
|
另外也可以配合switch语句进行判断:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | var t interface {}
t = functionOfSomeType()
switch t := t.(type) {
default :
fmt.Printf( "unexpected type %T" , t)
case bool:
fmt.Printf( "boolean %t\n" , t)
case int:
fmt.Printf( "integer %d\n" , t)
case *bool:
fmt.Printf( "pointer to boolean %t\n" , *t)
case *int:
fmt.Printf( "pointer to integer %d\n" , *t)
}
|
另外补充几个go语言编程的小tips:
(1)如果不符合要求可以尽快的return(return as fast as you can),而减少else语句的使用,这样可以更加直观一些。
(2)转换类型的时候如果是string可以不用断言,使用fmt.Sprint()函数可以达到想要的效果。
(3)变量的定义和申明可以用组的方式,如:
1 2 3 4 5 6 7 8 9 10 11 12 | var (
a string
b int
c int64
...
)
import (
"fmt"
"strings"
"net/http"
...
)
|
(4)函数逻辑比较复杂,可以把一些逻辑封装成一个函数,提高可读性。
(5)使用net/http包和net/url包的函数,可能会带有url encode功能,需要注意。
PHP中文网,有大量免费的Golang入门教程,欢迎大家学习!
以上就是golang 断言是什么的详细内容,更多文章请关注木庄网络博客!!
返回前面的内容
相关阅读 >>
多协程通道的应用---三协程通过通道实现abc按顺序输出100次
golang不能隐式转换吗
golang是多线程模式吗?
golang 多版本管理工具 —— gvm | 七日打卡
go语言标准库之context
如何在linux上运行第一个go程序
详解golang中方法的receiver为指针和不为指针的区别
手撸golang go与微服务 net.rpc
golang如何删除文件?
golang实现微信支付v3版本
更多相关阅读请进入《golang》频道 >>
老貘
一个与时俱进的Go编程知识库。
转载请注明出处:木庄网络博客 » golang 断言是什么