Go에서 바이트 슬라이스 및 배열 추가: 문제 해결 및 솔루션
Go에서 2바이트 배열 슬라이스를 추가하면 예기치 않은 오류가 발생할 수 있습니다. 다음 코드를 고려해 보세요.
one := make([]byte, 2) two := make([]byte, 2) one[0] = 0x00 one[1] = 0x01 two[0] = 0x02 two[1] = 0x03 log.Printf("%X", append(one[:], two[:])) three := []byte{0, 1} four := []byte{2, 3} five := append(three, four)
이 코드는 다음과 같은 오류를 생성합니다.
cannot use four (type []uint8) as type uint8 in append cannot use two[:] (type []uint8) as type uint8 in append
강력한 슬라이스에 대한 Go의 평판과는 달리 이러한 오류는 설명할 수 없는 것처럼 보입니다. 이 문제를 이해하고 해결하려면 Go 프로그래밍 언어 사양을 자세히 조사해야 합니다.
사양 이해
Go 사양에 따르면 추가 기능은 S 유형의 슬라이스 s 및 T 유형의 0개 이상의 값 x. 여기서 T는 S의 요소 유형입니다. 결과는 s의 요소와 그 뒤에 요소가 있는 새로운 S 유형의 조각입니다. of x.
결정적으로 마지막 인수의 경우 슬라이스 유형 []T에 할당할 수 있는 경우 뒤에 ...가 오면 ...T 매개변수의 값으로 변경되지 않고 전달될 수 있습니다.
오류 해결
제공된 코드에서 추가할 마지막 인수 뒤에 .... 이 문제를 해결하려면, 마지막 인수로 []T...를 명시적으로 지정해야 합니다. 우리의 경우 T는 바이트이므로 코드는 다음과 같아야 합니다.
fmt.Println(append(one[:], two[:]...))
두 번째 예의 경우 비슷한 수정을 해야 합니다.
five := append(three, four...)
추가 참고 사항
결론
append 함수의 뉘앙스와 가변 인수에 대한 Go 사양의 지침을 이해함으로써 Go 및 원본 코드에서 발생하는 오류를 피하세요.
위 내용은 Go에서 바이트 슬라이스와 배열을 올바르게 추가하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!