Golang代码格式化指南

Golang代码格式化指南 在使用Go语言时,我发现代码格式化方面有些令人困扰。这里有一个例子,我不得不将所有内容放在同一行,否则就会出现错误。有没有办法实现类似这样的格式?因为有些查询语句非常庞大,试图将它们全部放在一行会显得很不合理。

if queryuser, err = db.Prepare("select UserID, CurrentDB, DBHost 
                                                from optUsers 
                                                where LoginHash = ?"); err != nil  {
  println(err)
  panic( "queryuser Statement failed to create" )
}

错误提示:supportservice.go:54:67: 字符串中包含换行符

由于最终会有大量类似结构的语句,我希望能尽量保持代码整洁。有没有更好的方法?


更多关于Golang代码格式化指南的实战教程也可以访问 https://www.itying.com/category-94-b0.html

3 回复

谢谢

更多关于Golang代码格式化指南的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


使用原始字符串(用反引号包围:`),它允许换行。

`I am
a
raw string`

在Go语言中,字符串字面量不能直接包含换行符,这是导致你遇到编译错误的原因。不过,有几种更好的方法可以处理长SQL查询语句,保持代码整洁。

方法1:使用反引号创建原始字符串字面量

if queryuser, err = db.Prepare(`select UserID, CurrentDB, DBHost 
                                from optUsers 
                                where LoginHash = ?`); err != nil {
    println(err)
    panic("queryuser Statement failed to create")
}

方法2:使用加号连接多行字符串

if queryuser, err = db.Prepare("select UserID, CurrentDB, DBHost " +
                               "from optUsers " +
                               "where LoginHash = ?"); err != nil {
    println(err)
    panic("queryuser Statement failed to create")
}

方法3:将查询定义为常量或变量

const userQuery = `
    SELECT UserID, CurrentDB, DBHost 
    FROM optUsers 
    WHERE LoginHash = ?
`

if queryuser, err = db.Prepare(userQuery); err != nil {
    println(err)
    panic("queryuser Statement failed to create")
}

方法4:使用fmt.Sprintf构建复杂查询

query := fmt.Sprintf(`
    SELECT %s 
    FROM %s 
    WHERE LoginHash = ?
`, "UserID, CurrentDB, DBHost", "optUsers")

if queryuser, err = db.Prepare(query); err != nil {
    println(err)
    panic("queryuser Statement failed to create")
}

推荐的最佳实践

对于大量SQL语句,建议使用方法3,将所有查询集中定义:

const (
    userQuery = `
        SELECT UserID, CurrentDB, DBHost 
        FROM optUsers 
        WHERE LoginHash = ?
    `
    
    otherQuery = `
        SELECT * 
        FROM anotherTable 
        WHERE condition = ?
    `
)

// 使用时直接引用
if queryuser, err = db.Prepare(userQuery); err != nil {
    println(err)
    panic("queryuser Statement failed to create")
}

反引号创建的原始字符串字面量是最常用的方法,因为它允许字符串跨越多行,并且不需要转义特殊字符。

回到顶部