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

时间:2019-07-30 20:25:08

标签: go string-literals

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

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

说我想用变量bobisyouruncle替换input

我该怎么做?

在js中,这很简单:

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

1 个答案:

答案 0 :(得分:4)

在运行中,没有像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

  

我不能只输入内容,因为go给出错误,不能在字段值中使用输入(类型[] byte)作为类型字符串

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

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

编辑2

  

如果值是int,为什么不能做同样的事情?因此,对于方括号1和8000中的值,我不能只做int(numberinput)int(portinput),否则我会得到错误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