2015-04-12 87 views
4

我正在使用go-sql-driver嘗試Google Cloud SQL。我卡在這裏我不知道這裏有什麼錯。這個錯誤對我來說完全是未知的。來自Google CloudSQL的錯誤HTTP響應

package hello 

import (
    "fmt" 
    "net/http" 
    "database/sql" 
    _ "github.com/go-sql-driver/mysql" 
) 

func init() { 
    http.HandleFunc("/", handler) 
} 

func handler(w http.ResponseWriter, r *http.Request) { 

    const dbUserName = "userName" 
    const dbPassword = "password" 
    const dbIP = "123.123.231.123" 

    db, err := sql.Open("mysql", dbUserName+":"+dbPassword+"@"+dbIP+":3306/user") 


    if err != nil { 
    panic(err.Error()) 
    } 


    // Query the name 
    rows, err := db.Query("SELECT * FROM user") 
    if err != nil { 
    panic(err.Error()) 
    } 

    fmt.Println(rows) 

    defer db.Close() 
} 

錯誤:

the runtime process gave a bad HTTP response: '' 

2015/04/12 09:23:36 http: panic serving 127.0.0.1:50091: Default addr for network '173.194.106.126:3306' unknown 
goroutine 6 [running]: 
net/http.func·011() 
/private/var/folders/00/0v42r000h01000cxqpysvccm003chb/T/appengine/go_appengine/goroot/src/net/http/server.go:1130 +0xbb 
main37089.handler(0x5ad1e0, 0xc208044280, 0xc2080331e0) 

任何想法。看看go-sql-driver源碼的來源,也許我應該設置一個默認地址?

+0

如果在DSN中添加tcp協議會發生什麼?例如用戶:pass @ tcp(123.123.123.123:3306)/ dbname?如果不指定dbname,會發生什麼情況? – cflewis

+0

你不需要'cloudsql:instance-name * ...'來暴露數據庫的訪問嗎?閱讀[this](https://cloud.google.com/appengine/docs/go/cloud-sql/reference),它可能很有用。 – Anzel

+0

@Anzel我也試過。它不會在開發,即我的本地。當我將它上傳到應用程序引擎時,它可以工作 – avellable

回答

1

我不認爲你的錯誤與SQL驅動程序有任何關係。如果您閱讀的是來自http軟件包服務器代碼的消息,而不是與您的SQL連接/讀/寫等任何事情有關。看看你的代碼,並將它與基本的例子進行比較,我相當確定你的錯誤是由於在main中缺少這一行; http.ListenAndServe(":8080", nil)

基本上,改變你的主讓

func main() { 
    http.HandleFunc("/", handler) 
    http.ListenAndServe(":8080", nil) 
} 

這可能誤差就會消失。免責聲明;這並不意味着你的程序會神奇地工作,只有它會從來沒有沒有它的工作。