私は GoLang でかなり新しいので、助けが必要です。シンプルなAPIアプリを作っています。
API によって構造体をスライスに渡すと、次のようになります。
type Struct struct {
//some records
}
var structs []Struct //slice
func SetStruct(w http.ResponseWriter, req *http.Request) {
var st Struct
decoder := json.NewDecoder(req.Body)
decoder.Decode(&st)
emails = append(structs, st)
json.NewEncoder(w).Encode(structs)
}
そして、その機能は正常に動作します。
2 番目にやりたいことは、NR
パラメタに依存する構造体をスライスから削除することです。私はそれを呼びますPOST
。メソッドは次のようになります。
func SendStruct(w http.ResponseWriter, req *http.Request) {
var st Email
decoder := json.NewDecoder(req.Body)
decoder.Decode(&st)
for i, item := range emails {
if item.NR == st.NR {
structs = append(structs[:i], structs[i+1:]...)
//if numbers match, delete from slice emails
}
}
json.NewEncoder(w).Encode(emails)
}
そして、私が(例えば)のようなシーンを持っているとき、それはかなりうまくいきます:
{"NR": "22"}
{"NR": "33"}
{"NR": "22"}
を削除したいとき"33"
は、かなりうまくいきます。(両方とも)を削除したい場合"22"
、複雑になり始めます。パス22
するとアプリがクラッシュするためです。
(item.NR
からSendStruct
) で、範囲外の変数を取得します。break
にpaarmetr を追加するとfor
、正常に動作しますが、構造体を 1 つずつ削除することしかできません。22
1 回の API 呼び出しですべてを削除したい。私が得るエラー:
http: パニック サービング [::1]:52163: ランタイム エラー: スライス境界が範囲外です
アドバイスをありがとう!