반응형
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
반응형
'program story' 카테고리의 다른 글
'System.Web.Http.GlobalConfiguration'의 형식 이니셜 라이저에서 예외가 발생했습니다. (0) | 2021.01.06 |
---|---|
Pandas에서 연속 행의 차이로 인한 열 추가 (0) | 2021.01.06 |
Chart.js — 임의의 수직선 그리기 (0) | 2021.01.06 |
Django FileField : 파일 이름 만 반환하는 방법 (템플릿에서) (0) | 2021.01.05 |
SQL Union에서 중복 제거 (0) | 2021.01.05 |