关于Go的两个问题

ncubrian 2016-07-17 10:38:51
问题一:gdb调试Go的神奇现象

type Test struct {
i int
}
var t Test = Test{1}
fmt.Printf("%#v\n", t)
fmt.Printf("foo\n")
fmt.Printf("bar\n")

上面代码在用gdb调试的时候,单步执行完fmt.Printf("%#v\n", t)后会直接执行完后面全部的代码,不知什么原因。
系统环境:
OS X EI Capitan
go version go1.5.2 darwin/amd64
GNU gdb (GDB) 7.8.1
This GDB was configured as "x86_64-apple-darwin14.0.0".

问题二:nil接口不是nil

package main

import "fmt"

type MagicError struct{}

func (MagicError) Error() string {
return "[Magic]"
}

func Generate() *MagicError {
return nil
}

func Test() error {
return Generate()
}

func main() {
if Test() != nil {
fmt.Println("Hello, Mr. Pike!")
}
}

上面代码会打印出"Hello, Mr. Pike!",为什么,有没有什么书或资料上面有对这个问题的解释?
...全文
1808 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2016-08-01
  • 打赏
  • 举报
回复
引用 1 楼 cjqpker 的回复:
第二个问题是个经典的坑。 error 是 interface,interface 包含 类型、数据两个字段,一个类型为(*MagicError)的空指针赋给error之后,带有类型(*MagicError)和数据(nil),而只有类型和数据都为nil时,才跟 nil 相等 参考 :http://my.oschina.net/goal/blog/194233
nil 在 Go 中的一词多义其实很麻烦
ncubrian 2016-07-24
  • 打赏
  • 举报
回复
引用 1 楼 cjqpker 的回复:
第二个问题是个经典的坑。 error 是 interface,interface 包含 类型、数据两个字段,一个类型为(*MagicError)的空指针赋给error之后,带有类型(*MagicError)和数据(nil),而只有类型和数据都为nil时,才跟 nil 相等 参考 :http://my.oschina.net/goal/blog/194233
要的就是这个,多谢!
假正经的班长 2016-07-22
  • 打赏
  • 举报
回复
第二个问题是个经典的坑。 error 是 interface,interface 包含 类型、数据两个字段,一个类型为(*MagicError)的空指针赋给error之后,带有类型(*MagicError)和数据(nil),而只有类型和数据都为nil时,才跟 nil 相等 参考 :http://my.oschina.net/goal/blog/194233

2,190

社区成员

发帖
与我相关
我的任务
社区描述
go语言学习与交流版
社区管理员
  • go语言社区
  • Freeman Z
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧