#runtime error: invalid memory address or nil pointer dereference
自作で簡単なAPIサーバーを作っているのですが,サーバーにリクエストを送るとTerminalに上のようなエラーが出てしまいます。解決できる方法を探しいます、よろしくお願いします。
##試したこと
GetAllBooks関数の
rows, err := db.Query("SELECT * FROM book;") if err != nil { log.Fatal(err) }
以下をコメントアウトしてリクエストを送っても、上のエラーが表示されるのですが上のコードもコメントアウトしたらブラウザーにHello worldが表示されます。なのでもしかしたら上のコードに問題があるかもしれません..
##全てのコード
Go
package main import ( "database/sql" "encoding/json" "fmt" "github.com/go-sql-driver/mysql" "github.com/gorilla/mux" "log" "net/http" "os" ) var db *sql.DB type Book struct { ID string `json:"id"` Title string `json:"title"` Page int `json:"page"` Price int `json:"price"` } type Error struct { Message string `json:"message"` } func GetAllBooks(w http.ResponseWriter, r *http.Request){ fmt.Fprintf(w, "Hello world") var error Error rows, err := db.Query("SELECT * FROM book;") if err != nil { log.Fatal(err) } var books []Book if err != nil { error.Message = "Cant not get data from database" w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(error.Message) return } for rows.Next() { var book Book if err := rows.Scan(&book.ID, &book.Title, &book.Page, &book.Price); err != nil { error.Message = "Cant not get data from database" w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(error.Message) return } books = append(books, book) } if err := rows.Err(); err != nil { error.Message = "Cant not get data from database" w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(error.Message) return } w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(books) defer rows.Close() } func main(){ cfg := mysql.Config{ User: os.Getenv("DBUSER"), Passwd: os.Getenv("DBPASS"), Net: "tcp", Addr: "127.0.0.1:3306", DBName: "bookAPI", } var err error db, err := sql.Open("mysql", cfg.FormatDSN()) defer db.Close() if err != nil { log.Fatal(err) } pingErr := db.Ping() if pingErr != nil { log.Fatal(pingErr) } fmt.Println("Connected to database!") router := mux.NewRouter() router.HandleFunc("/books", GetAllBooks).Methods("GET") log.Fatal(http.ListenAndServe(":8000", router)) }
#エラー内容
エラーはどの行に対して出力されましたか?

エラー内容を見ても何行目を見ればいいのかわからないです... エラー内容の画像を追加したのでもしよければ見てください
まだ回答がついていません
会員登録して回答してみよう