初级会员
  • 第 20890 位会员
  • gopher8
  • 2018-07-28 14:00:16
  • 11
  • Offline
  • 24 16

最近发布的主题

    暂无

最近发布的文章

    暂无

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • 不建议用第二种方法,方法应该返回具体的类型,而不是返回实现了哪个接口,因为返回的值可能实现了多个接口,而且返回的是接口值的话也太笼统了。 对于方法可能出错的情况,应该加一个返回值error,根据跟返回值来判断是否执行成功。
  • 我写的一个demo ```go package main import "fmt" type Person interface { getName() string } type User struct { Name string Age int } func (u User) getName() string { return u.Name } var p Person var ok bool = true func main() { fmt.Println(p, p == nil) // 坑 p = newUser() fmt.Println(p, p == nil) // 方法一,先判断,再赋值 u := newUser() fmt.Printf("%v %#v %T\n", u, u, u) fmt.Println(u == nil) if u != nil { p = u fmt.Println(p, p == nil) } // 方法二,返回接口类型 p = newUser2() fmt.Println(p, p == nil) } func newUser() *User { if !ok { return nil } return &User{} } func newUser2() Person { if !ok { return nil } return &User{} } ``` 输出结果是 ```go <nil> true &{ 0} false &{ 0} &main.User{Name:"", Age:0} *main.User false &{ 0} false &{ 0} false ```