나는 ENet에 CGo을 사용하여 wrapper이라고 쓰려고합니다.Go에서 조건부 컴파일
Mac에서 래퍼를 컴파일하려고하면 라이브러리가 오래되었고 인터페이스가 약간 다릅니다. 코드의 99 %는 C 호출을 변경해야하는 몇 가지 경우와 동일합니다.
Go에서 이와 같은 문제를 처리하는 가장 좋은 방법은 무엇입니까?
조건부 컴파일 또는 조건부 가져 오기를 수행 할 수있는 방법이 있습니까?
나는 ENet에 CGo을 사용하여 wrapper이라고 쓰려고합니다.Go에서 조건부 컴파일
Mac에서 래퍼를 컴파일하려고하면 라이브러리가 오래되었고 인터페이스가 약간 다릅니다. 코드의 99 %는 C 호출을 변경해야하는 몇 가지 경우와 동일합니다.
Go에서 이와 같은 문제를 처리하는 가장 좋은 방법은 무엇입니까?
조건부 컴파일 또는 조건부 가져 오기를 수행 할 수있는 방법이 있습니까?
이동에는 조건부 컴파일 또는 조건부 가져 오기가 없습니다. C 코드의 형식 차이를 처리하십시오.
별도의 파일로 플랫폼 특정 물건을 밖으로 분리, 예를 들어, 파일이 같은 접미사가있는 경우
지금 등
(Mac 용) stuff_darwin.go, stuff_windows.go, stuff_linux.go처럼, 서로 다른 플랫폼 버전 stuff.go 교체 stuff.go go 명령은 지정된 플랫폼에서만 컴파일합니다.
정말 알아두면 좋을 것 같습니다. –
go/build 패키지의 [overview] (http://golang.org/pkg/go/build/#overview)에서 "Build Constriants"아래에 문서화되어 있습니다. – Sonia
사실 그것은 훌륭한 해결책입니다 (Go와 맞습니다). –
go는 실제로 andyBallholm의 대답이 보여주는 것처럼 파일 이름 접미사를 사용하여 조건부 컴파일을 수행합니다. –
Downvoters gonna hate :). 그러나 심각하게도, @peterSO는 나의 특별한 문제에 대한 정답을 갖고있다. 맥 일이 빨개 졌어. 진짜 문제는 헤더 파일에서'#define'으로 만 발견 될 수있는 라이브러리 버전입니다. '_darwin.go' 또는'_linux.go'는 그들 중 하나가 그들의 호환되지 않는 변경으로 ENet 라이브러리를 갱신 할 때까지만 문제를 숨 깁니다. –