Go에서 [] byte 또는 string을 언제 사용합니까?
자주 Go 애플리케이션을 작성하면서 []byte
또는을 선택할 수 있습니다 string
. 의 명백한 변경 가능성 외에도 []byte
어떤 것을 사용할지 어떻게 결정합니까?
예제에 대한 몇 가지 사용 사례가 있습니다.
- 함수는 새로운
[]byte
. 슬라이스 용량이 고정되어 있는데 문자열을 반환하지 않는 이유는 무엇입니까? []byte
string
기본적 으로 제대로 인쇄되지 않으므로string
로깅 목적으로 캐스팅하는 경우가 많습니다 . 항상 그래야string
했습니까?- prepending을하면
[]byte
항상 새로운 기본 배열이 생성됩니다. 앞에 추가 할 데이터가 일정하다면 왜 이것이string
?
내 조언은 텍스트로 작업 할 때 기본적으로 문자열을 사용하는 것입니다. 그러나 다음 조건 중 하나가 적용되는 경우 대신 [] byte를 사용하십시오.
[] 바이트의 가변성은 필요한 할당 수를 크게 줄입니다.
[] byte를 사용하는 API를 다루고 있으며 문자열로의 변환을 피하면 코드가 단순화됩니다.
다른 비 ML 스타일 언어보다 Go에서 유형이 의미와 용도를 전달하는 데 사용된다는 느낌을 받았습니다. 따라서 사용할 유형을 파악하는 가장 좋은 방법은 데이터 가 무엇인지 스스로에게 물어 보는 것 입니다 .
문자열은 텍스트를 나타냅니다. 그냥 텍스트. 인코딩은 걱정할 필요가 없으며 '문자'가 실제로 있는지에 관계없이 모든 작업이 문자 단위로 작동합니다.
배열은 이진 데이터 또는 해당 데이터의 특정 인코딩을 나타냅니다. []byte
데이터가 단지 바이트 스트림이거나 단일 바이트 문자 스트림임을 의미합니다. []int16
정수 스트림 또는 2 바이트 문자 스트림을 나타냅니다.
바이트를 처리하는 거의 모든 것이 문자열을 처리하는 함수도 있고 그 반대도 마찬가지라는 사실을 감안할 때 데이터로 무엇을해야하는지 묻는 대신 데이터가 무엇을 나타내는 지 묻는 것이 좋습니다. 그런 다음 병목 현상을 파악하면 최적화하십시오.
편집 : 이 게시물 은 유형 변환을 사용하여 문자열을 분리하는 이유를 얻은 곳입니다.
한 가지 차이점은 반환 된 데이터
[]byte
는 잠재적으로 다른 / 새 데이터 (새 메모리 할당 없음)를 보유하기 위해 재사용 될 수 있지만string
불가능 하다는 것 입니다. 또 다른 하나는 gc 구현에서 적어도string
한 단어 더 작은 엔티티라는 것[]byte
입니다. 이러한 항목이 많은 경우 메모리를 절약하는 데 사용할 수 있습니다.로깅
[]byte
을string
위해로 캐스팅 할 필요가 없습니다. 전형적인 '텍스트'동사처럼%s
,%q
에 대한 작업string
및[]byte
표현 똑같이. 다른 방향에서도 동일하게 예를 들어%x
또는% 02x
.연결이 수행되는 이유와 결과가 나중에 무언가 / 다른 곳에서 다시 결합되는지에 따라 다릅니다. 그렇다면
[]byte
더 나은 성능을 발휘할 수 있습니다.
참조 URL : https://stackoverflow.com/questions/10826651/when-to-use-byte-or-string-in-go
'programing' 카테고리의 다른 글
모바일 사파리에서 iFrame을 올바르게 표시하는 방법 (0) | 2021.01.16 |
---|---|
C ++ 클래스를 JSON으로 변환 (0) | 2021.01.16 |
비공개 GitHub 저장소에 대한 액세스 권한을 부여하려면 어떻게해야합니까? (0) | 2021.01.16 |
Swagger로 정적 문서 생성 (0) | 2021.01.16 |
jQuery .data ()는 어떻게 작동합니까? (0) | 2021.01.16 |