【Go】条件编译

条件编译

在文件开始的位置package语句之前,使用// +build可以添加编译标签,以满足不同场景不同编译的需求

/a/hello_dev.go

// +build dev

package a

import "fmt"

func Hello() {
    fmt.Println("hello dev")
}

/a/hello_www.go

// +build www

package a

import "fmt"

func Hello() {
    fmt.Println("hello www")
}

/main.go

package main

import "lg/a"

func main() {
    a.Hello()
}

编译

go build -tags dev

Goland设置

设置tags,避免编译器报错

image-20221120162911132

指定tags运行

image-20221120163046335

其他

  • 文件名以_linux结尾,表示要设置linux环境才能编译(windows以及darwin亦是如此)

  • 多标签:一个源码文件可以包含多个构建标签。构建标签遵循以下三个原则:

    1. 空格隔开的选项是或(OR)的关系
    2. 逗号隔开的选项是与(AND)的关系
    3. 每个选项由字母和数字组成。如果前面加上!,则表示反义
  • //go:build是 Go 1.17 中引入的新条件编译指令格式。它旨在替换// +build

    • 为何要采用新的格式呢?对比一下新旧格式的区别就知道了:

    • //go:build linux && amd64 || darwin
      // +build linux,amd64 darwin
      
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 当开发需要依赖底层平台或处理器体系特性的Go包时,提供对应的特定实现是非常有必要的。 Go没有预处理,没有宏定义系...
    就想叫yoko阅读 424评论 0 0
  • build tag允许进行有限的条件编译,即根据某些条件编译不同版本的代码。 标签是在每个文件的顶部指定的,然后是...
    asdzxc阅读 1,889评论 0 0
  • 在C/C++中可以通过宏定义实现条件编译,比如在不同平台的机器上,调用不同的函数,或者通过编译是传递参数,调用不同...
    QxQx阅读 1,066评论 0 4
  • Go 语言交叉编译和构建标签 现代应用支持多平台运行是一件稀松平常的事情,在 Go 语言里面,为了支持应用的多平台...
    shadowlan阅读 796评论 0 0
  • 开篇 golang中没有类似C语言中条件编译的写法,比如在C代码中可以使用如下语法做一些条件编译,结合宏定义来使用...
    左手java右手go阅读 5,858评论 1 1

友情链接更多精彩内容