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

hoi*_*jui 2 go

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

我该怎么做?

hoi*_*jui 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)
}
Run Code Online (Sandbox Code Playgroud)

syscall_wrapper_arm.go

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

package mypkg

import (
    "syscall"
)

func Dup2(oldfd int, newfd int) {
    syscall.Dup3(oldfd, newfd, 0)
}
Run Code Online (Sandbox Code Playgroud)

必不可少的部分,例如被go build所使用// +build。有关如何使用它的详细信息,可以在这里找到: