package main
import (
"fmt"
"os/exec"
)
func main() {
errChan := make(chan error)
go func() {
var e *exec.Error = nil
errChan <- e
}()
err := <-errChan
if err != nil {
fmt.Printf("err != nil, but err = %v\n", err)
}
}
Run Code Online (Sandbox Code Playgroud)
输出很奇怪:err != nil, but err = <nil>
在这里试试:http://play.golang.org/p/_iyh0m7O1a
我尝试使用Go 1.3将cgo代码交叉编译到我的darwin/amd64 MBP上的linux/arm,但结束时没有运气:(
我的环境:
go version go1.3 darwin/amd64
我的目标:
交叉编译针对linux/arm的cgo代码.
步骤1:
使用ct-ng构建gcc/g ++交叉编译器.它是建立一个很长的路arm-unknown-linux-gnueabi-g++
和arm-unknown-linux-gnueabi-gcc
,但我终于做到了.我测试了简单的C/C++程序,输出在我的linux/arm R-Pi盒子上工作正常.
第2步:
cd/path/to/go/src
sudo CGO_ENABLED = 1 CC_FOR_TARGET =/path/to/arm-unknown-linux-gnueabi-gcc CXX_FOR_TARGET =/path/to/arm-unknown-linux-gnueabi -g ++ GOOS = linux GOARCH = arm ./make.bash
一切都建好了.
第3步:
编译以下简单的cgo代码:
package main
/*
#include <stdio.h>
#include <stdlib.h>
*/
import "C"
import (
"unsafe"
)
func main() {
str := C.CString("abc\n")
C.printf(str)
C.free(unsafe.Pointer(str))
}
Run Code Online (Sandbox Code Playgroud)
对于我的主机:
go install package/of/test
失败了
arm-unknown-linux-gnueabi-gcc: error: unrecognized command line option '-m64'
对于linux/arm:
GOOS=linux GOARCH=arm go install …