質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
RxGo

RxGoは、リアクティブプログラミング可能にするReactiveXのGo言語向けの実装です。Rxは.NETから始まり、多くの言語に実装されています。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

0回答

414閲覧

Goでchiのhttpルーターを使用しているのですがリクエストのidが取得できません。。

hiroki917

総合スコア2

RxGo

RxGoは、リアクティブプログラミング可能にするReactiveXのGo言語向けの実装です。Rxは.NETから始まり、多くの言語に実装されています。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2023/03/25 09:27

実現したいこと

MySQLのarticlesテーブルから一意の情報のid,titleの情報を取得したいです。
ルーティングはchiを使用しています。
MySQLはDockerで構築しています。

前提

Postmanでhttp://localhost:8080/article/1のように
フロントからリクエストしたidによってデータベースから情報を取得したいです。

発生している問題・エラーメッセージ

Error querying database: sql: no rows in result set

該当のソースコード

データベースの接続はroutes.goファイルに書いてます。 unc Connect() *sql.DB { user := "webuser" password := "webpass" host := "localhost" port := "3307" database_name := "go_mysql8_development" dbconf := user + ":" + password + "@tcp(" + host + ":" + port + ")/" + database_name + "?charset=utf8mb4" db, err := sql.Open("mysql", dbconf) if err != nil { fmt.Println(err.Error()) } return db }
handlers.goの中には package main import ( "encoding/json" "fmt" "io" "log" "react-go-mybackend/database" "react-go-mybackend/internal/models" "strconv" // "log" "database/sql" "net/http" "github.com/go-chi/chi" _ "github.com/go-sql-driver/mysql" ) type Article struct { Id int `json:"id"` Title string `json:"title"` } func (app *application) GetArticleByID(w http.ResponseWriter, r *http.Request) { userID := chi.URLParam(r, "id") ids, _ := strconv.Atoi(userID) db := database.Connect() defer db.Close() var id int var title string err := db.QueryRow("SELECT id, title FROM articles WHERE id = ?", ids).Scan(&id, &title) if err != nil { fmt.Fprintf(w, "Error querying database: %s", err.Error()) return } article := map[string]interface{}{ "id": id, "title": title, } articleJSON, err := json.Marshal(article) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusOK) w.Write(articleJSON) }
main.goには package main import ( "fmt" "log" "net/http" "react-go-mybackend/database" ) func init() { db := database.Connect() defer db.Close() err := db.Ping() if err != nil { fmt.Println("データベース接続失敗") return } else { fmt.Println("データベース接続成功") } } type application struct { Domain string } const port = 8080 func main() { var app application app.Domain = "example.com" err := http.ListenAndServe(fmt.Sprintf(":%d", port), app.routes()) if err != nil { log.Fatal(err) } }
mysql> select * from articles; +----+-----------+ | id | title | +----+-----------+ | 1 | みかみ | | 2 | くさの | | 3 | やまだ | +----+-----------+ 3 rows in set (0.00 sec) mysql> select * from articles where id = 1; +----+-----------+ | id | title | +----+-----------+ | 1 | みかみ | +----+-----------+ 1 row in set (0.00 sec)
### 試したこと デバッグしたがID: 0になってしまう。 idStr := chi.URLParam(r, "id") fmt.Printf("ID: %s\n", idStr) chi.URLParamがうまく機能していない可能性があり idStr := r.URL.Query().Get("id") fmt.Printf("ID: %s\n", idStr) ではID: がからになってしまいます。 どうか皆様お力をお貸しくださいm(_ _)m よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2023/03/25 12:39

で、どういう問題があって、それをどうしたいのか、 もちっと詳しく説明しよう。 問題が見えません
osm3

2023/03/25 12:57

routing部分のソースコードも提示してください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問