go - Go Lang 中更漂亮的方法

标签 go

我在编写 Go 代码时寻找最佳实践。我有两种方法,它们在逻辑上非常接近。我只是想更好地编写代码,有没有一种方法可以将 AddAuthor 和 AddTitle 方法与 Go 结合在一起。

我在想 func (t *Test) SetProperty("name", "alfa") 之类的东西......一种方法,但不知道如何使这段代码更好。欢迎任何意见。另外,如果你给我一个在风格和实践方面写得很好的 Go 代码的链接,我会很高兴。

谢谢,

type Test struct {                                                                                                                  
    Title          string                                                       
    Author         string                                                       
}                                                                               

func (t *Test) AddAuthor(name string) (*Test, error) {                          
    if err := validateStringLength(name); err != nil {                          
        return nil, err                                                         
    }                                                                           
    t.Author = name                                                             
    return t, nil                                                               
}                                                                               

func (t *Test) AddTitle(title string) (*Test, error) {                          
    if err := validateStringLength(title); err != nil {                         
        return nil, err                                                         
    }                                                                           
    t.Title = title                                                             
    return t, nil                                                               
}                                                                               

func validateStringLength(field string) error {                                 
    if len(field) > 255 {                                                       
        return fmt.Errorf("field %v is too long.", field)                       
    }                                                                           
    return nil                                                                  
}

最佳答案

这是一种方法:

func (t *Test) AddAuthor(author string) (*Test, error) {
  return t.setString(&t.Author, author)
}

func (t *Test) AddTitle(title string) (*Test, error) {
  return t.setString(&t.Title, title)
}

func (t *Test) setString(p *string, v string) (*Test, error) {
  if len(v) > 255 {
    return nil, fmt.Errorf("field %v is too long.", v)
  }
  *p = v
  return t, nil
}

关于go - Go Lang 中更漂亮的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36339189/

相关文章:

go - 无法理解函数的两个返回值

go - 如何从字符串中删除双引号

go - 不能在 Go 中使用函数作为类型

go - 如何在 goroutine 中附加结构

arrays - 自己结构数组的JSON编码

java - 获取动态数据库模型的静态类型(使用自动迁移)

go - 如何正确停止定时器?

go - 如何在 ProtoBuffers 3 中建模 map<string, map<string, int>>

mongodb - 填充方法的 mgo 示例

Golang Data Race,退出状态为 66