我有一个这样定义的变量
var selectStatement = `
SELECT role FROM abc INNER JOIN xyz ON (abc.name = 'Service list')
`
Run Code Online (Sandbox Code Playgroud)
现在我想做的是而不是使用硬编码的“服务列表”,我想读取一个变量值,例如
var myvar = "operation"
var selectStatement = `
SELECT role FROM abc INNER JOIN xyz ON (abc.name = $myvar)
`
Run Code Online (Sandbox Code Playgroud)
我知道如果有的话就很简单"string"
了`string`
。我怎样才能做到这一点。"string"
和 和有什么区别`string`
?
` 那个反勾号(在波浪号键上)用于声明字符串文字。它使得您可以使用引号和换行符,并且它们按字面解释而不是破坏字符串。
为了解决您更大的问题,请使用fmt.Sprintf
...
var selectStatement = `
SELECT role FROM abc INNER JOIN xyz ON (abc.name = '%s')
`
selectStatement = fmt.Sprintf(selectStatement, ValueGoingWherePercentSIsNow)
Run Code Online (Sandbox Code Playgroud)
这个问题实际上是两个问题:一个在主题中,一个在问题正文中。
`string`
是原始字符串文字。在原始字符串文字(引号内)中,除了反引号之外,任何字符都可以出现。原始字符串文字是未解释的(隐式 UTF-8 编码)字符。这意味着反斜杠没有特殊含义,并且字符串可能包含换行符。
"string"
是一个解释的字符串文字。使用解释的字符串文字反斜杠转义符解释为它们在符文文字中。尽管转义序列被解释为换行符,但它不能包含换行符\n
。
这是可以做的fmt.Sprintf
func main(){
myvar := "operation"
selectStatement := `
SELECT role FROM abc INNER JOIN xyz ON (abc.name = %s)
`
interpolated := fmt.Sprintf(selectStatement, myvar)
}
Run Code Online (Sandbox Code Playgroud)