-3

私は 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 つずつ削除することしかできません。221 回の API 呼び出しですべてを削除したい。私が得るエラー:

http: パニック サービング [::1]:52163: ランタイム エラー: スライス境界が範囲外です

アドバイスをありがとう!

4

1 に答える 1