2017-09-26 18 views
0

データをデータベースに書き込むためにデータを転送しようとしています。私は、クライアントデータベースにデータを送信中にエラーが発生しました

func handlePacket(conn net.Conn) { 
    rw := bufio.NewReadWriter(bufio.NewReader(conn), bufio.NewWriter(conn)) 
    defer conn.Close() 

    packet := model.RegistrationMessage{} 
    client := JsonDecoderMessage(rw).Decode(&packet) 
    if client != nil { 
     puts("Error from Decode.Please NO :(") 
    } 

    if packet.MessageType == model.AUTH_MESSAGE { 
     puts("Auth") 
    } else if packet.MessageType == model.REGS_MESSAGE { 
     puts("Regs") 
     Registration(packet.Login, packet.Password) 
     puts("good") 
    } 
} 

からのデータを待つそして、ここで私は、DBとIとの接続を確立し、この機能では 「無効なメモリアドレスかnilポインタ参照:ランタイムエラーパニック」 は、しかし、私はエラーを持っていますDB

var db *sql.DB 

func InitDataBase() { 
    psqlInfo := fmt.Sprintf("host=%s port=%d user=%s "+ 
     "password=%s dbname=%s sslmode=disable", 
     host, port, user, password, dbname) 
    db, err := sql.Open("postgres", psqlInfo) 
    if err != nil { 
     panic(err) 
    } 
    defer db.Close() 

    err = db.Ping() 
    if err != nil { 
     panic(err) 
    } 
    fmt.Println("Successfully connected!") 
} 
func Registration(email, password string) { 
    sqlStatement := `INSERT INTO account0(email,password) 
     VALUES ($1, $2) RETURNING id` 
    id := 0 
    err := db.QueryRow(sqlStatement, email, password).Scan(&id) 
    if err != nil { 
     panic(err) 
    } 
} 
+0

defer db.Close()をメイン関数に追加しました。 –

答えて

7

defer db.Close()にデータを送信しようとあなたがRegistrationdbを使用するときに、それはエラーが発生したときにInitDataBase()戻り、実行されます。

プログラムが終了する直前またはデータベースの処理が終了した直後のどちらか早いほうにdb.Close()に電話する必要があります。

0

ありがとうございます。答えを見つけました。db, err: = sql.Open ("postgres", psqlInfo)db, err= sql.Open ("postgres", psqlInfo)に変更する必要があります。 このリンクの回答enter link description here

関連する問題