> 백엔드 개발 > Golang > 다양한 요소 유형으로 작업할 때 Go의 배열/슬라이스 불변성을 어떻게 처리합니까?

다양한 요소 유형으로 작업할 때 Go의 배열/슬라이스 불변성을 어떻게 처리합니까?

Susan Sarandon
풀어 주다: 2024-12-18 01:47:10
원래의
716명이 탐색했습니다.

How to Handle Go's Array/Slice Invariance When Working with Different Element Types?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿