Go Lang中更漂亮的方法

Go Lang中更漂亮的方法,go,Go,我正在寻找编写Go代码时的最佳实践。我有两种方法,它们在逻辑上非常接近。我只是想更好地编写代码,是否有一种方法可以将AddAuthor和AddTitle方法与Go结合在一起 我在想一些类似于func t*Test SetPropertyname,alfa。。这是一种方法,但不知道如何改进代码。欢迎提出任何意见。另外,如果你给我一个关于风格和实践方面的好的Go代码链接,我会很高兴 谢谢 type Test struct {

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

我在想一些类似于func t*Test SetPropertyname,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
}

这里有一种方法:

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
}

你为什么要回t?你是变异的t,除非你改变一些基本的东西,比如append Doesah,否则你不必返回它。你是对的,我在Ruby zone花了太多时间,忘记了所有的指针:非常感谢你。在开始学习Python一个月后,我不得不将全部时间调回Python,在非常紧迫的期限内完成一个项目。三个星期后,潘基文几乎什么都不记得了。我感觉到你的痛苦!如果要执行分配验证,请不要公开这些字段,否则肯定会被滥用。另外,为字段setter命名函数SetFieldName,为字段getter命名函数FieldName。同意@nevets。这是做它的方式为什么你返回t?你是变异的t,除非你改变一些基本的东西,比如append Doesah,否则你不必返回它。你是对的,我在Ruby zone花了太多时间,忘记了所有的指针:非常感谢你。在开始学习Python一个月后,我不得不将全部时间调回Python,在非常紧迫的期限内完成一个项目。三个星期后,潘基文几乎什么都不记得了。我感觉到你的痛苦!如果要执行分配验证,请不要公开这些字段,否则肯定会被滥用。另外,为字段setter命名函数SetFieldName,为字段getter命名函数FieldName。同意@nevets。这是一种方法@manorie一定要将其标记为在信用到期时给予信用的答案:@manorie一定要将其标记为答案,以便在信用到期时给予信用: