Golang如何逃避蜱虫

时间:2014-01-18 01:36:36

标签: go

MySQL要求使用隐藏保留字的表格进行回溯。我有一个表格角色,这是一个保留字,但我已经把我的查询放在后面的刻度中,所以我可以在多行上写它(这是一个玩具查询,大的不适合一行......)。 / p>

如何逃避背虱?

这是我的代码:

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)

6 个答案:

答案 0 :(得分:50)

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

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)

答案 1 :(得分:7)

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

答案 2 :(得分:6)

您可以使用.前缀:

query := `
SELECT *
FROM .Role
`

答案 3 :(得分:4)

你可以尝试编写这样的查询:

query :=fmt.Sprintf("SELECT * FROM `Role`")

您可以比较输出:

import "fmt"

func main() {
 query :=fmt.Sprintf("SELECT * FROM `Role`")
 fmt.Println(query)
 fmt.Println( `SELECT * FROM ` + "`Role`") }

答案 4 :(得分:0)

我只是使用了一个占位符(如%s)来代替反引号,然后替换了它们:

strings.ReplaceAll(`CREATE TABLE %smydatabase%s.%smytable%s (
    %sid%s binary(16),
    %sname%s varchar(45),
    PRIMARY KEY(%sid%s)
)`, "%s", "`")

答案 5 :(得分:-1)

在纯文本上使用notepad ++并替换(搜索和)替换

`

使用

`+"`"+`