구조체의 슬라이스에서 요소를 제거하는 방법
구조체 내의 슬라이스에서 요소를 제거하려면 몇 가지 주요 고려 사항을 해결해야 합니다.
문제: 슬라이스 길이가 변경되지 않은 상태로 유지됩니다
제공된 코드 조각에서 RemoveFriend 메소드는 친구 슬라이스에서 요소를 제거하는 것을 목표로 합니다. 그러나 슬라이스가 짧아지는 대신 슬라이스의 마지막 요소가 복제됩니다. 이는 메서드가 값 수신기를 사용하여 원래 값이 아닌 구조체의 복사본을 수정하기 때문에 발생합니다.
해결책: 포인터 수신기 활용
변경 사항을 확인하려면 메서드 내에서 원래 구조체에 영향을 미치면 포인터 수신기를 사용해야 합니다. 이를 통해 메소드가 실제 구조체 인스턴스를 수정할 수 있습니다. Go에서 포인터 수신기의 구문은 func(receiver *struct_name)입니다.
예:
type Guest struct { id int name string surname string friends []int } func (g *Guest) removeFriend(id int) { for i, other := range g.friends { if other == id { g.friends = append(g.friends[:i], g.friends[i+1:]...) break } } }
설명:
포인터 수신기(*Guest)를 활용하여 이제 RemoveFriend 메소드는 원래 Guest 구조체의 친구 슬라이스를 수정합니다.
관용적인 수신기 이름 지정
중요합니다. self 및 this와 같은 수신자 이름은 Go에서 일반적으로 사용되지 않습니다. 대신, 메소드의 의도를 전달하기 위해 g 또는 guest와 같은 보다 구체적인 이름을 선호합니다.
위 내용은 Go에서 구조체 내의 슬라이스를 수정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!