문제:
문자열을 변환해야 합니다. 특히 대규모 데이터 세트를 처리할 때 메모리 복사의 성능 저하 없이 바이트 슬라이스로 복사합니다.
답변:
1단계: 메모리 복사 이해 문제
Go의 문자열은 불변입니다. 즉, 그 자리에서 수정할 수 없습니다. 따라서 []byte(string) 구문을 사용하여 문자열을 바이트 슬라이스로 변환하면 메모리 복사본이 생성됩니다.
2단계: 안전하지 않은 사용
메모리를 방지하려면 복사, 안전하지 않은 작업이 사용될 수 있습니다. 안전하지 않은 문자열 함수는 기본 문자열 데이터에 대한 포인터를 검색하는 데 사용할 수 있습니다.
<code class="go">import "unsafe" func unsafeGetBytes(s string) []byte { return (*[0x7fff0000]byte)(unsafe.Pointer( (*reflect.StringHeader)(unsafe.Pointer(&s)).Data), )[:len(s):len(s)] }</code>
설명:
추가 고려 사항:
위 내용은 Go에서 메모리 복사 없이 문자열에서 바이트 슬라이스를 검색하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!