>  기사  >  백엔드 개발  >  데이터베이스/sql.Scanner 인터페이스 구현

데이터베이스/sql.Scanner 인터페이스 구현

王林
王林앞으로
2024-02-10 13:30:08578검색

데이터베이스/sql.Scanner 인터페이스 구현

php 편집기 Yuzai가 이 기사에서 데이터베이스/sql.Scanner 인터페이스를 구현하는 방법을 소개합니다. Go 언어에서 데이터베이스/sql 패키지는 관계형 데이터베이스를 운영하는 데 사용되는 핵심 패키지입니다. Scanner 인터페이스는 데이터베이스 쿼리 결과의 값을 Go 언어 변수로 스캔하는 데 사용됩니다. Scanner 인터페이스를 구현함으로써 데이터베이스 쿼리 결과의 값을 원하는 유형으로 변환하는 것을 사용자 정의할 수 있습니다. 이 기사에서는 독자가 Go 언어의 데이터베이스 작업을 더 잘 이해하고 적용할 수 있도록 Scanner 인터페이스를 구현하는 방법을 자세히 설명합니다.

질문 내용

database/sql.Scanner인터페이스를 어떻게 구현하나요?

이 쿼리의 SELECT 절에는 3개의 필드가 있습니다.

  • idsmallint unsigned
  • is_suspendedtinyint unsigned
  • namevarchar

database/sql에서 3개 열의 데이터 유형은 다음과 같습니다.

  • int64
  • int64
  • []uint8

이것은 []인터페이스{}에서 작동하지만 각 열 유형을 []接口{},但希望将每个列类型直接实现到 database/sql.Scanner 인터페이스

에 직접 구현하고 싶습니다. 으아아아

하려고 노력했지만 제대로 작동하지 못했던 일들

유형

으아아아

코드

cols    := make([]interface{}, 3)
ptr     := make([]interface{}, 3)

for i, _ := range cols {
    ptr[i] = &cols[i]
}

if err := rows.Scan(ptr...); err != nil {
    fmt.Println("err:", err)
}

// pair column data with column name
res := map[string]any
for i, name := range res_cols {
    res[name] = *ptr[i].(*any)
    
    fmt.Printf("Type: %T %s\n", res[name], name)
}

해결 방법

주어진 유형의 값에 대한 포인터를 사용하여 초기화 ptr하세요.

으아아아

ptr Slice는 위 스니펫에서 어떤 값도 제공하지 않습니다. 코드는 다음과 같이 단순화될 수 있습니다.

으아아아

위 내용은 데이터베이스/sql.Scanner 인터페이스 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제