Golang如何逃避蜱虫

Lee*_*Lee 41 go

MySQL需要对保留字进行反对勾选的表格.我有一个表格角色,这是一个保留字,但我已经把我的查询放在后面的刻度中,所以我可以在多行上写它(这是一个玩具查询,大的不适合一行......).

我如何逃避背蜱?

这是我的代码:

dbmap := db.InitDb()

var roles []entities.Role
query :=
    ` << Difficult to see with SO's code editor widget, but here is a back tick
SELECT *
FROM `Role` <<< Needs escaping
`  << Difficult to see, but here is a back tick

_, err := dbmap.Select(&roles, query, nil)
if err != nil {
    panic(err)
}

fmt.Println(roles)
Run Code Online (Sandbox Code Playgroud)

Agi*_*gis 60

你无法在反叛内逃避反击,但你可以这样做:

dbmap := db.InitDb()

var roles []entities.Role
query := `
SELECT *
FROM ` + "`Role`"

_, err := dbmap.Select(&roles, query, nil)
if err != nil {
    panic(err)
}

fmt.Println(roles)
Run Code Online (Sandbox Code Playgroud)

  • 有点时髦,但我会接受...谢谢! (2认同)

tle*_*man 7

如果您的查询很长,那么可能需要输入一个文本文件并将其读入,这样可以使您的代码更加简洁有序,并且还可以完全避免重复引用问题.


小智 5

你可以使用.前缀:

query := `
SELECT *
FROM .Role
`
Run Code Online (Sandbox Code Playgroud)


Not*_*otX 5

我只是使用了一个占位符(例如 unicode\xe2\x80\x9d或基本上不会出现在查询中其他任何地方的任何内容)而不是反引号,然后替换了它们:

\n
strings.ReplaceAll(`CREATE TABLE \xe2\x80\x9dmydatabase\xe2\x80\x9d.\xe2\x80\x9dmytable\xe2\x80\x9d (\n    \xe2\x80\x9did\xe2\x80\x9d binary(16),\n    \xe2\x80\x9dsname\xe2\x80\x9d varchar(45),\n    PRIMARY KEY(\xe2\x80\x9did\xe2\x80\x9d)\n)`, "\xe2\x80\x9d", "`")\n
Run Code Online (Sandbox Code Playgroud)\n

(感谢安德烈·塔兰佐夫提议\xe2\x80\x9d担任占位符。)

\n