如何在 go 中使用字符串文字

How to use string literals in go

在 go 模板中,我想用变量替换下面的字符串:

bot := DigitalAssistant{"bobisyouruncle", "teamAwesome", "awesomebotimagename", "0.1.0", 1, 8000, "health", "fakeperson@gmail.com"}

假设我想用变量 input

替换 bobisyouruncle

我该怎么做?

在 js 中,这很简单:

bot := DigitalAssistant{`${input}`, "teamAwesome", "awesomebotimagename", "0.1.0", 1, 8000, "health", "fakeperson@gmail.com"}

在 Go 中,没有像 es6 那样的字符串模板文字。但是,您绝对可以通过使用 fmt.Sprintf.

来做类似的事情
fmt.Sprintf("hello %s! happy coding.", input)

你的情况是:

bot := DigitalAssistant{
    fmt.Sprintf("%s", input),
    "teamAwesome",
    "awesomebotimagename",
    "0.1.0",
    1,
    8000,
    "health",
    "fakeperson@gmail.com",
}

顺便提一个奇怪的问题。为什么需要在像 ${input} 这样非常简单的字符串上使用字符串模板文字?为什么不只是 input


编辑 1

I cannot just put input because go gives the error cannot use input (type []byte) as type string in field value

[]byte 可以转换成字符串。如果您的 input 类型是 []byte,只需将其写为 string(input).

bot := DigitalAssistant{
    string(input),
    "teamAwesome",
    "awesomebotimagename",
    "0.1.0",
    1,
    8000,
    "health",
    "fakeperson@gmail.com",
}

编辑 2

why can't I do the same if the value is an int? So for the values in the brackets 1 and 8000 I can't just do int(numberinput) or int(portinput) or I'll get the error cannot use numberinput (type []byte) as the type int in field value

使用 explicit conversion T(v) 可以实现从 string[]byte 的转换,反之亦然。但是,此方法并非适用于所有类型。

例如,要将 []byte 转换为 int 需要更多的努力。

// convert `[]byte` into `string` using explicit conversion
valueInString := string(bytesData) 

// then use `strconv.Atoi()` to convert `string` into `int`
valueInInteger, _ := strconv.Atoi(valueInString) 

fmt.Println(valueInInteger)

我建议看一下 go spec: conversion