golang 跨平台编译

栏目: 服务器 · 发布时间: 5年前

内容简介:第一次接触跨平台编译是在阅读 evio 源码的时候, 发现它的internal包下面的 internal_linux.go 和internal_bsd.go 定义了两个一模一样的函数名 OpenPoll() , golang 在同一个包下是不允许有同名函数的, 后来仔细阅读源码才发现 在 internal_bsd.go 文件的开头有一行注释经过查资料,了解到这个注释是用来做跨平台编译的, 也就是 internal_bsd.go 只会在 darwin netbsd freebsd openbsd drag

第一次接触跨平台编译是在阅读 evio 源码的时候, 发现它的internal包下面的 internal_linux.go 和internal_bsd.go 定义了两个一模一样的函数名 OpenPoll() , golang 在同一个包下是不允许有同名函数的, 后来仔细阅读源码才发现 在 internal_bsd.go 文件的开头有一行注释

// +build darwin netbsd freebsd openbsd dragonfly

经过查资料,了解到这个注释是用来做跨平台编译的, 也就是 internal_bsd.go 只会在 darwin netbsd freebsd openbsd dragonfly 这些系统上参与编译, 这就解释的通了。

下面是从网上转载的golang 跨平台编译的知识

https://www.jianshu.com/p/4b345a9e768e

https://www.cnblogs.com/Spider-spiders/p/10274240.html

evio 源码的分析来说明:

我们看到在有些文件的头部有这样一个标识:文件链接: https://github.com/tidwall/evio/blob/master/evio_unix.go

// +build darwin netbsd freebsd openbsd dragonfly linux  它表示的是这个文件只在darwin netbsd openbsd dragonfly linux 平台下编译成功。

而有些文件是这样的标识:文件链接: https://github.com/tidwall/evio/blob/master/evio_other.go

// +build !darwin,!netbsd,!freebsd,!openbsd,!dragonfly,!linux  前面加!表示不支持这个平台的编译

还有一部分文件是没有+build这行注释,由此可知 go 语言编写的文件,如果想区分不同平台的编译只需在文件的首部加上// +build标识,如果不添加那么默认是支持所有平台的编译。

那么支持的平台到底有哪些呢?参考链接: https://github.com/golang/go/blob/master/src/go/build/syslist.go

// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
 
package build
 
const goosList = "aix android darwin dragonfly freebsd hurd js linux nacl netbsd openbsd plan9 solaris windows zos "
const goarchList = "386 amd64 amd64p32 arm armbe arm64 arm64be ppc64 ppc64le mips mipsle mips64 mips64le mips64p32 mips64p32le ppc riscv riscv64 s390 s390x sparc sparc64 wasm "

当然还有一种方式是指定当前go的环境变量GOOS and GOARCH https://www.jianshu.com/p/4b345a9e768e


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

爆发

爆发

[美] 艾伯特-拉斯洛·巴拉巴西 / 马慧 / 中国人民大学出版社 / 2012-6 / 59.90元

1. 本书是一本超越《黑天鹅》的惊世之作。如果说塔勒布认为人类行为是随机的,都是小概率事件,是不可以预测的;那么全球复杂网络权威Barabasi则认为,人类行为93%是可以预测的。 2. Barabasi的研究是在人类生活数字化的大数据时代基础上进行的,移动电话、网络以及电子邮件使人类 行为变得更加容易量化,将我们的社会变成了一个巨大的数据库。他认为,人类正处在一个聚合点上,在这里数据、科学......一起来看看 《爆发》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

MD5 加密
MD5 加密

MD5 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试