1. 程式人生 > >Beego框架開發之常見錯誤01-設定session時候的幾種錯誤-invalid memory address or nil pointer dereference

Beego框架開發之常見錯誤01-設定session時候的幾種錯誤-invalid memory address or nil pointer dereference

|

1. Session

今天我們來講解一下beego框架開發裡面的第一種常見的錯誤,而且有時候這些錯誤隱藏的不好找,有些地方語法根本沒有錯誤,所有找錯誤的時候如果沒有注意到,那麼 就會很不好找bug,特別對於新手來說,如果這些錯誤不注意那麼很容易犯錯。 先來看一下介紹

what is cookie?

cookie是儲存在客戶端的,用於標識客戶身份的!

what is session

session 是儲存在服務端,也是用於客戶身份標識,用於跟蹤使用者會話。

BeeGo session儲存方式

Beego內建了session模組,目前session模組支援的後端引擎包括memory,cookie,file,mysql,redis,couchbase,memcache、postgres,使用者也可以根據相應的interface實現自己的引擎。 我們先來看一下設定session的語法

this.SetSession("userName",username)

在beego裡設定session的只需要這一句話就行了, 通過這種方式就可以開啟session

func (this *MainController) Get() {
    v := this.GetSession("asta")
    if v == nil {
        this.SetSession("asta", int(1))
        this.Data["num"] = 0
    } else {
        this.SetSession("asta", v.(int)+1)
        this.Data["num"] = v.(int)
    }
    this.TplName = "index.tpl"
}

著這裡我們驗證登入的時候看一下如下程式碼

func (this *Index)ShowIndex(){
	userName:=this.GetSession("userName")   //獲取session
	if userName==nil{
		this.Redirect("/login",302)
		return
	}
	this.Data["userName"]=userName   //給後臺傳資料
	this.TplName="index.html"
}

在這裡需要注意一下,if userName==nil 這句話,有可能新手會判斷為""空字串,這裡的小錯不要犯,應該判斷為空。

常犯錯誤

有些新手可能經常犯無效的記憶體地址或空指標異常的錯誤,如圖 在這裡插入圖片描述 報錯是這樣的,但是到檔案中149行檢視語句就是

this.SetSession("userName",username)

這句語句,這句語句有什麼錯呢,語法上完全沒有錯,這時候很多新手可能就會鬱悶找不到錯誤, 這是因為session沒有初始化的原因,beego裡面session是預設沒有初始化的,在開發文件上有兩種方式初始化session

beego 中使用 session 相當方便,只要在 main 入口函式中設定如下:

beego.BConfig.WebConfig.Session.SessionOn = true

或者通過配置檔案配置如下:

sessionon = true

在這裡插入圖片描述 這樣就不會報錯了。