>  기사  >  백엔드 개발  >  Go에서 SELECT * 열을 []문자열로 읽는 방법은 무엇입니까?

Go에서 SELECT * 열을 []문자열로 읽는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-10 20:30:03281검색

How to Read SELECT * Columns into a []string in Go?

Go에서 SELECT * 열을 []문자열로 읽는 작업의 복잡성

데이터 처리의 일반적인 작업은 데이터베이스 테이블에서 행을 검색하는 것입니다. 편리한 형식으로 저장하세요. Go에서는 데이터베이스/sql 패키지를 사용하여 데이터베이스와 인터페이스할 수 있습니다. 그러나 알 수 없는 유형의 다양한 열이 발생하면 문제가 발생할 수 있습니다.

sql.Rows 유형은 쿼리 결과에 대한 액세스를 제공하지만 해당 Scan 메서드는 유형이 지정된 필드가 채워질 것으로 예상합니다. 값을 문자열 조각([]string)으로 직접 변환하는 것은 간단하지 않습니다.

해결책: 인터페이스 조각 활용

이 문제를 해결하려면 다음을 생성해야 합니다. 문자열 슬라이스의 각 문자열을 가리키는 인터페이스 슬라이스([]interface{}). 여기에는 임시 슬라이스를 할당하고 각 요소가 문자열 슬라이스의 해당 요소를 가리키도록 설정하는 작업이 포함됩니다.

예제 코드:

rawResult := make([][]byte, len(cols))
result := make([]string, len(cols))

dest := make([]interface{}, len(cols)) // A temporary interface{} slice
for i, _ := range rawResult {
    dest[i] = &rawResult[i] // Put pointers to each string in the interface slice
}

일단 인터페이스 슬라이스가 준비된 경우 이를 사용하여 행을 스캔할 수 있습니다.

행 스캔 및 문자열로 변환

for rows.Next() {
    err = rows.Scan(dest...)
    if err != nil {
        fmt.Println("Failed to scan row", err)
        return
    }

    for i, raw := range rawResult {
        if raw == nil {
            result[i] = "\N"
        } else {
            result[i] = string(raw)
        }
    }

    fmt.Printf("%#v\n", result)
}

이 접근 방식을 사용하면 열 값을 직접 읽을 수 있습니다. 스트링 슬라이스, 가변 개수 및 열 유형을 수용합니다.

위 내용은 Go에서 SELECT * 열을 []문자열로 읽는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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