[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 的比较

相关文章
相关标签/搜索