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