【问题标题】:Convert struct field to string将结构字段转换为字符串
【发布时间】:2021-06-28 05:16:16
【问题描述】:

我正在尝试将结构字段“Category”转换为字符串,以便可以在 ConcatenateNotification 中进行连接。
有人知道怎么做吗?
请在下面查看我的代码 sn-p。

//Category is enum of
//available notification types (semantic meaning of the notification)
type Category string

// Category allowed values
const (
    FlowFailure  Category = "flow_failure"
    WriterResult Category = "writer_result"
)

//Notification is struct containing all information about notification
type Notification struct {
    UserID     int
    Category   Category

}

//ConcatenateNotification loads data from Notification struct and concatenates them into one string, "\n" delimited
func ConcatenateNotification(n Notification) (msg string) {
    values := []string{}
    values = append(values, "UserID: " + strconv.Itoa(n.UserID))
    values = append(values, "Category: " + (n.Category)) // Anybody knows how to convert this value to string?

    msg = strings.Join(values, "\n")
    return msg

【问题讨论】:

  • 您可能想使用fmt.Sprintf("%v", n.Category)。我想它会解决你的问题。
  • @Giannis 太过分了,Category 已经是字符串类型了。

标签: go struct string-conversion


【解决方案1】:

由于Category 已经是底层string,您可以简单地:

values = append(values, "Category: " + string(n.Category))

【讨论】:

  • 你说得对,阿德里安。您的解决方案更优雅。干杯伙伴!
【解决方案2】:

首先,你不需要 strconv.Itoa 来连接 int 和字符串,你可以简单地使用fmt.Sprintf("UserID:%v", n.UserID)。如有必要,您可以使用其他动词代替%v(更多here)。您可以对Category 使用相同的方法。 fmt.Sprintf 是在 go 中连接字符串的一种更惯用的方式。

所以代码看起来像:

//ConcatenateNotification loads data from Notification struct
// and concatenates them into one string, "\n" delimited
func ConcatenateNotification(n Notification) (msg string) {
    values := []string{}
    values = append(values, fmt.Sprintf("UserID: %v", n.UserID))
    values = append(values, fmt.Sprintf("Category: %v", n.Category))
    msg = strings.Join(values, "\n")
    return msg
}

如果你想缩短你的代码,你也可以这样做:

func ConcatenateNotification(n Notification) (msg string) {
    return fmt.Sprintf("UserID: %v\nCategory:%v", n.UserID, n.Category)
}

【讨论】:

  • "fmt.Sprintf 是一种在 go 中连接字符串的更惯用的方式" - 并非如此。这是 format 字符串的更惯用方式(因此得名)。 连接字符串的惯用方式是使用连接运算符+
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多