golang 操作mysql 報錯:invalid memory address or nil pointer dereference


三個文件:

db.go :

package config

import (
	"database/sql"
	"fmt"
	"log"
	"time"

	_ "github.com/go-sql-driver/mysql"
)

const (
	db_name = "text"
	db_host = "127.0.0.1"
	db_user = "root"
	db_pass = "root"
	db_port = 3306
)

var DB *sql.DB

func Init() {
	dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8", db_user, db_pass, db_host, db_port, db_name)
	DB, err := sql.Open("mysql", dsn)
	if err != nil {
		fmt.Println("sql.Open error", err)
		return
	}

	//超時時間
	DB.SetConnMaxLifetime(100 * time.Second)
	// 最大連接數
	DB.SetMaxOpenConns(100)
	// 設置閑置的連接數
	DB.SetMaxIdleConns(16)
	if err := DB.Ping(); err != nil {
		log.Fatal("DB.Ping = ", err)
	}

}

work.go :

package config

import "fmt"

func GetOne() {
	var userid int
	_ = DB.QueryRow("select userid from s_work where itemid = 651054").Scan(&userid)
	fmt.Println("userid = ", userid)
}

db_test.go :

package config

import (
	"testing"
)

func TestInit(t *testing.T) {
	Init()
	GetOne()
}  

用db_test.go測試 運行: go test -v .\db_test.go .\db.go .\work.go

顯示錯誤:

  

解決辦法:

= 與 := 的區別

=     就是單純的賦值
:=   具有聲明變量的功能

改前 用的 :=
DB, err := sql.Open("mysql", dsn)


改后  用 =
var err error
DB, err = sql.Open("mysql", dsn)

  

 

 

 

 

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM