>백엔드 개발 >Golang >CSV 데이터를 Go 구조체로 효율적으로 비정렬화하는 방법은 무엇입니까?

CSV 데이터를 Go 구조체로 효율적으로 비정렬화하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-05 17:18:10802검색

How to Efficiently Unmarshal CSV Data into Go Structs?

CSV 레코드를 Go 구조체로 비정렬화

질문:

어떻게 자동으로 레코드를 비정렬화할 수 있습니까? CSV 파일에서 Go로 구조체?

예를 들어 다음 Go 구조체를 고려하세요.

type Test struct {
  Name string
  Surname string
  Age int
}

그리고 레코드가 포함된 CSV 파일:

John;Smith;42
Piter;Abel;50

이를 비정렬화하는 효율적인 방법이 있습니까? 각 레코드를 수동으로 구문 분석하고 할당하지 않고 레코드를 구조체로 가치?

답변:

예, gocarina/gocsv를 활용하는 것이 효과적인 방법입니다. 인코딩/json에서 제공하는 기능과 유사한 사용자 정의 유형에 대한 역마샬링 및 마샬링 기능을 생성할 수 있습니다.

예:

type Client struct {
    Id      string `csv:"client_id"` // .csv column headers
    Name    string `csv:"client_name"`
    Age     string `csv:"client_age"`
}

func main() {
    in, err := os.Open("clients.csv")
    if err != nil {
        panic(err)
    }
    defer in.Close()

    clients := []*Client{}

    if err := gocsv.UnmarshalFile(in, &clients); err != nil {
        panic(err)
    }
    for _, client := range clients {
        fmt.Println("Hello, ", client.Name)
    }
}

gocsv 사용 , 사용자 정의 unmarshaller 및 marshaller 함수가 클라이언트 유형에 대해 정의됩니다. 이러한 함수는 CSV 형식과 Go 구조체 사이를 효과적으로 변환하여 역마샬링 프로세스를 간단하고 효율적으로 만듭니다.

위 내용은 CSV 데이터를 Go 구조체로 효율적으로 비정렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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