MST

星途 面试题库

面试题:Go中defer与错误处理及资源释放的复杂场景分析

假设你正在开发一个数据库连接相关的模块,有一个函数 `connectDB` 用于连接数据库并返回连接对象 `db` 以及可能的错误 `err`。在使用完数据库连接后需要关闭连接(通过 `db.Close()` 方法)。请编写一个函数 `queryDB`,在函数中合理使用defer来处理连接的关闭以及错误处理,并且要考虑到 `connectDB` 函数可能在不同阶段返回错误的情况,同时要保证资源能够正确释放且defer的执行顺序符合最佳实践。具体函数定义如下: ```go package main import ( "fmt" // 假设这里有数据库相关的包引入 ) func connectDB() (db *Database, err error) { // 这里是连接数据库的逻辑,省略实际实现 return nil, nil } func queryDB() error { // 请在此处实现 } ```
25.4万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
    "fmt"
    // 假设这里有数据库相关的包引入
)

func connectDB() (db *Database, err error) {
    // 这里是连接数据库的逻辑,省略实际实现
    return nil, nil
}

func queryDB() error {
    db, err := connectDB()
    if err != nil {
        return err
    }
    defer func() {
        if err := db.Close(); err != nil {
            fmt.Printf("Error closing database: %v\n", err)
        }
    }()

    // 这里执行数据库查询操作
    // 如果查询过程中有错误,直接返回错误,defer会在函数结束时关闭连接

    return nil
}