我在函数DeleteCharactersID
中出错,它删除了整个多维数组,但是我需要使用我给它的id删除单个元素或值。
这是我的domain.go
type CharactersBB []struct {
CharID int `json:"char_id"`
Name string `json:"name"`
Birthday string `json:"birthday"`
Occupation []string `json:"occupation"`
Img string `json:"img"`
Status string `json:"status"`
Nickname string `json:"nickname"`
Appearance []int `json:"appearance"`
Portrayed string `json:"portrayed"`
Category string `json:"category"`
BetterCallSaulAppearance []interface{} `json:"better_call_saul_appearance"`
}
这是我的services.go
var characters []domain.CharactersBB
func DeleteCharactersID(i string) ([]domain.CharactersBB, error) {
id, err := validateID(i)
if err != nil {
return []domain.CharactersBB{}, ErrorInvalidID
}
c, err := searchCharacter(id)
if err != nil {
return []domain.CharactersBB{}, err
}
for i := 0; i < len(characters); i++ {
for j := 0; j < len(characters[i]); j++ {
if characters[i][j].CharID == c[j].CharID {
characters[j] = append(characters[i][:j], characters[i][j+1:]...)
break
}
}
}
fmt.Printf("%T\n", c)
return characters, nil
}
func validateID(id string) (int, error) {
num, err := strconv.Atoi(id)
if err != nil {
return -1, err
}
return num, nil
}
func searchCharacter(id int) (domain.CharactersBB, error) {
var c domain.CharactersBB
for a := range characters {
if c[a].CharID == id {
return c, nil
}
}
return domain.CharactersBB{}, ErrorCharactersNotFound
}
func init() {
var c domain.CharactersBB
url := baseurl + "characters"
resp, _ := http.Get(url)
Data, _ := ioutil.ReadAll(resp.Body)
json.Unmarshal([]byte(Data), &c)
characters = append(characters, c)
//s, _ := json.MarshalIndent(characters, "", "\t")
//fmt.Println(string(s))
fmt.Printf("%T\n", characters)
}
func GetCharacters() ([]domain.CharactersBB, error) {
return characters, nil
}
最佳答案
在这一行:
characters[j] = append(characters[i][:j], characters[i][j+1:]...)
您的内部数组计数器是
j
,您的外部数组计数器是i
,因此看起来应该是这样的:characters[i] = append(characters[i][:j], characters[i][j+1:]...)
// ^^^ fix here
关于go - 删除多维数组中的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60836560/