Как использовать специфичный для ОС или Arch код в Go

#go

#Вперед

Вопрос:

По-видимому, syscall.Dup2 не существует в системах ARM и syscall.Dup3 не существует в darwin (OSX). Это означает, что я мог бы использовать syscall.Dup3 , например, на ARM и syscall.Dup2 на других платформах.

Как бы я это сделал?

Ответ №1:

Напишите исходный файл оболочки для уникальной конфигурации кода.

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)
}
  

Существенная часть, используемая, например, by go build , — это // build часть. Подробную информацию о том, как это использовать, можно найти здесь:

Ответ №2:

Для этого вы можете использовать golang.org/x/sys/unix библиотеку

 import (
    "golang.org/x/sys/unix"
)

unix.Dup2(oldfd, newfd)