
在 C/C++中,一般都是用一个宏来将 release 版本不需要的代码过滤掉
在 go 中好像没有找到相关的方法,搜了一圈也没找到合适的方法
1 goofansu 2016-10-16 14:09:16 +08:00 via iPhone 可以用 go build -ldflags '-X main.Env=release',然后在 main package 里定义 Env ,判断 Env 是否 release 来写代码 |
3 reus 2016-10-16 14:29:31 +08:00 |
4 reus 2016-10-16 14:36:09 +08:00 在文件头加上 // +abcd 后,可以用 go build -tag 'abcd'触发这个文件的编译。如果没有 abcd 这个 tag ,就不编译。 |
5 reus 2016-10-16 14:37:51 +08:00 是 go build -tags 'abcd' |
6 oldcai OP PRO @reus 大致了解了一下,好像是文件级别的,用于跨平台。 我想在 debug 的时候,日志记录代码行号, release 的里面不记录。 这种做法的话,就需要定义两个同名函数在不同的文件中吧,大概? 请问,有行级别生效的方法吗? |
7 pathletboy 2016-10-16 15:23:40 +08:00 file debug // +build dev const DEVELOPMENT = true file release // +build !dev const DEVELOPMENT = false other files if DEVELOPMENT { } |
8 oldcai OP PRO |
9 reus 2016-10-16 15:37:59 +08:00 @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 如果 debug 和 release 的 log 函数有很多相同的逻辑,那就提取出来,放在 log.go 里,然后在 log_debug.go 和 log_release.go 里分别包装一下。 |
12 WinterWu 2016-10-16 17:00:54 +08:00 via iPhone 像有没有行号这种应该在程序配置里搞定会更合理一点。 debug 和 release 使用不同配置即可。 |