Goのスライス部分で解決がしたい&DataStoreに表示させたい
こんにちは
Goのスライスでリクエストを複数表示する事ができたのでGoogleCloudPlatFormのdatastoreで
URLs.ID | URLs.URL | URLs.ShotenURL | USERID |
---|---|---|---|
atssd | https://golang.org/pkg/net/http/1 | test/atssd | aaaaaaa |
YyySj | https://golang.org/pkg/net/http/2 | test/YyySj | aaaaaaa |
Yfsaf | https://golang.org/pkg/net/http/3 | test/Yfsaf | aaaaaaa |
と表示させたいのですが、deployしてPOSTすると
URLs.ID | URLs.URL | URLs.ShotenURL | USERID |
---|---|---|---|
["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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。