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

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

詳細はこちら
Go

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

Q&A

解決済

1回答

1360閲覧

Goで配列の中にrandomで作成したIDと入力したURLをループで回して出力させたいです

kourei000

総合スコア4

Go

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

0グッド

0クリップ

投稿2019/11/08 00:25

Goで配列の中にrandomで作成したIDと入力したURLをループで回して出力させたいです

リクエスト
{
"url": [
"https://golang.org/pkg/net/http/1",
"https://golang.org/pkg/net/http/2",
"https://golang.org/pkg/net/http/3"
],
"userId":"aaaaaaa"
}

レスポンス
{
"result": "success",
"hoge" : [
{
"id": "atssd",
"url": "https://golang.org/pkg/net/http/1",
"shortenUrl": "test/atssd",
},
{
"id": "YyySj",
"url": "https://golang.org/pkg/net/http/2",
"shortenUrl": "test/Yyysj",
} ,
{
"id": "Yfsaf",
"url": "https://golang.org/pkg/net/http/3",
"shortenUrl": "test/Yfsaf",
}
]

"userId": "aaaaaaa"
}

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:"https://njc.bz/"+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

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

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

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

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

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

guest

回答1

0

自己解決

入力ミスによりhttps://teratail.com/questions/221841で再投稿しました
すいませんがよろしくお願いします

投稿2019/11/08 00:29

編集2019/11/08 00:58
kourei000

総合スコア4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問