2012-07-13 34 views
1

我的程序無法訪問互聯網時,在Android終端,但在Linux工作正常。 (wget的(busybox的)正常工作與android的終端網絡)如何從Android上運行的Go程序訪問Internet?

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

你是怎麼運行的?你會得到什麼錯誤?你確定代碼運行嗎? – 2012-07-13 05:40:57

+0

在linux('200 OK')中的http.Response狀態,在android(xperia s)打印錯誤:「'獲取http://ifconfig.me/ip:錯誤讀取DNS配置:打開/ etc/resolv。 conf:沒有這樣的文件或目錄'',文件/etc/resolv.conf不存在,問題是如何編譯的? – nocrox 2012-07-13 16:34:04

+0

**(android 4.0.4)** – nocrox 2012-07-13 16:45:05

回答

1

Android尚未完全支持Go。如果在將來某個時候他們添加一個Go sdk,這將會更容易。但是現在除非你想自己修改Go的源代碼或者編寫自己的一套庫來處理Androids不同的環境,否則這將很難實現。

2

的Android不具備的/etc/resolv.conf

某處在你的代碼,或者更有可能是你導入的那些庫之一,你假設傳統的linux用戶空間,這在Android上並不是這樣。

也許「GOOS = linux」是錯誤的來源。

+0

也許,我發現的唯一的東西是這[鏈接](https://groups.google.com/forum/#!msg/golang-nuts/t1qRnZtYP1w/WMTu5ByftLQJ),但我不知道如何... – nocrox 2012-07-14 00:13:18

+0

我相信你會在android下的/system/etc/resolv.conf中找到它。不知道你是如何告訴Go的 - 這是通常被燒到C運行時的東西。 – 2012-07-14 07:50:31

+0

yes ... resolv.conf = http://golang.org/src/pkg/net/dnsconfig.go – nocrox 2012-07-15 17:32:50

相關問題