nil应该是关键字,类似于iota
Sent with AquaMail for Android
http://www.aqua-mail.com
--
--
官网: http://golang-china.org/
IRC: irc.freenode.net #golang-china
@golangchina
---
您收到此邮件是因为您订阅了Google网上论坛中的“Golang-China”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到golang-china...@googlegroups.com。
要在网络上查看此讨论,请访问https://groups.google.com/d/msgid/golang-china/53797D78.6030303%40gmail.com。
要查看更多选项,请访问https://groups.google.com/d/optout。
David
On Sunday, May 18, 2014 8:41:44 PM UTC-7, Damon Chen wrote:
Hi, all:
golang里面的nil把我给搞混了。
作为interface{}可以接受任意类型的值,当然也包括nil。
从上面nil是一个值,是值必然有一个类型,是一个类型,按理说必然应该支持type assertion。
但是go标准明确规定nil是不支持type assertion http://golang.org/ref/spec#Type_assertions
--从规范上,我们可以做出上面的规范,但从语言的一致性上考虑,nil似乎是一个两面派,一方面他是一个值的数据信息,另 一方面他没有值的那个类型 信息。为何go会这么设计?而不是设计为nil.(type assertion)就返回一个false错误信息呢?
从工程实践上,如果我有一个map[string]interface{}的时候,在取出interface{}值 的时候,我不仅仅需要先判断值 是否为nil,然后才可以做type assertion,这可以认为是人为设置了编程的障碍么?
2014-5-19
--
官网: http://golang-china.org/
IRC: irc.freenode.net #golang-china
@golangchina
---
您收到此邮件是因为您订阅了Google网上论坛中的“Golang-China”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到golang-china...@googlegroups.com。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到golang-china+unsubscribe@googlegroups.com。
vl := i.(int) 的写法通常在正常逻辑 i 里面的对象就应该是一个 int 的情况下才使用,如果里面的类型不是 int(nil 是无类型的,自然也不是 int)则会作为非正常状况,从而 panic。
vl, ok := i.(int) 的写法,则是程序逻辑很不确定 i 里面的类型是否为 int,需要实时做判断的情况,此时第一件事情是检查 ok 是否为 true,这就类似于一些语言里面进行 instanceof 的判断一样。
这里 nil 就是一个类型为空内容也为空的取值,在接口的使用上并没有特殊的对待。这在工程上不就是最方便的么?
On Friday, June 6, 2014 7:41:50 PM UTC-7, Damon Chen wrote:
是的,我发现的问题如果这么处理,就异常了
vl := i.(int)
那既然如此,为何不支持这样的返回结果,一定要求有一个ok处理,不是更强壮一些(go是一门工程语言)。
2014-06-07
于 2014/6/7 6:30, David DENG 写道:
David
On Sunday, May 18, 2014 8:41:44 PM UTC-7, Damon Chen wrote:
Hi, all:
golang里面的nil把我给搞混了。
作为interface{}可以接受任意类型的值,当然也包括nil。
从上面nil是一个值,是值必然有一个类型,是一个类型,按理说必然应该支持type assertion。
但是go标准明确规定nil是不支持type assertion http://golang.org/ref/spec#Type_assertions
从规范上,我们可以做出上面的规范,但从语言的一致性上考虑,nil似乎是一个两面派,一方面他 是一个值的数据信息,另 一方面他没有值的那个类型 信息。为何go会这么设计?而不是设计为nil.(type assertion)就返回一个false错误信息呢?
从工程实践上,如果我有一个map[string]interface{}的时候,在取出 interface{}值 的时候,我不仅仅需要先判断值 是否为nil,然后才可以做type assertion,这可以认为是人为设置了编程的障碍么?
2014-5-19
--
--
官网: http://golang-china.org/
IRC: irc.freenode.net #golang-china
@golangchina
---
您收到此邮件是因为您订阅了Google网上论坛中的“Golang-China”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到golang-china+unsubscribe@googlegroups.com。
要在网络上查看此讨论,请访问https://groups.google.com/d/msgid/golang-china/b21a50ac-d01e-48ff-ace3-e42f26623273%40googlegroups.com。
要查看更多选项,请访问https://groups.google.com/d/optout。
--
--
官网: http://golang-china.org/
IRC: irc.freenode.net #golang-china
@golangchina
---
您收到此邮件是因为您订阅了Google网上论坛中的“Golang-China”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到golang-china...@googlegroups.com。
要在网络上查看此讨论,请访问https://groups.google.com/d/msgid/golang-china/06baebf7-5ea0-413b-9ea0-738b3b7a520c%40googlegroups.com。
要查看更多选项,请访问https://groups.google.com/d/optout。
这个正常的逻辑,不知道算什么样的正常逻辑?既然明确是一个int对象,还需要vl := i.(int),不觉得这是一个无聊的操作么?
要在网络上查看此讨论,请访问https://groups.google.com/d/msgid/golang-china/9f3d71e3-18bc-4c17-a674-f76c45b4b506%40googlegroups.com。要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到golang-china...@googlegroups.com。
要查看更多选项,请访问https://groups.google.com/d/optout。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到golang-china+unsubscribe@googlegroups.com。