[Go] 開發 go web 項目,踩到的一些「坑」

注意:這些「坑」不是bug,只是本身當時沒搞明白。php

用到的框架爲 Beegohtml

一、字典 map 是「引用類型」,自己就是指針,做爲參數傳遞時,直接傳 map 變量名便可(不要傳 map 變量指針)。golang

在調用方法內,若是修改了 map 變量值,外部的 map 變量值也會被改變的!框架

例如 Beego 控制器屬性 Data,若是 其餘的地方須要用到這個變量,直接傳入 Data 變量名便可,參考代碼以下:spa

# 控制器內代碼 #設計

// 預處理
func (c *PassportController) Prepare() {

    // 覈對 用戶會話狀態(是否已登陸)
    res := passportService.ManagerCheckLoginSession(c.Ctx, c.Data)
    println(res.Msg)

}

# 調用到的方法 #指針

func (s *PassportService) ManagerCheckLoginSession(Ctx *context.Context, Data map[interface{}]interface{}) *beego.Result {
    // ...代碼省略
}

 

二、go 文件 不能以「_」爲前綴,不然 go 底層會忽略它的存在(即文件不起做用,裏面的代碼也就不起做用)code

如:_templatefunc.go 這個文件是無效的htm

 

三、編譯時報錯:import cycle not allowedblog

Golang 不容許循環導包,不然,會在編譯時報錯,一般是由於設計錯誤 或 包的規劃有問題,例如

import(
    "package A"
    "package B"
)

若是 package A 中已經導入 package B,而本 package A 中又導入 package B

或者 package A 依賴package B,同時 package B 依賴 package A

這樣就會在編譯時報 "import cycle not allowed"。

如何避免重複導入包的問題,就須要在設計時規劃好包。

詳細查看:http://ju.outofmemory.cn/entry/230115

 

四、被 局部變量 覆蓋

一個有關Golang變量做用域的坑

[薦][容易出錯] Golang 局部變量 初始化 := 的陷阱

 

五、Go語言第一深坑:interface 與 nil 的比較

相關文章
相關標籤/搜索