如何在Go中使用OS或Arch专用代码

时间:2019-04-21 19:16:25

标签: go

显然,syscall.Dup2在ARM系统上不存在,syscall.Dup3在达尔文(OSX)上不存在。例如,这意味着我可以在ARM上使用syscall.Dup3,在其他平台上使用syscall.Dup2

我该怎么做?

1 个答案:

答案 0 :(得分:5)

按照唯一的代码配置编写包装器源文件。

PS:我认为Windows不支持Dup2也不支持Dup3

syscall_wrapper.go

// +build !windows
// +build !arm
// +build !arm64

package mypkg

import (
    "syscall"
)

func Dup2(oldfd int, newfd int) {
    syscall.Dup2(oldfd, newfd)
}

syscall_wrapper_arm.go

// +build !windows
// +build arm arm64

package mypkg

import (
    "syscall"
)

func Dup2(oldfd int, newfd int) {
    syscall.Dup3(oldfd, newfd, 0)
}

例如go build使用的基本部分是// +build部分。有关如何使用它的详细信息,请参见: