为什么 go-validator 必须是一个指针?

huangapple go评论85阅读模式
英文:

Why does go-validator have to be a pointer?

问题

我在互联网上看到一个教程,它创建了一个指针作为验证器,但从未解释过。这样做是否有任何潜在目的?

// Validation 包含
type Validation struct {
validate *validator.Validate
}

// NewValidation 创建一个新的 Validation 类型
func NewValidation() *Validation {
validate := validator.New()
validate.RegisterValidation("sku", validateSKU)

return &Validation{validate}

}

这段代码中,创建了一个名为Validation的结构体,其中包含一个指向validator.Validate类型的指针。在NewValidation函数中,首先创建了一个validator.Validate类型的实例validate,然后通过validate.RegisterValidation方法注册了一个名为"sku"的验证函数validateSKU。最后,将validate指针赋值给Validation结构体的validate字段,并返回Validation类型的指针。

这种设计可能有以下潜在目的:

  1. 将验证器作为指针传递,可以在不同的函数或模块之间共享同一个验证器实例,避免了重复创建验证器的开销。
  2. 通过将验证器作为指针传递,可以在不同的地方对验证器进行修改或扩展,而不需要修改函数签名或结构体定义。
  3. 通过将验证器作为指针传递,可以在其他函数中访问和使用验证器的方法和属性。

总之,使用指针作为验证器的设计可能是为了提高代码的可重用性、可扩展性和灵活性。

英文:

I saw a tutorial on internet and it created a validator as a pointer but never explained. Is there any underlying purpose of doing this?

// Validation contains
type Validation struct {
    validate *validator.Validate
}

// NewValidation creates a new Validation type
func NewValidation() *Validation {
    validate := validator.New()
    validate.RegisterValidation("sku", validateSKU)

    return &Validation{validate}
}

答案1

得分: 0

它返回具有默认值的Validate结构体的指针,并且其类型为*validator.Validate

validate := validator.New()
func New() *Validate { }
英文:

It is returning the pointer of Validate struct with the default values. and it is type of *validator.Validate

validate := validator.New()
func New() *Validate { }

huangapple
  • 本文由 发表于 2021年12月25日 19:15:54
  • 转载请务必保留本文链接:https://go.coder-hub.com/70479641.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定