🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Go

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

Q&A

解決済

1回答

1385閲覧

Goのスライス部分で解決がしたい

kourei000

総合スコア4

Go

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

0グッド

0クリップ

投稿2019/11/12 07:25

Goのスライス部分で解決がしたい&DataStoreに表示させたい

こんにちは

Goのスライスでリクエストを複数表示する事ができたのでGoogleCloudPlatFormのdatastoreで

URLs.IDURLs.URLURLs.ShotenURLUSERID
atssdhttps://golang.org/pkg/net/http/1test/atssdaaaaaaa
YyySjhttps://golang.org/pkg/net/http/2test/YyySjaaaaaaa
Yfsafhttps://golang.org/pkg/net/http/3test/Yfsafaaaaaaa

と表示させたいのですが、deployしてPOSTすると

URLs.IDURLs.URLURLs.ShotenURLUSERID
["atssd","YyySj","Yfsaf"]["https://golang.org/pkg/net/http/1","https://golang.org/pkg/net/http/2","https://golang.org/pkg/net/http/3"]["test/atssd","test/YyySj","test/Yfsaf"]aaaaaaa

と出てきてしまいます。
配列のAppendの部分で配列毎に入れてないのが原因だと思うのですが、配列毎に入れるのが分かりません
アドバイスの方を検討お願いします

リクエスト

json

1{ 2 "url": [ 3 "https://golang.org/pkg/net/http/1", 4 "https://golang.org/pkg/net/http/2", 5 "https://golang.org/pkg/net/http/3" 6 ], 7 "userId":"aaaaaaa" 8}

レスポンス

json

1{ 2 "result": "success", 3 "hoge" : [ 4 { 5 "id": "atssd", 6 "url": "https://golang.org/pkg/net/http/1", 7 "shortenUrl": "test/atssd", 8 }, 9 { 10 "id": "YyySj", 11 "url": "https://golang.org/pkg/net/http/2", 12 "shortenUrl": "test/Yyysj", 13 } , 14 { 15 "id": "Yfsaf", 16 "url": "https://golang.org/pkg/net/http/3", 17 "shortenUrl": "test/Yfsaf", 18 } 19 ] 20 21 "userId": "aaaaaaa" 22}

該当のソースコード

Go

1package main 2 3import ( 4 "context" 5 "encoding/json" 6 "html/template" 7 "io/ioutil" 8 "math/rand" 9 "net/http" 10 "net/url" 11 "os" 12 "path" 13 "strings" 14 "time" 15 "fmt" 16 "encoding/base64" 17 // "bytes" 18 // "io" 19 20 "github.com/go-chi/chi" 21 "github.com/go-chi/chi/middleware" 22 "github.com/mjibson/goon" 23 "github.com/skip2/go-qrcode" 24 "google.golang.org/appengine" 25 "google.golang.org/appengine/datastore" 26 "google.golang.org/appengine/log" 27 "google.golang.org/appengine/urlfetch" 28 29 "google.golang.org/appengine/user" 30 31) 32type ShortURLs_API struct{ 33 Result string `json:"result"` 34 URLs []URLs `json:"urls"` 35 USERID string `json:"userId"` 36} 37 38type URLs struct{ 39 ID string `datastore:"-" json:"id" goon:"id"` 40 URLstring string `json:"urlstring"` 41 ShortenURL string `json:"shortenUrl"` 42} 43 44func main() { 45 var err error 46 baseURL, err = url.Parse(os.Getenv("BASE_URL")) 47 if err != nil { 48 panic("base URL is invalid") 49 } 50 r := chi.NewRouter() 51 r.Use(middleware.RequestID) 52 r.Use(middleware.RealIP) 53 r.Use(middleware.Logger) 54 r.Use(middleware.Recoverer) 55 r.Use(middleware.Timeout(60 * time.Second)) 56 57 r.Post("/short-urls-apis",PostRequest4) 58 59 appengine.Main() 60} 61 62func randomID(n int) string { 63 b := make([]rune, n) 64 for i := range b { 65 b[i] = letters[rand.Intn(len(letters))] 66 } 67 return string(b) 68} 69 70func PostRequests(w http.ResponseWriter, r *http.Request){ 71 ctx := appengine.NewContext(r) 72 body, err := ioutil.ReadAll(r.Body) 73 if err != nil { 74 fmt.Println("io error") 75 return 76 } 77 //url := r.FormValue("url") 78 userId := r.FormValue("userId") 79 //goon := goon.NewGoon(r) 80 log.Infof(ctx, "--aaaaaa--") 81 data_URL:=[]URLs{} 82 goon := goon.NewGoon(r) 83 //Test00:=make([]URLs,0,5) 84 for i:=0; i<10;i++{ 85 //for _, url := range Test00{ 86 id := randomID(5) 87 log.Infof(ctx, "--bbbbbb--") 88 89 for { 90 data_URL := &URLs{ID: id} 91 //test := &URLs{ID:id} 92 if err := goon.Get(data_URL); err != nil { 93 if err == datastore.ErrNoSuchEntity { 94 //log.Infof(ctx, "--cccccc--") 95 break 96 } 97 } 98 id = randomID(5) 99 } 100 data_URL = append(data_URL,URLs{ 101 ID[i]:id, 102 //URLstring:URLstring, 103 ShortenURL:"test/"+id, 104 },) 105 106 log.Infof(ctx,data_URL[i].ID) 107 log.Infof(ctx,data_URL[i].URLstring) 108 log.Infof(ctx,data_URL[i].ShortenURL) 109 110 } 111 112 data:= &ShortURLs_API{ 113 Result:"OK", 114 URLs:data_URL, 115 USERID:userId, 116 } 117 118 log.Infof(ctx,data.URLs[0].ID) 119 log.Infof(ctx,data.URLs[0].ShortenURL) 120 log.Infof(ctx,data.URLs[0].URLstring) 121 122 123 err = json.Unmarshal(body, &data) 124 if err != nil { 125 err = json.Unmarshal(body,&data) 126 http.Error(w, err.Error(), 500) 127 return 128 } 129 log.Infof(ctx,data.URLs[0].ID) 130 log.Infof(ctx,data.URLs[0].ShortenURL) 131 log.Infof(ctx,data.URLs[0].URLstring) 132 133 134 output, err := json.Marshal(data) 135 if err != nil { 136 http.Error(w, err.Error(), 500) 137 return 138 } 139 w.Header().Set("content-type", "application/json") 140 w.Write(output) 141 142 _, err = goon.Put(data) 143 if err != nil { 144 w.WriteHeader(http.StatusInternalServerError) 145 return 146 } 147 148}

補足情報(FW/ツールのバージョンなど)

runtime: go111

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

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

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

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

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

guest

回答1

0

自己解決

新しいループを作ってその中にPutを入れて回したらできました

投稿2019/11/13 00:47

kourei000

総合スコア4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問