Go에서 배열/슬라이스 불변성 처리
Go에서는 다양한 요소 유형의 배열이나 슬라이스를 작업하는 데 어려움을 겪을 수 있습니다. 다음 예를 고려해 보세요.
func printItems(header string, items []interface{}, fmtString string) { // ... } func main() { var iarr = []int{1, 2, 3} var farr = []float{1.0, 2.0, 3.0} printItems("Integer array:", iarr, "") printItems("Float array:", farr, "") }
이 코드를 컴파일할 때 Go의 배열/슬라이스 공분산 부족으로 인해 오류가 발생합니다. 구체적으로 말하면:
prog.go:26: cannot use iarr (type []int) as type []interface { } in function argument prog.go:27: cannot use farr (type []float) as type []interface { } in function argument
유연한 솔루션
이 문제를 우회하는 한 가지 접근 방식은 이러한 배열/슬라이스의 공통 속성을 추상화하는 인터페이스를 정의하는 것입니다.
package main import "fmt" type List interface { At(i int) interface{} Len() int } func printItems(header string, items List) { for i := 0; i < items.Len(); i++ { fmt.Print(items.At(i), " ") } fmt.Println() } type IntList []int type FloatList []float64 func (il IntList) At(i int) interface{} { return il[i] } func (fl FloatList) At(i int) interface{} { return fl[i] } func (il IntList) Len() int { return len(il) } func (fl FloatList) Len() int { return len(fl) } func main() { var iarr = []int{1, 2, 3} var farr = []float64{1.0, 2.0, 3.0} printItems("Integer array:", IntList(iarr)) printItems("Float array:", FloatList(farr)) }
이러한 컬렉션의 동작을 인터페이스에 캡슐화하면 컬렉션에 액세스하고 조작할 수 있습니다. 일반적으로. 이 접근 방식은 Go 내에서 관용적으로 유지되면서도 다양한 데이터 유형을 처리하는 데 필요한 유연성을 제공합니다.
위 내용은 다양한 요소 유형으로 작업할 때 Go의 배열/슬라이스 불변성을 어떻게 처리합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!