golang, interface断言,以下两种写法都正确吗?

func UpFirstLetter(v ...interface{}) string {
    s := v[0].(string)
    return strings.ToUpper(s[0:1]) + s[1:]
}
func UpFirstLetter(v ...interface{}) string {
    s, _ := v[0].(string)
    return strings.ToUpper(s[0:1]) + s[1:]
}

区别在断言成功的判断上,有没有那个“_”都可以吗?

阅读 5k
2 个回答

区别在于:第一个在断言失败时会 panic;而第二个,你忽略了错误,所以你会得到默认值。

实际效果就是:第一个出问题的时候会崩掉;而第二个出问题的时候,你需要彻夜 debug,来弄明白为什么你的数据坏掉了。

可以.

类型断言结果是一个多返回值: typedObj, suc := i.(Type), 第二个返回值 suc 表示类型断言是否成功. 从语法上讲, 第二个返回值可以省略 (_或者不写), 但是在使用中强烈不建议这么做, 因为如果 suc == false, 那么后续代码使用 typedObj 可能导致程序 panic.

Go 是强类型语言, 问题中的代码是有安全隐患的.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题