Go Lang更漂亮的方法

时间:2016-03-31 16:44:33

标签: go

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

我在想像func(t * Test)SetProperty("名称"," alfa")......这种方法但不知道如何制作这段代码更好。欢迎任何评论。另外,如果你在风格和实践方面给我一个写得很好的Go Code的链接,我会很高兴。

谢谢,

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                                                                  
}

1 个答案:

答案 0 :(得分:4)

这是一种方法:

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
}