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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

Go

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

Q&A

0回答

725閲覧

Datastoreに保存した値とキー識別子を利用したEditボタンをブラウザ上に表示したい

bon96

総合スコア21

Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

Go

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

0グッド

0クリップ

投稿2023/01/17 09:17

前提

GoとGoogle CloudのDatastoreを用いて出退勤プログラムを作成しています。
Datastoreに保存したデータとキー識別子をHTML上で使用したかったのですが、うまくいきません。

Datastoreに保存はできており、キー識別子を除く他のデータのHTML上への表示は成功しています。そこからコードを書き換えたため、いずれのデータも表示できていない状態です。

実現したいこと

  • UserId、WorkdateTime、TimeTypeをHTML上に表示させる
  • Datastoreのキー識別子を使い、編集画面に遷移するためのEditボタンを表示させる

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

&IndexData.WorkItems

上記の部分にエラーで出ており、「IndexData.WorkItems 未定義 (IndexData 型に WorkItems メソッドがない)」と表示されます。

該当のソースコード

go

1package main 2 3import ( 4 "context" 5 "fmt" 6 "net/http" 7 "strconv" 8 "text/template" 9 "time" 10 11 "cloud.google.com/go/datastore" 12) 13 14type WorkItem struct { 15 UserId int // キー識別子とは別 16 WorkdateTime time.Time // 出勤時間 17 TimeType string // 出勤or退勤 18} 19 20func main() { 21 http.Handle("/views/", http.StripPrefix("/views/", http.FileServer(http.Dir("views/")))) 22 23 http.HandleFunc("/", Index) 24 http.HandleFunc("/create", WorkItemCreate) 25 //http.HandleFunc("/edit", WorkItemEdit) 26 //http.HandleFunc("/update", WorkItemUpdate) 27 http.ListenAndServe("localhost:8080", nil) 28} 29 30func dbConn() (*datastore.Client, error) { 31 // Datastore用のコンテキストとクライアントを作成する 32 ctx := context.Background() 33 34 client, err := datastore.NewClient(ctx, "project-id") 35 if err != nil { 36 return nil, fmt.Errorf("datastore.NewClient: %v", err) 37 } 38 return client, nil 39} 40 41func Index(w http.ResponseWriter, r *http.Request) { 42 tmpl, err := template.ParseFiles("templates/index.html") 43 if err != nil { 44 http.Error(w, "Could not connect to index.html", http.StatusNotFound) 45 } 46 47 ctx := context.Background() 48 client, err := dbConn() 49 if err != nil { 50 http.Error(w, fmt.Sprintf("Unable to connect to dbConn(): %v", err), http.StatusInternalServerError) 51 return 52 } 53 54 type IndexData struct { 55 Keys []*datastore.Key 56 WorkItems []WorkItem 57 } 58 59 query := datastore.NewQuery("WorkItem") 60 61 Keys, err := client.GetAll(ctx, query, &IndexData.WorkItems) 62 if err != nil { 63 http.Error(w, fmt.Sprintf("Data stored in datastore cannot be retrieved: %v", err), http.StatusInternalServerError) 64 return 65 } 66 67 tmpl.Execute(w, &IndexData{Keys, IndexData.WorkItems}) 68} 69 70func WorkItemCreate(w http.ResponseWriter, r *http.Request) { 71 if r.Method == http.MethodPost { 72 73 // フォームに入力された値を取得する 74 userid, _ := strconv.Atoi(r.FormValue("userid")) 75 timetype := r.FormValue("timetype") 76 77 ctx := context.Background() 78 client, err := dbConn() 79 if err != nil { 80 http.Error(w, fmt.Sprintf("Unable to connect to dbConn(): %v", err), http.StatusInternalServerError) 81 return 82 } 83 84 // WorkItem構造体のキーを作成する 85 key := datastore.IncompleteKey("WorkItem", nil) 86 87 // フォームで入力された値で新しいWorkItem構造体を作成する 88 workitem := &WorkItem{ 89 UserId: userid, 90 WorkdateTime: time.Now(), 91 TimeType: timetype, 92 } 93 94 // データストアにユーザ構造体を保存する 95 _, err = client.Put(ctx, key, workitem) 96 if err != nil { 97 http.Error(w, fmt.Sprintf("Error saving workitem to datastore: %v", err), http.StatusInternalServerError) 98 return 99 } 100 http.Redirect(w, r, "/", 301) 101 102 } 103}

試したこと

Go公式サイトを参照すること

補足

  • Go 1.19.3
  • Cloud firestoreのDatastoreモードを使用

以上、アドバイスいただけたら幸いです。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問