一、Golang基础
使用GoFrame
框架是严谨和安全的,如果程序产生了异常,会默认被框架捕获。如果未被自动捕获,那么可能是由于程序逻辑自行开了新的goroutine
,在新的goroutine
中产生了异常。因此这里有两个方案可供大家选择:
- 不建议在请求中再开
goroutine
来处理请求,这样或使得goruotine
快速膨胀,当goroutine
多了之后也会在Go
引擎层面影响程序的整体调度。
二、兼容性相关
1、client_tracing.go:73:3: undefined: attribute.Any
以下错误:
导致该错误的原因在于目前您正在使用的goframe
依赖的otel
包版本过低(otel
包是OpenTelemetry
使用Golang
实现的第三方包,比较常用,很多第三方基础组件都会依赖),而项目中其他的第三方依赖的otel
包过高,按照Golang module
的管理策略,项目将会使用最新的otel
包,于是导致了版本不兼容。
根因还是在于otel
的包在迭代中出现了不兼容升级导致,不过目前otel
包已经较稳定,出现不兼容的可能性降低。
解决的办法是只有升级goframe
的版本,goframe
最新版本已经更新使用了稳定的otel
包。如果您使用的已经是v1
的最新版本(v1.16
),那么请升级为v2
版本解决。
三、数据库相关
1、update/insert
操作不生效
使用orm
时,配置文件中:
这行配置一定要删掉或者设置为0
否则出现update insert
操作不生效的现象。具体请参考文档:
2、cannot find database driver for specified database type “xxx”, did you misspell type name “xxx” or forget importing the database driver?
出现 WHERE 0=1
的情况是由于查询条件中存在数组条件,并且数组的长度为0
。这种情况ORM
无法自动过滤这种空数组条件(这种条件过滤可能会引起业务异常),需要开发者根据业务场景,显示调用OmitEmpty
或者OmitEmptyWhere
来告诉ORM
可以过滤这些空数组的条件。
4、MYSQL中的表情,用SQL查询后,乱码问题
解决办法:
config.toml
文件 数据库配置的charset
设置为utf8mb4
默认是utf8
MySQL
存储表情时注意:
- 数据库编码
utf8mb4
- 表的编码是
utf8mb4
- 表中内容字段是
utf8mb4
四、使用相关
1、不同环境如何,加载不同的配置文件?
不同环境指的是:开发环境/测试环境/预发环境/生产环境等。
- 首先,在一些互联网项目中,特别是分布式或者微服务化的架构下,一般会使用配置管理中心,不同的环境会对应不同的配置管理中心,所以这样的场景不会存在这样的问题。
其次,如果是传统的项目管理方式下,可能会将配置文件放到代码仓库中共同管理,这样的方式是不推荐的。如果您仍然想要这么做,您可以通过系统环境变量或者命令行启动参数,让程序自动选择配置文件或者指定配置目录,参考 配置管理 章节。例如:
./app --gf.gcfg.file config-prod.toml
则通过命令行启动参数的方式将默认读取的配置文件修改为了config-prod.toml
文件。我们更加不建议您的是在程序中通过代码逻辑来区分和读取不同环境的配置文件。
2、glog with “ERROR: logging before flag.Parse”
注意, gcron
一定要在g.Server().Run
的前面。
4、GoFrame的struct tag(标签) 有哪些?
参数请求、数据校验、OpenAPIv3
、命令管理、数据库ORM。
其他:
- 命令行结构化管理参数:命令管理-结构化参数
- 在接口文档章节,由于采用了标签形式生成
OpenAPI
文档,因此标签比较多,具体请参考章节:
五、环境相关
1、Linux下执行 go build main.go 提示连接超时 connection timed out
go: github.com/gogf/gf@v1.14.6-0.20201214132204-c685876e6f67: Get "https://proxy.golang.org/github.com/gogf/gf/@v/v1.14.6-0.20201214132204-c685876e6f67.mod":
dial tcp 172.217.160.113:443:
connect: connection timed out
解决办法:
具体请看:
2、Linux下安装gf 提示命令不存在command not found
./gf install
安装后
执行gf -v
提示gf: command not found
解决方法:
拷贝sh文件到 /usr/bin目录
cp gf /usr/bin
然后执行
gf -v
就会看到
GoFrame CLI Tool v1.15.4, https://goframe.org
Install Path: /bin/gf
Build Detail:
Go Version: go1.16.2
GF Version: v1.15.3
Git Commit: 22011e76dc3e14006936164cc89e2d4c9190a36d