Goで配列の中にrandomで作成したIDと入力したURLをループで回して出力させたいです
リクエスト
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の配列を用いて複数同時に出力させるものを作りたいのですが、なかなかうまくいきません
エラーは出ないのですが、Postmanで出力しても表示されません。
ループの書き方に問題があるのか、それとも配列の定義が間違っているのかを知りたいです
よろしくお願いします
該当のソースコード
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 hoges2 struct{ 33 Result string `json:"result"` 34 URLs []hoge `json:"urls"` 35 USERID string `json:"userId"` 36} 37 38type hoge struct{ 39 ID string `json:"id"` 40 URLstring string `json:"urlstring"` 41 ShortenURL string `json:"shortenUrl"` 42} 43func main() { 44 var err error 45 baseURL, err = url.Parse(os.Getenv("BASE_URL")) 46 if err != nil { 47 panic("base URL is invalid") 48 } 49 r := chi.NewRouter() 50 r.Use(middleware.RequestID) 51 r.Use(middleware.RealIP) 52 r.Use(middleware.Logger) 53 r.Use(middleware.Recoverer) 54 r.Use(middleware.Timeout(60 * time.Second)) 55 56 r.Post("/short-urls-apis",PostRequest4) 57 58 appengine.Main() 59} 60 61func PostRequest4(w http.ResponseWriter, r *http.Request){ 62 ctx := appengine.NewContext(r) 63 64 body, err := ioutil.ReadAll(r.Body) 65 if err != nil { 66 fmt.Println("io error") 67 return 68 } 69 70 userId := r.FormValue("userId") 71 goon := goon.NewGoon(r) 72 log.Infof(ctx, "--test1--") 73 74 var a hoges2 75 a.URLs = make([]hoge,0) 76 //var b hoge 77 //a.URLs = make([]map[string]string,0) 78 79 // var (a = &hoges2{ 80 // Result: "success", 81 // URLs:[]hoge{ 82 // b, 83 // }, 84 // USERID: userId, 85 // }) 86 for _, url := range a.URLs{ 87 log.Infof(ctx, "--aaaaaa--") 88 id := randomID(5) 89 log.Infof(ctx, id) 90 for { 91 b := &hoge{ID: id} 92 //test := &hoge{ID:id} 93 if err := goon.Get(b); err != nil { 94 if err == datastore.ErrNoSuchEntity { 95 break 96 } 97 } 98 id = randomID(5) 99 } 100 log.Infof(ctx, id) 101 b := hoge{ 102 ID: id, 103 URLstring: url.URLstring, 104 ShortenURL:"test/"+id, 105 } 106 a.URLs = append(a.URLs,b) 107 108 } 109 a = hoges2{ 110 Result: "success", 111 URLs: a.URLs, 112 USERID: userId, 113 } 114 // a = hoges2{ 115 // Result: "success", 116 // URLs:[]hoge{ 117 // ID: b.ID, 118 // URLstring: b.URLstring, 119 // ShortenURL:"test/"+b.ID, 120 // }, 121 // USERID: userId, 122 // } 123 log.Infof(ctx, "--test3--") 124 err = json.Unmarshal(body, &a) 125 if err != nil { 126 err = json.Unmarshal(body,&a) 127 http.Error(w, err.Error(), 500) 128 return 129 } 130 // output1, err := json.Marshal(a) 131 // if err != nil { 132 // http.Error(w, err.Error(), 500) 133 // return 134 // } 135 w.Header().Set("content-type", "application/json") 136 fmt.Fprintln(w,a) 137 //w.Write(output1)
補足情報(FW/ツールのバージョンなど)
runtime: go111
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。