假设我有以下几点:

  • 结构
type MyStructure struct {
    Field1     int
    CityNames   []string
}

-a类型,我用作响应。我创建此类型只是为了使阅读时的响应比一串字符串更具启发性

type CityNamesReponse []string

然后我有一个函数,我想从结构中获取名称,然后将其放入响应中

func GetCities() *CityNamesReponse{
   dbResult := MyStructure{
       Field1:   1,
       CityNames: []string{"Amsterdam", "Barcelona"},
   }
   return &CityNameResponse{ dbResult.CityNames}
}

我不想遍历数据,只想一次性完成。也尝试过:

return &CityNameResponse{ ...dbResult.CityNames}

可以这样做,但是我是Go语言的新手,有点困惑,想以正确的方式做。这感觉不好:

    // This works
    c := dbResults.CityNames
    response := make(CityNameResponse, 0)
    response = c
    return &response

谢谢

分析解答

不要使用指向切片的指针。指针可能会损害性能,并使代码复杂化。

一定要使用从[]stringCityNamesReponse转换

func GetCities() CityNamesReponse{
   dbResult := MyStructure{
       Field1:   1,
       CityNames: []string{"Amsterdam", "Barcelona"},
   }
   return CityNameResponse(dbResult.CityNames)
}

如果您觉得必须使用指向切片的指针,请使用从*[]string*CityNameReponse转换

func GetCities() *CityNamesReponse{
   dbResult := MyStructure{
       Field1:   1,
       CityNames: []string{"Amsterdam", "Barcelona"},
   }
   return (*CityNameResponse)(&dbResult.CityNames)
}