majianyu
12/8/2018 - 7:47 AM

interface

通过考虑数据类型之间的相同功能来创建抽象,而不是相同字段

  • interface{} 的值不是任意类型,而是 interface{} 类型
  • 接口包含两个字的大小,类似于 (type, value)
  • 函数可以接受 interface{} 作为参数,但最好不要返回 interface{}
  • 指针类型可以调用其所指向的值的方法,反过来不可以
  • 函数中的参数甚至接受者都是通过值传递
  • 一个接口的值就是就是接口而已,跟指针没什么关系
  • 如果你想在方法中修改指针所指向的值,使用 * 操作符
type Entity interface {
    UnmarshalerHTTP(*http.Request) error
}

func GetEntity(r *http.Request, v Entity) error {
    return v.UnmarshalerHTTP(r)
}

type User struct {
   ...
}

func (u *User) UnmarshalHTTP(r *http.Request) error {
   // ...
}
func foo() {
    var u User
    if err := GetEntity(req, &u); err != nil {
    // ...
    }
}