如何在 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。
在 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)
orint(portinput)
or I'll get the errorcannot 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。