在 C/C++中,一般都是用一个宏来将 release 版本不需要的代码过滤掉
在 go 中好像没有找到相关的方法,搜了一圈也没找到合适的方法
1
goofansu 2016-10-16 14:09:16 +08:00 via iPhone 1
可以用 go build -ldflags '-X main.Env=release',然后在 main package 里定义 Env ,判断 Env 是否 release 来写代码
|
3
reus 2016-10-16 14:29:31 +08:00 1
|
4
reus 2016-10-16 14:36:09 +08:00 1
在文件头加上 // +abcd 后,可以用 go build -tag 'abcd'触发这个文件的编译。如果没有 abcd 这个 tag ,就不编译。
|
5
reus 2016-10-16 14:37:51 +08:00 2
是 go build -tags 'abcd'
|
6
oldcai OP @reus 大致了解了一下,好像是文件级别的,用于跨平台。
我想在 debug 的时候,日志记录代码行号, release 的里面不记录。 这种做法的话,就需要定义两个同名函数在不同的文件中吧,大概? 请问,有行级别生效的方法吗? |
7
pathletboy 2016-10-16 15:23:40 +08:00 1
file debug
// +build dev const DEVELOPMENT = true file release // +build !dev const DEVELOPMENT = false other files if DEVELOPMENT { } |
8
oldcai OP |
9
reus 2016-10-16 15:37:59 +08:00 1
@oldcai 对啊,就是定义相同的函数,不同 tag 用不同的。如果有共用的代码,就放到没有 tag 的文件里。不用加条件的
log_debug.go // +build debug // 带行号的 log 函数或方法 func log ... log_release.go // +build !debug // 不带行号的 func log ... 其他文件直接调用 log ,不用加 if |
10
reus 2016-10-16 15:39:07 +08:00 1
如果 debug 和 release 的 log 函数有很多相同的逻辑,那就提取出来,放在 log.go 里,然后在 log_debug.go 和 log_release.go 里分别包装一下。
|
12
WinterWu 2016-10-16 17:00:54 +08:00 via iPhone 1
像有没有行号这种应该在程序配置里搞定会更合理一点。 debug 和 release 使用不同配置即可。
|
16
SuperFashi 2016-10-16 23:04:00 +08:00
@oldcai 编译好大的文件是因为 go 默认把 dwarf 编译进去了,编译的时候-ldflags '-s -w'就可以了,会减少大概 50%的体积。
|
17
qyz0123321 2016-10-16 23:16:40 +08:00
//+build 就可以,目前 golang 的控制精度应该只到文件。。。还要更细致的话就比较麻烦了
|