찾다
백엔드 개발Golangsql.open을 사용할 때 DSN이 비어있을 때 오류가 발생하지 않습니까?

sql.open을 사용할 때 DSN이 비어있을 때 오류가 발생하지 않습니까?

Go Language sql.Open 기능 : 빈 DSN이 오류를보고 할 이유와 솔루션

Go Language에서 sql.Open 함수는 데이터베이스 연결을 만드는 데 사용됩니다. 그러나 데이터 소스 이름 (DSN)이 비어있는 경우 sql.Open 오류를보고하지 않으므로 종종 혼란 스럽습니다. 이 기사는 그 이유를 설명하고 솔루션을 제공 할 것입니다.

문제 설명

다음 코드 스 니펫은 문제를 보여줍니다.

 패키지 메인

수입 (수입)
    "데이터베이스/SQL"
    "FMT"
    _ "github.com/go-sql-driver/mysql"// MySQL 드라이버 가져 오기)

func main () {
    db, err : = sql.open ( "mysql", "")
    fmt.println (err) // 출력 결과는 nil입니다
    // ... 후속 코드 ... DB를 사용하려고 할 때 오류 가보고됩니다.}

DSN이 비어 있더라도 sql.Open 여전히 nil 오류를 반환합니다. 이는 예상 동작이 아닙니다.

문제 분석

sql.Open 함수의 주요 함수는 데이터베이스 드라이버를 초기화하고 a *sql.DB 객체를 반환하는 것입니다. 데이터베이스에 즉시 연결하려고 시도 하지 않으며 DSN의 유효성을 확인하지도 않습니다. 데이터베이스 작업 (예 : db.Query 또는 db.Exec )이 수행 될 때만 연결이 실제로 설정되어 검증됩니다.

따라서 DSN이 비어 있으면 sql.Open 데이터베이스에 연결을 설정하려고 시도하지 않았기 때문에 오류를보고하지 않습니다. *sql.DB 객체를 이후에 사용하면 오류가 나타나지 않습니다.

해결책

sql.Open 직후 DSN의 유효성을 감지하려면 db.Ping() 메소드를 사용하는 것이 좋습니다.

 패키지 메인

수입 (수입)
    "데이터베이스/SQL"
    "FMT"
    _ "github.com/go-sql-driver/mysql"
))

func main () {
    db, err : = sql.open ( "mysql", "")
    err! = nil {인 경우
        fmt.println ( "sql.open 오류 :", err)
        반품
    }
    연기 DB.Close ()

    err = db.ping ()
    err! = nil {인 경우
        fmt.println ( "db.ping error :", err)
        반품
    }

    fmt.println ( "데이터베이스 연결 성공!")
    // ... 설문 조사 코드 ...
}

db.Ping() 데이터베이스와 간단한 연결을 설정하고 연결 오류를 반환하려고합니다. db.Ping() 추가하면 DSN 구성 오류를 일찍 감지 할 수 있습니다. 데이터베이스 연결을 닫는 데 사용한 후 db.Close() 에게 전화하십시오.

위의 개선을 통해 빈 DSN으로 인한 지연 오류를 효과적으로 피할 수 있으며 코드의 견고성과 유지 보수 가능성을 향상시킬 수 있습니다.

위 내용은 sql.open을 사용할 때 DSN이 비어있을 때 오류가 발생하지 않습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于架构原理的相关内容,MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层,下面一起来看一下,希望对大家有帮助。

mysql的msi与zip版本有什么区别mysql的msi与zip版本有什么区别May 16, 2022 pm 04:33 PM

mysql的msi与zip版本的区别:1、zip包含的安装程序是一种主动安装,而msi包含的是被installer所用的安装文件以提交请求的方式安装;2、zip是一种数据压缩和文档存储的文件格式,msi是微软格式的安装包。

mysql怎么去掉第一个字符mysql怎么去掉第一个字符May 19, 2022 am 10:21 AM

方法:1、利用right函数,语法为“update 表名 set 指定字段 = right(指定字段, length(指定字段)-1)...”;2、利用substring函数,语法为“select substring(指定字段,2)..”。

mysql怎么替换换行符mysql怎么替换换行符Apr 18, 2022 pm 03:14 PM

在mysql中,可以利用char()和REPLACE()函数来替换换行符;REPLACE()函数可以用新字符串替换列中的换行符,而换行符可使用“char(13)”来表示,语法为“replace(字段名,char(13),'新字符串') ”。

mysql怎么将varchar转换为int类型mysql怎么将varchar转换为int类型May 12, 2022 pm 04:51 PM

转换方法:1、利用cast函数,语法“select * from 表名 order by cast(字段名 as SIGNED)”;2、利用“select * from 表名 order by CONVERT(字段名,SIGNED)”语句。

MySQL复制技术之异步复制和半同步复制MySQL复制技术之异步复制和半同步复制Apr 25, 2022 pm 07:21 PM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于MySQL复制技术的相关问题,包括了异步复制、半同步复制等等内容,下面一起来看一下,希望对大家有帮助。

mysql怎么判断是否是数字类型mysql怎么判断是否是数字类型May 16, 2022 am 10:09 AM

在mysql中,可以利用REGEXP运算符判断数据是否是数字类型,语法为“String REGEXP '[^0-9.]'”;该运算符是正则表达式的缩写,若数据字符中含有数字时,返回的结果是true,反之返回的结果是false。

带你把MySQL索引吃透了带你把MySQL索引吃透了Apr 22, 2022 am 11:48 AM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了mysql高级篇的一些问题,包括了索引是什么、索引底层实现等等问题,下面一起来看一下,希望对大家有帮助。

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경