如何从Android上运行的Go程序访问Internet?

时间:2012-07-13 05:13:27

标签: android go

我的程序在安装到android终端时无法访问互联网,但在linux下工作正常。 (wget(busybox)在android终端中可以正常使用互联网)

package main

import (
    "io"
    "io/ioutil"
    "net/http"
)

func Url(url string)(string, io.ReadCloser, http.Header, error){
    var c = http.Client{}
    inf, err := c.Get(url)
    if err == nil {
        data,_ := ioutil.ReadAll(inf.Body)
        return string(data), inf.Body, inf.Header, err
    }
    return "", nil, nil, err
}

func main() {
    print("test internet... ")
    c,_,_,err := Url("http://ifconfig.me/ip")
    if err == nil {
        println("\n ip:", c)
    }else{
        println("error")
    }
}

编译:

go build main.go    # linux
CGO_ENABLED=0 GOOS=linux GOARCH=arm go build $(bin).go    # android

2 个答案:

答案 0 :(得分:2)

Android没有/etc/resolv.conf

在代码中的某个地方,或者更可能是您导入的其中一个库,您假设是传统的Linux用户空间,而Android则不是这样。

也许“GOOS = linux”是错误的来源。

答案 1 :(得分:1)

Android尚未完全支持Go。如果在将来的某个时刻他们添加Go sdk,这将更容易。但是现在除非您想自己修改Go的源代码或者编写自己的库来处理Androids不同的环境,否则这将很难实现。