programing

Go에서 [] byte 또는 string을 언제 사용합니까?

projobs 2021. 1. 16. 09:11
반응형

Go에서 [] byte 또는 string을 언제 사용합니까?


자주 Go 애플리케이션을 작성하면서 []byte또는을 선택할 수 있습니다 string. 의 명백한 변경 가능성 외에도 []byte어떤 것을 사용할지 어떻게 결정합니까?

예제에 대한 몇 가지 사용 사례가 있습니다.

  1. 함수는 새로운 []byte. 슬라이스 용량이 고정되어 있는데 문자열을 반환하지 않는 이유는 무엇입니까?
  2. []bytestring기본적 으로 제대로 인쇄되지 않으므로 string로깅 목적으로 캐스팅하는 경우가 많습니다 . 항상 그래야 string했습니까?
  3. prepending을하면 []byte항상 새로운 기본 배열이 생성됩니다. 앞에 추가 할 데이터가 일정하다면 왜 이것이 string?

내 조언은 텍스트로 작업 할 때 기본적으로 문자열을 사용하는 것입니다. 그러나 다음 조건 중 하나가 적용되는 경우 대신 [] byte를 사용하십시오.

  • [] 바이트의 가변성은 필요한 할당 수를 크게 줄입니다.

  • [] byte를 사용하는 API를 다루고 있으며 문자열로의 변환을 피하면 코드가 단순화됩니다.


다른 비 ML 스타일 언어보다 Go에서 유형이 의미와 용도를 전달하는 데 사용된다는 느낌을 받았습니다. 따라서 사용할 유형을 파악하는 가장 좋은 방법은 데이터 무엇인지 스스로에게 물어 보는 것 입니다 .

문자열은 텍스트를 나타냅니다. 그냥 텍스트. 인코딩은 걱정할 필요가 없으며 '문자'가 실제로 있는지에 관계없이 모든 작업이 문자 단위로 작동합니다.

배열은 이진 데이터 또는 해당 데이터의 특정 인코딩을 나타냅니다. []byte데이터가 단지 바이트 스트림이거나 단일 바이트 문자 스트림임을 의미합니다. []int16정수 스트림 또는 2 바이트 문자 스트림을 나타냅니다.

바이트를 처리하는 거의 모든 것이 문자열을 처리하는 함수도 있고 그 반대도 마찬가지라는 사실을 감안할 때 데이터로 무엇을해야하는지 묻는 대신 데이터가 무엇을 나타내는 지 묻는 것이 좋습니다. 그런 다음 병목 현상을 파악하면 최적화하십시오.

편집 : 이 게시물 은 유형 변환을 사용하여 문자열을 분리하는 이유를 얻은 곳입니다.


  1. 한 가지 차이점은 반환 된 데이터 []byte는 잠재적으로 다른 / 새 데이터 (새 메모리 할당 없음)를 보유하기 위해 재사용 될 수 있지만 string불가능 하다는 것 입니다. 또 다른 하나는 gc 구현에서 적어도 string한 단어 더 작은 엔티티라는 것 []byte입니다. 이러한 항목이 많은 경우 메모리를 절약하는 데 사용할 수 있습니다.

  2. 로깅 []bytestring위해로 캐스팅 할 필요가 없습니다. 전형적인 '텍스트'동사처럼 %s, %q에 대한 작업 string[]byte표현 똑같이. 다른 방향에서도 동일하게 예를 들어 %x또는 % 02x.

  3. 연결이 수행되는 이유와 결과가 나중에 무언가 / 다른 곳에서 다시 결합되는지에 따라 다릅니다. 그렇다면 []byte더 나은 성능을 발휘할 수 있습니다.

참조 URL : https://stackoverflow.com/questions/10826651/when-to-use-byte-or-string-in-go

반응형