Go에서 슬라이스 조작 이해
Go에서는 슬라이스를 구조체의 속성으로 조작할 때 값 전달을 고려하는 것이 중요합니다. 특정 상황에서는 메서드 내의 슬라이스에 추가하는 것이 실패하는 것처럼 보일 수 있습니다. 이에 대한 이유를 알아보고 해결책을 찾아보겠습니다.
Go 구조체의 값 전달
Go에서는 모든 것이 값으로 전달됩니다. 즉, 복사본이 생성됩니다. 전달된 각 값에 대해. 결과적으로 메서드 내의 복사본에 대한 수정 사항은 원래 값에 영향을 주지 않습니다.
Test3: 실패한 추가 시도
다음 코드를 고려하세요.
type Test3 struct { all []int } func (c Test3) run() []int { c.combo() return c.all } func (c Test3) combo() { for i := 0; i < 2; i++ { c.all = append(c.all, i) fmt.Println("Test3 step", i + 1, c.all) } }
Test3.run()을 호출하면 c.all이 수정되지 않은 것으로 나타납니다. 이는 콤보() 메서드가 Test3 복사본에서 작동하고 콤보() 내에서 변경된 내용이 원래 값으로 다시 전파되지 않기 때문입니다.
해결책: 포인터 수신기 사용
이 문제를 해결하려면 콤보() 메서드에 대한 포인터 수신기를 사용하세요.
func (c *Test3) combo() { for i := 0; i < 2; i++ { c.all = append(c.all, i) fmt.Println("Test3 step", i + 1, c.all) } }
다음을 사용하여 포인터 수신기를 사용하는 경우 콤보()가 원래 Test3 값을 수정하고 메서드가 반환될 때 변경 사항이 반영되는지 확인하세요.
위 내용은 Go 구조체 메서드에서 슬라이스에 추가하는 것이 항상 작동하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!