>  기사  >  백엔드 개발  >  Go에서 서로 다른 요소 유형의 슬라이스 간에 직접 변환할 수 없는 이유는 무엇입니까?

Go에서 서로 다른 요소 유형의 슬라이스 간에 직접 변환할 수 없는 이유는 무엇입니까?

DDD
DDD원래의
2024-10-25 17:32:02278검색

Why Can't I Directly Convert Between Slices of Different Element Types in Go?

슬라이스 유형을 변환할 수 없는 이유

제공된 코드 세그먼트에서와 같이 한 유형의 슬라이스를 다른 유형으로 변환하려고 할 때 , Go는 오류를 발생시킵니다. 이 오류는 Go 사양에 정의된 특정 유형 변환 규칙으로 인해 발생합니다.

슬라이스의 기본 유형이 해당 요소의 기본 유형과 직접적인 관련이 없기 때문에 오류가 발생합니다. Foo와 Bar의 기본 유형은 동일하지만 Foo와 Bar 요소를 포함하는 슬라이스의 기본 유형은 다릅니다.

Go의 할당 가능성 규칙에 따르면 []Foo 유형의 값은 유형의 변수에 할당될 수 없습니다. []술집. 이러한 불일치로 인해 변환 오류가 발생합니다.

이 문제를 해결하려면 중간 데이터 구조를 통해 변환을 수행할 수 있습니다. 예를 들어, 다음 코드는 작동합니다:

<code class="go">type Foo struct{ A int }
type Bars []Foo

func main() {
    foos := []Foo{Foo{1}, Foo{2}}
    bars := Bars(foos)
    fmt.Println(bars)
}
</code>

출력:

[{1} {2}]

또한 안전하지 않은 패키지를 사용하면 유형 안전 검사를 우회하고 변환을 허용할 수 있습니다. 그러나 안전하지 않은 패키지는 성능과 복잡성이 주요 관심사인 예외적인 경우에만 주의해서 사용해야 합니다.

위 내용은 Go에서 서로 다른 요소 유형의 슬라이스 간에 직접 변환할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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