program story

Go에서 배열을 슬라이스로 변환

inputbox 2021. 1. 6. 08:16
반응형

Go에서 배열을 슬라이스로 변환


는 인터 웹에서 매우 일반적인 일이 풍부한 예제 될 것 같은이 보이지만 나는 변환하는 방법의 예를 찾을 수 없습니다 [32]byte로를 []byte.

배열을 반환하는 외부 라이브러리에서 호출하는 함수가 있습니다.

func Foo() [32]byte {...}

그런 다음 추가 처리를 위해 해당 결과를 다른 함수에 전달해야합니다.

func Bar(b []byte) { ... }

유감스럽게도 내가 전화하려고하면

d := Foo()
Bar(d)

나는 얻다

cannot convert d (type [32]byte) to type []byte

하기

[]byte(d)

그다지 좋지 않습니다. 특히 데이터의 복사본을 만들지 않고 어떻게해야합니까 (내가 수행하는 모든 작업이 데이터를 전달하는 데이 데이터를 복사하는 것은 어리석은 것 같습니다).


이것은 작동합니다.

func Foo() [32]byte {
    return [32]byte{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}
}

func Bar(b []byte) {
    fmt.Println(string(b))
}

func main() {
    x := Foo()
    Bar(x[:])
}

그리고 기본 버퍼의 복사본을 생성하지 않습니다.


arr[:]  // arr is an array; arr[:] is the slice of all elements

이것은 트릭을 할 것입니다.

slice := array[0:len(array)]

또한 기본 버퍼 복사를 방지합니다.


일반적으로 다음을 사용하여 범위에 따라 배열을 분할 할 수 있습니다 :.

var a [32]byte 
slice := a[:]

보다 일반적으로 다음 배열의 경우 :

var my_array [LENGTH]TYPE

다음과 같이 작성하여 다양한 크기의 슬라이스를 생성 할 수 있습니다.

my_array[START_SLICE:END_SLICE]

귀하의 경우에는 START_SLICE하한과 END_SLICE같고 상한 과 같으면 생략 하십시오.

a[0:32] 

기본 배열의 슬라이스를 생성하며 다음과 같습니다.

a[0:]
a[:32]
a[:]

참조 URL : https://stackoverflow.com/questions/28886616/convert-array-to-slice-in-go

반응형