- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我想学习用 golang 编写干净的代码,我的问题是:我有两个函数,我需要组合成一个,这是我的实际代码:
func db_execute(sql_cmd string) bool {
db, err := sql.Open("mysql", mysql_login)
if err != nil {
log.Fatal(err)
}
defer db.Close()
err = db.Ping()
if err != nil {
log.Fatal(err)
}
stmt, err := db.Prepare(sql_cmd)
if err != nil {
fmt.Print(err.Error())
}
_, err = stmt.Exec()
if err != nil {
fmt.Print(err.Error())
return false
}
return true
}
func db_tabela_select(cod_cliente string) (id string, cod1 string, cod2 string, cod3 string) {
db, err := sql.Open("mysql", mysql_login)
if err != nil {
log.Fatal(err)
}
defer db.Close()
err = db.Ping()
if err != nil {
log.Fatal(err)
}
err = db.QueryRow("select id, cod1, cod2, cod3 from db_tabela WHERE `cliente`=? LIMIT 1;", cod_cliente).Scan(
&id, &cod1, &cod2, &cod3)
switch {
case err == sql.ErrNoRows:
log.Printf("No codice cliente with that ID.")
case err != nil:
log.Printf("database select problems")
default:
fmt.Printf("Client code is %s %s %s\n", cod1, cod2, cod3)
}
return id, cod1, cod2, cod3
}
如何将这两个功能合而为一?这些函数具有不同的输入和不同的输出。
最佳答案
您不应该“组合”这些功能。他们有什么共同之处,将他们“移出”,例如到可以由这两个函数调用的第三个函数。
此外,连接到数据库不应该是“本地”操作,它应该只完成一次,例如在包 init()
函数中。
此外,可能失败的函数(数据库操作是这些的典型示例)应该返回一个错误,以便调用者可以检查和处理它。
对于您的示例,这是一个更简单、更强大且更惯用的解决方案:
var db *sql.DB
func init() {
var err error
db, err = sql.Open("mysql", "db_url_string")
if err != nil {
log.Fatal(err)
}
if err = db.Ping(); err != nil {
log.Fatal(err)
}
}
func dbExecute(sql_cmd string) error {
stmt, err := db.Prepare(sql_cmd)
if err != nil {
return err
}
_, err = stmt.Exec()
return err
}
func dbTabelaSelect(cod_cliente string) (id, cod1, cod2, cod3 string, err error) {
query := "select id, cod1, cod2, cod3 from db_tabela WHERE 'cliente'=? LIMIT 1"
err = db.QueryRow(query, cod_cliente).Scan(&id, &cod1, &cod2, &cod3)
return
}
使用这些函数的例子:
func main() {
defer db.Close() // Graceful shutdown
if err := dbExecute("some_SQL"); err != nil {
fmt.Print("SQL execution failed: %v", err)
}
id, cod1, cod2, cod3, err := dbTabelaSelect("someID")
switch {
case err == sql.ErrNoRows:
log.Printf("No codice cliente with that ID.")
case err != nil:
log.Printf("database select problems")
default:
fmt.Printf("Client code is %s %s %s %s\n", id, cod1, cod2, cod3)
}
}
关于golang如何将这两个功能结合起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49728373/
我正在尝试执行 vagrant up 但一直遇到此错误: ==> default: IOError: [Errno 13] Permission denied: '/usr/local/lib/pyt
我在容器 div 中有一系列动态创建的不同高度的 div。 Varying text... Varying text... Varying text... Varying text.
通过 cygwin 运行 vagrant up 时遇到以下错误。 stderr: /bin/bash: /home/vagrant/.ansible/tmp/ansible-tmp-14872260
今天要向小伙伴们介绍的是一个能够快速地把数据制作成可视化、交互页面的 Python 框架:Streamlit,分分钟让你的数据动起来! 犹记得我在做机器学习和数据分析方面的毕设时,
我是 vagrant 的新手,正在尝试将第二个磁盘添加到我正在用 vagrant 制作的虚拟机中。 我想出了如何在第一次启动虚拟机时连接磁盘,但是当我关闭机器时 然后再次备份(使用 'vagrant
我是一名优秀的程序员,十分优秀!