2017-09-26 2 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와 연결을 설정,이 함수에서 "잘못된 메모리 주소 또는 전무 포인터 역 참조 : 런타임 오류 공황" 는하지만 오류가 당신이 Registrationdb를 사용할 때 InitDataBase() 반환하므로,이 오류가 발생하면 실행됩니다 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()의 데이터를 보내려고.

프로그램이 종료되기 직전에 또는 데이터베이스 작업을 마친 직후 중 빠른 날짜로 db.Close()으로 전화하십시오.

0

감사합니다. 대답을 찾았습니다. db, err: = sql.Open ("postgres", psqlInfo)db, err= sql.Open ("postgres", psqlInfo)으로 변경해야합니다. 이 링크에있는 대답은 enter link description here

관련 문제