当前位置: 首页 > news >正文

网站开发与运营案例教程全网搜索指数

网站开发与运营案例教程,全网搜索指数,dedecms建网站,大型建设网站交叉编译只是为了能在一个平台上编译出其他平台可运行的程序,Go 作为一个跨平台的语言,它提供的类库势必也是跨平台的,比如说程序的系统调用相关的功能,能根据所处环境选择对应的源码进行编译。让编译器只对满足条件的代码进行编译…

交叉编译只是为了能在一个平台上编译出其他平台可运行的程序,Go 作为一个跨平台的语言,它提供的类库势必也是跨平台的,比如说程序的系统调用相关的功能,能根据所处环境选择对应的源码进行编译。让编译器只对满足条件的代码进行编译,将不满足条件的代码舍弃,这就是另外一个概念叫—条件编译。

在 Go 中,也称之为Build Constraints 编译约束,添加编译约束的方式有2种分别:

  • 编译标签(build tag)
  • 文件后缀

编译标签

编译标签是一种通过在源码文件顶部添加注释,来决定文件是否参与编译的约束方式。其格式如下:

// +build <tags>

注意: // +build 的下一行必须是空行,否则会被解析为包注释。

// +build linux// main package comment
package main

tags说明:

  • 以空格分开表示 AND
  • 以逗号分开表示 OR
  • !表示 NOT

标签可以指定为以下内容:

- 操作系统,环境变量中 GOOS 的值,如: linux 、 darwin 、 windows 等等。
- 操作系统的架构,环境变量中 GOARCH 的值,如: arch64 、 x86 、 i386 等等。
- 使用的编译器, gc 或者 gccgo 。
- 是否开启CGO, cgo 。
- golang版本号:比如Go Version 1.1为 go1.1 ,Go Version 1.12版本为 go1.12 ,以此类推。
- 其它自定义标签,通过 go build -tags 指定的值。

例如,编译条件为 (linux AND 386) OR (darwin AND (NOT cgo))

// +build linux,386 darwin,!cgo

另外一个文件可以有多个编译约束,比如条件为 (linux OR darwin) AND amd64

// +build linux darwin
// +build amd64

也可以使用 ignore 标签将一个文件从编译中排除。

// +build ignore

文件后缀

除了编译标签,第二种添加编译约束的方法是通过源码文件的文件名实现的,这种方案比构造标签方案更简单。编译器也会根据文件后缀来自动选择编译文件:

$filename_$GOOS.go
$filename_$GOARCH.go
$filename_$GOOS_$GOARCH.go$filename : 源文件名称。
$GOOS : 表示操作系统,从环境变量中获取。
$GOARCH : 表示系统架构,从环境变量中获取。

后缀的顺序记住不要颠倒,后缀中同时出现系统和架构名时,需要保持 $filename_$GOOS_$GOARCH.go 的顺序。

在 Go 的每个内置库里都有很多以不同系统名结尾的文件。下面是 Go 的 os 内置库源代码的部分截图:
文件后缀添加编译约束

两种添加编译限制的方式该如何选择?

构建标签和文件名后缀在功能上是重叠的。比如,一个名为 mypkg_linux.go 的文件,再包含构建标签 // +build linux 会显得多余。

通常来说,当只有一个特定平台需要指定时,我们选择文件名后缀的方式。比如:

mypkg_linux.go         // 只在 linux 系统编译
mypkg_windows_amd64.go // 只在 windows amd 64位 平台编译

相反,如果你的文件需要指定给多个平台或体系架构使用,或者你需要排除某个特定平台时,我们选择构建标签的方式。比如:

// 在所有类unix平台编译
// +build darwin dragonfly freebsd linux netbsd openbsd// 在非Windows平台编译
// +build !windows

go:build 与 +build 的区别

//go:build

是 Go 1.17 中引入的新条件编译指令格式。它旨在替换

// +build

指令。为何要采用新的格式呢?

对比一下新旧格式的区别就知道了:

//go:build linux && amd64 || darwin
// +build linux,amd64 darwin

注意://go:build之间没有空格;// +build之间有空格;
显而易见的优势:

  • go:build 这种格式,对 coder 来说,更容易理解其逻辑组合
  • 与 //go:embed 和 //go:generate 这些命令相比较,格式上进行了统一

错误检查

用go vet命令也可以检测到这个缺少空行的错误,初期可以用这个命令来避免缺少空行的错误

go vet mypkg
mypkg.go:1: +build comment appears too late in file
exit status 1

查看环境

go env

参考

  • Go build tag 实现条件编译

  • 条件编译

  • 由一条编译报错信息,引出两个Go编译的重要知识

  • golang 编译约束 //go:build dev // +build命令,自定义文件后缀编译

http://www.yidumall.com/news/3692.html

相关文章:

  • 好看的企业网站源码开封seo公司
  • 没有注册公司可以做网站吗百度搜索风云榜电视剧
  • unity 做网站广州推广系统
  • 青浦专业做网站在线培训考试系统
  • 做a小视频网站网站宣传推广文案
  • wordpress导入b站视频教程石家庄seo外包的公司
  • app开发公司十强seo网站诊断方案
  • 学校网站的建设目标是什么意思永久免费客服系统软件
  • 高端网站建设的公司网店培训班
  • 网站前台模块是什么产品推销方案
  • 汉服网站的建设现在最好的营销方式
  • 邯郸住房和城乡建设委员会网站微信视频号可以推广吗
  • 建设个公司网站需要多少费用小程序怎么开发自己的小程序
  • 三乡网站建设互联网广告推广
  • 建设网站的工作总结虎扑体育网体育
  • 胶南做公司网站百度一下你就知道123
  • 网站建设费的分录怎么写靠谱的代写平台
  • 天河区门户网站教育局板块南昌网优化seo公司
  • 崇州市微信端网站建瑞昌网络推广
  • 怎么选择合适的网站开发公司seoul是什么国家
  • 全国网站制作公司排名数据分析培训班
  • 信息管理网站开发的视频教程东莞网站seo技术
  • 自助搜优惠券网站怎么做的google官网注册账号入口
  • 万网 网站 ip东莞免费网站建设网络营销
  • 建设网站好学吗营销策略有哪几种
  • 关于网站优化的文章怎么优化网站关键词排名
  • 厦门php商城网站建设推广赚钱app排行榜
  • 织梦网站后台模版更换关键词搜索量排名
  • 阿里云怎么做静态网站东莞网站推广方案
  • wordpress手机号注册插件seo排名快速刷