Go问答 结构体 方法问题

dbas · 2020年05月27日 · 最后由 laojianzi 回复于 2020年05月31日 · 271 次阅读
// User model
type User struct {
    gorm.Model
    Name  string `gorm:"not null" json:"name"`
    Email string `json:"email" gorm:"not null;unique"`
}



func (user *User) CreateUser(name string) error {
....
    return  Error
}


func CreateUser(name string) error {

....
    return  Error
}

二个 CreateUser 有什么区别,一个加了 (user *User) ,一个没有,都可以调用到

更多原创文章干货分享,请关注公众号
  • 加微信实战群请加微信(注明:实战群):gocnio
func CreateUser(name string) error {
    return db.Create(&user).Error
}

你的这部分代码没有定义 user 不会报错吗?

func (user *User) CreateUser(name string) error {
    return db.Create(&user).Error
}

user *User 实际也是函数的参数,区别就是值传递还是指针传递

改了下贴子

func (user *User) CreateUser(name string) error {
....
    return  Error
}


func CreateUser(name string) error {

....
    return  Error
}

从上面的代码示例中猜测,你可能想知道从外部 new 一个 User call CreateUser 和在 CreateUser 自己内部 new 一个 User 来 Create 的区别

其实 Create 的部分没有任何区别,但 call 的时候有区别

func main() {
    // 第一个 func
    user := new(User)
    err := user.CreateUser("张三")
    if err != nil {
        panic(err)
    }
    fmt.Println(user) // user{ ID: 1, Name: 张三 }

    // 第二个 func
     err := CreateUser("张三") // 你除了 error 什么都获取不到
    if err != nil {
        panic(err)
    }
}
dbas 关闭了讨论 06月08日 19:35
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册