Go에서 구조체 내의 슬라이스를 수정하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-11-21 06:00:14
원래의
399명이 탐색했습니다.

How to Modify a Slice Within a Struct in Go?

구조체의 슬라이스에서 요소를 제거하는 방법

구조체 내의 슬라이스에서 요소를 제거하려면 몇 가지 주요 고려 사항을 해결해야 합니다.

문제: 슬라이스 길이가 변경되지 않은 상태로 유지됩니다

제공된 코드 조각에서 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿