>백엔드 개발 >Golang >Go에서 문자열 조각을 문자열 포인터 조각으로 변환하는 방법은 무엇입니까?

Go에서 문자열 조각을 문자열 포인터 조각으로 변환하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-14 20:38:19569검색

How to Convert a Slice of Strings to a Slice of String Pointers in Go?

문자열 슬라이스를 포인터 슬라이스로 변환

이 작업의 목표는 문자열 슬라이스를 다음을 포함하는 슬라이스로 변환하는 것입니다. 각 문자열에 대한 포인터입니다. 구체적인 예를 살펴보겠습니다.

values1 := []string{"a", "b", "c"}
var values2 []*string

for _, v := range values1 {
    fmt.Printf("%p | %T\n", v, v)
    values2 = append(values2, &v)
}
fmt.Println(values2)

초기 혼란

v가 문자열임에도 불구하고 루프 전체에서 동일한 메모리 주소에 유지된다는 것은 직관에 반하는 것처럼 보일 수 있습니다. . 이는 이 경우 v가 문자열에 대한 포인터가 아니라 value1에 있는 각 문자열의 복사본이기 때문입니다.

두 가지 가능한 솔루션

해결 방법 1:

for i, _ := range values1 {
    values2 = append(values2, &values1[i])
}

이 메서드는 원래 값1을 값2로 슬라이스합니다. 그러나 이제 value2에는 value1을 직접 가리키는 주소가 포함되어 있으므로 value2가 존재하는 한 value1은 메모리에 유지됩니다.

해결책 2:

for _, v := range values1 {
    v2 := v
    values2 = append(values2, &v2)
}

이 대체 솔루션은 각 반복마다 임시 지역 변수(v2)를 생성하고 여기에 v 값을 할당한 다음 v2에 포인터를 추가하여 가치2. 이렇게 하면 값1이 값2와 독립적이고 값1에 대한 수정 사항이 값2에 영향을 미치지 않습니다.

위 내용은 Go에서 문자열 조각을 문자열 포인터 조각으로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.