Go에서 구조체의 배열 요소 제거
Go에서 구조체 배열로 작업할 때 다음을 기반으로 요소를 제거해야 할 수도 있습니다. 특정 조건. 그러나 루프 내에서 이 작업을 수행하려고 시도하면 "범위 초과" 오류가 발생할 수 있습니다.
다음 예를 고려하세요.
type Config struct { Applications []Application } // config is initialized from a JSON file config = new(Config) _ = decoder.Decode(&config) for i, application := range config.Applications { if i == 1 { config.Applications = _removeApplication(i, config.Applications) } } func _removeApplication(i int, list []Application) []Application { if i < len(list)-1 { list = append(list[:i], list[i+1:]...) } else { log.Print(list[i].Name) list = list[:i] } return list }
이 코드는 두 번째 요소(색인 1)를 제거하려고 시도합니다. ) 응용 프로그램 배열에서. 그러나 이 루프에서 요소를 삭제하면, 특히 현재 요소가 삭제된 경우 삭제 후 요소 위치 이동으로 인해 색인 생성 오류가 발생할 수 있습니다.
권장 솔루션
인덱싱 문제를 방지하려면 역순으로 반복하는 것이 좋습니다.
for i := len(config.Applications) - 1; i >= 0; i-- { application := config.Applications[i] // Condition to decide if current element has to be deleted: if haveToDelete { config.Applications = append(config.Applications[:i], config.Applications[i+1:]...) } }
이 하향 루프는 요소가 삭제되는 항목이 올바르게 이동되면 범위를 벗어나는 문제가 발생하지 않습니다.
위 내용은 Go의 구조체 배열에서 요소를 안전하게 제거하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!