>백엔드 개발 >Golang >Go에서 'SELECT *' 열을 []string 슬라이스로 읽는 방법은 무엇입니까?

Go에서 'SELECT *' 열을 []string 슬라이스로 읽는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-15 01:27:02854검색

How to Read

Go에서 "SELECT *" 열을 []문자열로 읽기

데이터베이스 세계에서는 "SELECT를 사용하여 테이블에서 데이터를 가져옵니다. " 쿼리는 일반적인 관행이지만 프로그래밍 세계에서 이러한 데이터를 수동으로 작업하는 것은 번거로울 수 있습니다. 이 글은 강력한 Go 표준 라이브러리를 활용하여 Go에서 "SELECT " 쿼리 결과를 []문자열 슬라이스로 읽는 프로세스를 단순화하는 것을 목표로 합니다.

알 수 없는 열 개수가 있는 테이블을 처리하는 경우 및 데이터 유형의 문제는 데이터를 구조화된 형식으로 캡처하는 데 있습니다. Rows에서 제공하는 Scan 메서드를 사용하면 특정 데이터 유형을 사전 정의된 변수에 채울 수 있지만 []문자열을 직접 읽는 방법은 제공되지 않습니다.

이를 극복하기 위해 우리는 기술을 사용합니다. 이는 []인터페이스{} 슬라이스를 생성합니다. 여기서 각 요소는 []문자열 슬라이스의 문자열에 대한 포인터입니다. 이 브리징 단계를 통해 Scan 메서드가 인터페이스 슬라이스를 채울 수 있으며, 원하는 []문자열로 쉽게 변환할 수 있습니다.

다음은 질문에 제공된 예제 코드의 수정된 버전입니다.

func dumpTable(rows *sql.Rows, out io.Writer) error {
    colNames, err := rows.Columns()
    if err != nil {
        return err
    }
    writer := csv.NewWriter(out)
    writer.Comma = '\t'
    readCols := make([]interface{}, len(colNames))
    writeCols := make([]string, len(colNames))
    for i, _ := range writeCols {
        readCols[i] = &writeCols[i]
    }
    for rows.Next() {
        err := rows.Scan(readCols...)
        if err != nil {
            return err
        }
        writer.Write(writeCols)
    }
    if err = rows.Err(); err != nil {
        return err
    }
    writer.Flush()
    return nil
}

이 솔루션은 Scan 메서드와 []문자열 사이의 간격을 원활하게 연결하여 "SELECT *" 쿼리 ​​결과를 구조화되고 사용 가능한 형식으로 저장할 수 있게 해줍니다.

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

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