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