以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
