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

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

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

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

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

492閲覧

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

kourei000

総合スコア4

Go

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

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2019/11/08 00:36

編集2019/11/08 01:54

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

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

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

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

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

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

guest

回答2

0

自己解決

appendを使ってループさせたらできました。

投稿2019/11/13 00:48

kourei000

総合スコア4

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

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

0

https://teratail.com/questions/221839

ここで解決済になってますよ

投稿2019/11/08 00:52

y_waiwai

総合スコア87719

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

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

kourei000

2019/11/08 00:56

すいません、間違えて解決済みにしてしまいました…
y_waiwai

2019/11/08 01:02

なら、その旨書いときましょうよ。また、解決済は取り消せます そうじゃないと、こっちのほうが間違えて質問立ててしまっただけ、と判断されますぜ
kourei000

2019/11/08 01:33

ありがとうございます。 とりあえずは修正でこちらのURLを貼っておきました 初めて投稿するので対応にも困ってました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問