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

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

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

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

Q&A

解決済

1回答

1810閲覧

この記述の内容を教えてください。

ibabababa

総合スコア13

Go

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

0グッド

0クリップ

投稿2019/01/03 09:15

編集2019/01/03 10:10

サーバサイド言語はまるで素人なため、ポインタなどの概念が未だうまく捕らえられていません。
加えて、フロントサイドで使わないような複雑な型変換などが多く、つまずいています。

go

1type Items struct { 2 Title string `json:"title"` 3 Content string `json:"content"` 4 Status string `json:"status"` 5 Categories [1]int `json:"categories"` 6}

go

1title := "title" 2content := "<div>content</div>" 3status := "publish" 4categories := [1]int{1} 5 6items := Items{Title: title, Content: content, Status: status, Categories: categories} 7json, err := json.Marshal(&items) 8if err != nil { 9 fmt.Print("json parce error") 10} 11body := []byte(json) 12 13// Post 14req, err := http.NewRequest( 15 "POST", 16 API_URL, 17 bytes.NewBuffer(data), 18) 19if err != nil { 20 fmt.Println("url scarapping failed") 21} 22 23// Content-Type 設定 24req.Header.Set("Content-Type", "application/json") 25req.SetBasicAuth(USER, PASS) 26 27client := &http.Client{} 28resp, err := client.Do(req) 29if err != nil { 30 fmt.Println(err) 31} 32fmt.Println(resp) 33defer resp.Body.Close()

構造体作って、jsonにして、とか全体の流れはわかるのですが、
json.Marshal(&items)
[]byte(json)
bytes.NewBuffer(body)
は何のためにしているのかなどがよくわかりません。

ご教授お願いします。

------ 追記 -------
全行です↓

go

1package main 2 3import ( 4 "bytes" 5 "encoding/json" 6 "fmt" 7 "net/http" 8) 9 10type Items struct { 11 Title string `json:"title"` 12 Content string `json:"content"` 13 Status string `json:"status"` 14 Categories [1]int `json:"categories"` 15} 16 17func main() { 18 const URL = "https://example.com/wp-json/wp/v2/posts/" 19 const USER = "ユーザ" 20 const PASS = "パス" 21 items := Items{Title: "title from api2", Content: "content from api", Status: "publish", Categories: [1]int{1}} 22 23 json, err := json.Marshal(&items) 24 if err != nil { 25 fmt.Print("json parce error") 26 } 27 data := []byte(json) 28 29 // Post 30 req, err := http.NewRequest( 31 "POST", 32 URL, 33 bytes.NewBuffer(data), 34 ) 35 if err != nil { 36 fmt.Println("url scarapping failed") 37 } 38 39 // Content-Type 設定 40 req.Header.Set("Content-Type", "application/json") 41 req.SetBasicAuth(USER, PASS) 42 client := &http.Client{} 43 resp, err := client.Do(req) 44 if err != nil { 45 fmt.Println(err) 46 } 47 fmt.Println(resp) 48 defer resp.Body.Close() 49} 50

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/01/03 09:45

何をしたい処理ですか? data := bytes.NewBuffer(body) のdataは何に使うんでしょうか? その後のコードもないので判断できません。 目的がわからないと、何のためにしている処理か答えようがないです。
ibabababa

2019/01/03 09:49

修正依頼ありがとうございます。 追記いたしました。
退会済みユーザー

退会済みユーザー

2019/01/03 09:59

まず、下記の部分コンパイル通りますか? req, err := http.NewRequest( "POST", API_URL, bytes.NewBuffer(data), ) NewRequestの第三引数の型が違うような気がするんですが。 API_URLも中身定義されてないように思うのですが未定義エラー出ないでしょうか?
ibabababa

2019/01/03 10:08

書き方が悪かったです。 > NewRequestの第三引数の型が違うような気がするんですが。 現状の型はどうなっているのか。望ましい型を教えていただけるとありがたいです。 コンパイルエラーは出ません。 > API_URLも中身定義されてないように思う 色々端折っちゃったので、全行載せますね。
guest

回答1

0

ベストアンサー

json.Marshal(&items)

まず、下記の部分コンパイル通りますか?

すみません。
これは私の誤解でした。
*Buffer型で良いようです。

json.Marshal(&items)

Goの構造体をJSONに準ずる文字列に変換する処理です。
返却は文字列型でなくバイト型ですが。

[]byte(json)

json を[]byte型にキャストします。
ただすでに json は[]byte型のはずなのでこの処理は不要かと。

投稿2019/01/03 10:29

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2019/01/03 10:31

途中で投稿してしまったのでここに続けます。 bytes.NewBuffer(body) []byte型から*buffer型を返す処理です。
ibabababa

2019/01/03 11:16

回答ありがとうございます! だいぶスッキリしました。 json.Marshalの引数が&itemsとポインタ変数になっていますが、これをitemsとして実行したところ、問題なく通りました。 json.Marshalの引数はアドレスでもその値でも関係ないのでしょうか? &itemsとitemsとの違いがありましたら教えていただきたいです。
退会済みユーザー

退会済みユーザー

2019/01/03 11:47

Marshalの引数の型はinterfaceです。どんな型でもコンパイルが通ります。 Goは静的型付け言語としては緩い部類なのでinterface型引数が頻繁に出てきます。 私は試してないですがitemsでも&itemsでも意図通り動作するならどちらでも良いように作ってあるということでしょう。
ibabababa

2019/01/03 12:31

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問