一、Golang基础
使用GoFrame
框架是严谨和安全的,如果程序产生了异常,会默认被框架捕获。如果未被自动捕获,那么可能是由于程序逻辑自行开了新的goroutine
,在新的goroutine
中产生了异常。因此这里有两个方案可供大家选择:
- 不建议在请求中再开
goroutine
来处理请求,这样或使得goruotine
快速膨胀,当goroutine
多了之后也会在Go
引擎层面影响程序的整体调度。 - 如果实在有必要新开
goroutine
的场景下,可以考虑使用grpool.AddWithRecover
来创建新的,见名知意,它会自动捕获异常。更详细的介绍请参考:
二、数据库相关
1、update/insert
操作不生效
使用orm
时,配置文件中:
这行配置一定要删掉或者设置为0
否则出现update insert
操作不生效的现象。具体请参考文档:ORM高级特性
2、cannot find database driver for specified database type “xxx”, did you misspell type name “xxx” or forget importing the database driver?
程序代码没有引入依赖的数据库驱动,请参考:
解决办法:
config.toml
文件 数据库配置的charset
设置为utf8mb4
默认是utf8
MySQL存储表情时注意:
- 数据库编码
utf8mb4
- 表的编码是
utf8mb4
- 表中内容字段是
三、使用相关
1、不同环境如何,加载不同的配置文件?
不同环境指的是:开发环境/测试环境/预发环境/生产环境等。
- 首先,在一些互联网项目中,特别是分布式或者微服务化的架构下,一般会使用配置管理中心,不同的环境会对应不同的配置管理中心,所以这样的场景不会存在这样的问题。
其次,如果是传统的项目管理方式下,可能会将配置文件放到代码仓库中共同管理,这样的方式是不推荐的。如果您仍然想要这么做,您可以通过系统环境变量或者命令行启动参数,让程序自动选择配置文件或者指定配置目录,参考 章节。例如:
./app --gf.gcfg.file config-prod.toml
则通过命令行启动参数的方式将默认读取的配置文件修改为了config-prod.toml
文件。
2、glog with “ERROR: logging before flag.Parse”
Golang
官方有个简单的日志库包名也叫做glog
,检查你文件顶部import
的包名,将github.com/golang/glog
修改为框架的日志组件即可,日志组件使用请参考:
注意, gcron
一定要在g.Server().Run
的前面。
四、环境相关
1、Linux下执行 go build main.go 提示连接超时 connection timed out
解决办法:
具体请看:
2、Linux下安装gf 提示命令不存在command not found
解决办法:安装gf.exe
参考:开发工具