>  기사  >  백엔드 개발  >  안전하지 않은 패키지 없이 Go에서 엔디안을 확인하는 방법은 무엇입니까?

안전하지 않은 패키지 없이 Go에서 엔디안을 확인하는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-02 07:13:02619검색

How to Determine Endianness in Go Without the Unsafe Package?

Go에서 엔디안 결정: 안전하지 않은 패키지에 대한 대안

Go에서 머신의 엔디안을 결정하는 것은 데이터 처리 및 통신에 매우 중요합니다. 안전하지 않은 패키지는 이 작업에 대한 방법을 제공하지만 잠재적인 위험과 이식성 문제가 있습니다.

이 문제에 대해 선호되는 해결책은 Google의 Go용 TensorFlow API 기능을 활용하는 것입니다. 이 함수는 안전하지 않은 패키지에 의존하지만 버퍼를 생성하고 해당 바이트를 조작하여 엔디안을 결정하는 보다 안전한 접근 방식을 사용합니다.

다음은 엔디안 감지를 처리하는 TensorFlow API의 코드 조각입니다.

<code class="go">var nativeEndian binary.ByteOrder

func init() {
    buf := [2]byte{}
    *(*uint16)(unsafe.Pointer(&amp;buf[0])) = uint16(0xABCD)

    switch buf {
    case [2]byte{0xCD, 0xAB}:
        nativeEndian = binary.LittleEndian
    case [2]byte{0xAB, 0xCD}:
        nativeEndian = binary.BigEndian
    default:
        panic("Could not determine native endianness.")
    }
}</code>

이 코드에서:

  • nativeEndian 변수는 시스템의 엔디안을 저장하도록 정의됩니다.
  • uint16 값을 저장하기 위해 2바이트 크기의 버퍼 buf가 생성됩니다.
  • 안전하지 않은 패키지는 buf에 있는 첫 번째 요소의 메모리 포인터를 *uint16으로 캐스팅하고 여기에 0xABCD 값을 할당하는 데 사용됩니다. 이렇게 하면 버퍼에 숫자 0xABCD를 나타내는 2바이트가 포함됩니다.
  • switch 문은 buf의 바이트 순서를 비교하여 시스템의 엔디안을 결정합니다.

이 함수를 사용하여 , 안전하지 않은 패키지와 관련된 위험을 최소화하면서 머신의 엔디안을 안정적으로 결정할 수 있습니다.

위 내용은 안전하지 않은 패키지 없이 Go에서 엔디안을 확인하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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