duanhongxian6982 2018-06-23 05:46
浏览 482
已采纳

DSN无效:网络地址未终止(缺少右括号)

I am new to go and backend development. I am trying to use a MySQL database with go to create a REST API.

func getUsers(w http.ResponseWriter, r *http.Request) {
    db, err := sql.Open("mysql", "root:mypassword@tcp(127.0.0.1:3306/test)")
    if err != nil {
        panic(err.Error())
    }
    results, err := db.Query("Select * from users")
    if err != nil {
        panic(err.Error())
    }
    for results.Next() {
        var user User
        err = results.Scan(&user.FirstName)
        if err != nil {
            panic(err.Error)
        }
        fmt.Println(user.FirstName)
    }
    //scores is an array that i have already created just to return dummy data
    json.NewEncoder(w).Encode(scores)
}

I get this error:

http: panic serving [::1]:54508: invalid DSN: network address not terminated (missing closing brace)
goroutine 5 [running]:
net/http.(*conn).serve.func1(0xc42009abe0)
        /usr/local/go/src/net/http/server.go:1726 +0xd0
panic(0x129cea0, 0xc420010ec0)
        /usr/local/go/src/runtime/panic.go:505 +0x229
main.getUsers(0x134bca0, 0xc42011e000, 0xc42011c200)
        /Users/tushar/go/src/github.com/tushar/jump/main.go:62 +0x33f
net/http.HandlerFunc.ServeHTTP(0x1326230, 0x134bca0, 0xc42011e000, 0xc42011c200)
        /usr/local/go/src/net/http/server.go:1947 +0x44
github.com/gorilla/mux.(*Router).ServeHTTP(0xc420110000, 0x134bca0, 0xc42011e000, 0xc42011c200)
        /Users/tushar/go/src/github.com/gorilla/mux/mux.go:162 +0xed
net/http.serverHandler.ServeHTTP(0xc42008aea0, 0x134bca0, 0xc42011e000, 0xc42011c000)
        /usr/local/go/src/net/http/server.go:2694 +0xbc
net/http.(*conn).serve(0xc42009abe0, 0x134bf60, 0xc420062240)
        /usr/local/go/src/net/http/server.go:1830 +0x651
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:2795 +0x27b

I am not able to understand the issue.

It works fine when there is no DB query.

EDIT 1: editted sql.Open to change closing braces to root:mypassword@tcp(127.0.0.1:3306)/test works fine when querying

but i get panic while inserting in db

func insertUsers(w http.ResponseWriter, r *http.Request) {
    db, err := sql.Open("mysql", "root:mypassword@tcp(127.0.0.1:3306)/test")
    if err != nil {
        panic(err.Error())
    }
    insert, err := db.Query("Insert into users (personId,firstName,lastName) values(20,tushar,saha)")
    if err != nil {
        panic(err.Error)
    }
    defer insert.Close()
}

this is the error 1

2018/06/23 11:54:10 http: panic serving [::1]:54802: 0x126a8b0
goroutine 19 [running]:
net/http.(*conn).serve.func1(0xc4200aebe0)
        /usr/local/go/src/net/http/server.go:1726 +0xd0
panic(0x129bb20, 0xc42016a020)
        /usr/local/go/src/runtime/panic.go:505 +0x229
main.insertUsers(0x134bc80, 0xc42013c000, 0xc420138200)
        /Users/tushar/go/src/github.com/tushar/jump/main.go:50 +0x15d
net/http.HandlerFunc.ServeHTTP(0x1326218, 0x134bc80, 0xc42013c000, 0xc420138200)
        /usr/local/go/src/net/http/server.go:1947 +0x44
github.com/gorilla/mux.(*Router).ServeHTTP(0xc42012c000, 0x134bc80, 0xc42013c000, 0xc420138200)
        /Users/tushar/go/src/github.com/gorilla/mux/mux.go:162 +0xed
net/http.serverHandler.ServeHTTP(0xc420095040, 0x134bc80, 0xc42013c000, 0xc420138000)
        /usr/local/go/src/net/http/server.go:2694 +0xbc
net/http.(*conn).serve(0xc4200aebe0, 0x134bf40, 0xc42009a200)
        /usr/local/go/src/net/http/server.go:1830 +0x651
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:2795 +0x27b
  • 写回答

1条回答 默认 最新

      报告相同问题?

      相关推荐 更多相似问题

      悬赏问题

      • ¥15 银河麒麟v10 执行.run失败如何解决
      • ¥15 用mysql做一个高校工资管理系统
      • ¥21 Multisim设计用三端集成稳压器设计稳压电路
      • ¥15 tp6,在iframe里的网址通过获取url参数失败
      • ¥15 打开opendaylight查看拓扑,为什么直接就显示了两个Switch,在mininet配置了一个topo,这两个Switch还在
      • ¥15 无法远程连接pgsql
      • ¥15 建立DLNM模型时显示基础基矩阵不一致
      • ¥15 贝叶斯重复测量方差分析
      • ¥15 c#如何将到毫秒的时间字符串转换成byte[8]
      • ¥100 能不能帮帮我,这个数据库我一直做不好