面试题答案
一键面试在Go中管理资源以避免泄漏并保证系统健壮性,可利用defer
语句和错误处理机制。以下以数据库连接和文件句柄为例。
- 使用
defer
关闭资源:defer
语句可确保函数返回前执行某些操作,常用于关闭资源。 - 错误处理与资源清理:在初始化资源时,若某一资源初始化失败,要清理已成功初始化的资源。
示例代码如下:
package main
import (
"database/sql"
"fmt"
"os"
_ "github.com/lib/pq" // 以PostgreSQL为例,实际按需求替换
)
func main() {
// 初始化数据库连接
db, err := sql.Open("postgres", "user=test dbname=test sslmode=disable")
if err != nil {
fmt.Println("Failed to open database:", err)
return
}
defer db.Close()
// 测试数据库连接
err = db.Ping()
if err != nil {
fmt.Println("Failed to ping database:", err)
return
}
// 打开文件
file, err := os.Open("test.txt")
if err != nil {
fmt.Println("Failed to open file:", err)
// 若文件打开失败,关闭数据库连接
db.Close()
return
}
defer file.Close()
// 这里开始处理事件,假设事件处理代码如下
fmt.Println("Resources initialized successfully. Starting event handling...")
// 模拟事件处理逻辑
//...
}
在上述代码中:
- 数据库连接使用
sql.Open
打开,使用defer db.Close()
确保函数结束时关闭连接。 - 文件使用
os.Open
打开,同样使用defer file.Close()
确保关闭。 - 若文件打开失败,手动关闭已打开的数据库连接,保证资源不泄漏,维护系统健壮性。