Go語言下載、安裝、配置、使用

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

Go語言

Go語言(Golang,The Go Programming Language),是Google2009發布的第二款開源程式設計語言。2009年7月份,Google曾發布了Simple語言,它是用來開發Android應用。

Go語言是Google推出的一種全新的程式設計語言,可以在不損失應用程式效能的情況下降低代碼的複雜性。

Google首席軟體工程師羅布派克(Rob Pike)說:我們之所以開發Go,是因為過去10多年間軟體開發的難度令人沮喪。

Go語言專門針對多處理器系統應用程式的編程進行了最佳化,使用Go編譯的程式可以媲美C或C++代碼的速度,而且更加安全、支援並行進程。

Go語言官網: https://golang.org (需要VPN訪問)

1. 下載 Go

Go語言是跨平台,支援Windows、Linux、Mac OS X等系統,還提供有源碼,可編譯安裝

Windows :go1.8.3.windows-amd64.msi (78MB)

Linux :go1.8.3.linux-amd64.tar.gz (86MB)

Mac :go1.8.3.darwin-amd64.tar.gz (85MB) (推薦)

Source: go1.8.3.src.tar.gz (15MB)

go-yu-yan-xia-zai-an-zhuang-pei-zhi-shi-yong-01

2. 安裝 Go

sudo tar -C /usr/local/ -zxvf go1.8.3.darwin-amd64.tar.gz

注意: 必須安裝在 /usr/local/ 目錄下,因為GOROOT必須為/usr/local/go

安裝目錄說明:

$ ll /usr/local/go/total 232-rw-r--r--    1 homer  staff  33243 May 25 04:14 AUTHORS-rw-r--r--    1 homer  staff   1366 May 25 04:14 CONTRIBUTING.md-rw-r--r--    1 homer  staff  45710 May 25 04:14 CONTRIBUTORS-rw-r--r--    1 homer  staff   1479 May 25 04:14 LICENSE-rw-r--r--    1 homer  staff   1303 May 25 04:14 PATENTS-rw-r--r--    1 homer  staff   1399 May 25 04:14 README.md-rw-r--r--    1 homer  staff      7 May 25 04:14 VERSIONdrwxr-xr-x   14 homer  staff    476 May 25 04:14 apidrwxr-xr-x    5 homer  staff    170 May 25 04:16 bindrwxr-xr-x    4 homer  staff    136 May 25 04:16 blogdrwxr-xr-x   44 homer  staff   1496 May 25 04:14 doc-rw-r--r--    1 homer  staff   5686 May 25 04:14 favicon.icodrwxr-xr-x    3 homer  staff    102 May 25 04:14 libdrwxr-xr-x   16 homer  staff    544 May 25 04:16 miscdrwxr-xr-x    7 homer  staff    238 May 25 04:16 pkg-rw-r--r--    1 homer  staff     26 May 25 04:14 robots.txtdrwxr-xr-x   68 homer  staff   2312 May 25 04:14 srcdrwxr-xr-x  269 homer  staff   9146 Jul 25 01:29 test
api   — 目錄,包含所有API列表,方便IDE使用bin   — 目錄,存放編譯後的可執行檔blog  — 目錄,doc   — 目錄,協助文檔lib   — 目錄,misc  — 目錄,pkg   — 目錄,存放編譯後的包檔案。pkg中的檔案是Go編譯產生的src   — 目錄,存放項目源檔案test  - 目錄,範例程式碼

註:一般,bin和pkg目錄可以不建立,go命令會自動建立(如 go install),只需要建立src目錄即可。

AUTHORS         — 檔案,作者列表,用記事本開啟CONTRIBUTING.md — 檔案,CONTRIBUTORS    — 檔案,LICENSE         — 檔案,license,用記事本開啟PATENTS         — 檔案,README.md       — 檔案,VERSION         — 檔案,版本資訊,用記事本開啟 favicon.ico     — 檔案,robots.txt      — 檔案,使用robots.txt阻止對網址的訪問,

詳情查看https://support.google.com/webmasters/answer/6062608?hl=zh-Hans

Eclipse 安裝Go外掛程式,在市場裡搜尋 "go",如,安裝 GoClipse

go-yu-yan-xia-zai-an-zhuang-pei-zhi-shi-yong-02

注意: GoClipse外掛程式開發的程式,需要重啟電腦後才會生效,因為 /etc/profile 配置的環境變數重啟電腦後才生效

3. 配置 Go

vim /etc/profile

添加配置:

GOROOT=/usr/local/go
export PATH=$GOROOT/bin:$PATH

使配置生效:

source /etc/profile

驗證安裝成功:

$ go version
go version go1.8.3 darwin/amd64

4. 使用 Go

基本文法

Go 語言中 = 和 := 有什麼區別

= 是賦值, := 是聲明變數並賦值。

// = 使用必須使用先var聲明例如:var aa=100 // 或var b = 100 // 或var c int = 100 // := 是聲明並賦值,並且系統自動推斷類型,不需要var關鍵字d := 100 

1) hello 樣本

vim hello.go

package main  import "fmt" func main() {   fmt.Printf("hello mimvp.com")}

編譯執行:

go build
./hello

運行結果:

$ ./hello
hello mimvp.com

2)爬取網頁樣本

vim spider_web.go

/*** mimvp.com* 2017.4.12** spider web of mimvp.com*/ package main import (    "fmt"    "io/ioutil"    "net/http") func main() {    response, _ := http.Get("http://mimvp.com")    defer response.Body.Close()    body, _ := ioutil.ReadAll(response.Body)    fmt.Println(string(body))        fmt.Printf("len : %d\n", len(string(body)));}

編譯執行:

$ go build spider_web.go
$ ./spider_web

<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8">...</body></html>len : 15661

5. 代理樣本

Go語言支援的代理為 http 和 socks5,不支援 https 和 socks4

其中,Go使用socks5代理時,需要安裝引用 "golang.org/x/net/proxy",安裝配置步驟如下:

  1. download https://github.com/golang/net

  2. unzip and move to /usr/local/go/src/golang.org/x/net/

  3. import ( "golang.org/x/net/proxy" )

Go 語言代理樣本如下(全部都經過測試,成功):

/*** mimvp.com* 2017.7.20* golang use http, socks5 proxy */ package main import (    "fmt"    "io/ioutil"    "log"    "net/http"    "net/url"    "os"     "golang.org/x/net/proxy") // success http// proxy_uri := "http://125.77.25.124:80"// mimvp_url := "http://mimvp.com"func main_1(proxy_uri string, mimvp_url string) {    proxy := func(_ *http.Request) (*url.URL, error) {        return url.Parse(proxy_uri)    }    transport := &http.Transport{Proxy: proxy}    client := &http.Client{Transport: transport}    resp, err := client.Get(mimvp_url)    if err != nil {        fmt.Println("error : ", err)        return    } else {        defer resp.Body.Close()        body, _ := ioutil.ReadAll(resp.Body)        fmt.Printf("%s\n", body)    }} // success http// proxy_uri := "http://125.77.25.124:80"// mimvp_url := "http://mimvp.com"func main_2(proxy_uri string, mimvp_url string) {    url_i := url.URL{}    url_proxy, _ := url_i.Parse(proxy_uri)    transport := &http.Transport{Proxy: http.ProxyURL(url_proxy)}    client := http.Client{Transport: transport}    resp, err := client.Get(mimvp_url)    if err != nil {        log.Fatalln(err)    } else {        defer resp.Body.Close()        body, _ := ioutil.ReadAll(resp.Body)        fmt.Printf("%s\n", body)    }} // config environment varablefunc main_22(proxy_uri string, mimvp_url string) {    // url_i := url.URL{}    // url_proxy, _ := url_i.Parse("https://127.0.0.1:9743")    os.Setenv("HTTP_PROXY", "http://125.77.25.124:80")    os.Setenv("HTTPS_PROXY", "https://210.209.89.100:8081")    c := http.Client{ /* Transport: &http.Transport{ // Proxy: http.ProxyURL(url_proxy)} */ }    resp, err := c.Get("http://mimvp.com")    if err != nil {        log.Fatalln(err)    } else {        defer resp.Body.Close()        body, _ := ioutil.ReadAll(resp.Body)        fmt.Printf("%s\n", body)    }} // 指定代理ipfunc getTransportFieldURL(proxy_addr *string) (transport *http.Transport) {    url_i := url.URL{}    url_proxy, _ := url_i.Parse(*proxy_addr)    transport = &http.Transport{Proxy: http.ProxyURL(url_proxy)}    return} // 從環境變數$http_proxy或$HTTP_PROXY中擷取HTTPProxy 位址// Linux 設定代理環境變數命令:// http_proxy=http://125.77.25.124:80// https_proxy=https://210.209.89.100:8081func getTransportFromEnvironment() (transport *http.Transport) {    transport = &http.Transport{Proxy: http.ProxyFromEnvironment}    return} func fetch(mimvp_url, proxy_uri *string) (html string) {    transport := getTransportFieldURL(proxy_uri)    client := &http.Client{Transport: transport}    req, err := http.NewRequest("GET", *mimvp_url, nil)    if err != nil {        log.Fatal(err.Error())    }    resp, err := client.Do(req)    if err != nil {        log.Fatal(err.Error())    }    if resp.StatusCode == 200 {        robots, err := ioutil.ReadAll(resp.Body)        resp.Body.Close()        if err != nil {            log.Fatal(err.Error())        }        html = string(robots)    } else {        html = ""    }    return} // success http// proxy_uri := "http://125.77.25.124:80"// mimvp_url := "http://mimvp.com"func main_3(proxy_uri string, mimvp_url string) {    html := fetch(&mimvp_url, &proxy_uri)    fmt.Println(html)} // success socks5// 1. download https://github.com/golang/net// 2. unzip and move to /usr/local/go/src/golang.org/x/net/// 3. import ( "golang.org/x/net/proxy" )func main_socks5(proxy_socks string, mimvp_url string) {    // create a socks5 dialer    dialer, err := proxy.SOCKS5("tcp", proxy_socks, nil, proxy.Direct)    if err != nil {        fmt.Println(os.Stderr, "can't connect to socks5 proxy:", err)        os.Exit(1)    }     // setup a http client    //    transport := &http.Transport{}    //    transport.Dial = dialer.Dial    transport := &http.Transport{Dial: dialer.Dial}    client := &http.Client{Transport: transport}     resp, err := client.Get(mimvp_url)    if err != nil {        log.Fatalln(err)    } else {        defer resp.Body.Close()        body, _ := ioutil.ReadAll(resp.Body)        fmt.Printf("%s\n", body)    }} func main() {    // http proxy    proxy_uri := "http://125.77.25.124:80"    mimvp_url := "http://mimvp.com"    main_1(proxy_uri, mimvp_url)    main_2(proxy_uri, mimvp_url)    main_3(proxy_uri, mimvp_url)     // socks5 proxy    proxy_socks := "175.138.65.244:1080"    main_socks5(proxy_socks, mimvp_url)}

本樣本中的代理,全部來自米撲代理

米撲代理,提供專業高品質代理,支援http、https、socks4、socks5等協議,

覆蓋全球120多個國家,中國34個省市,代理品質和可用性非常高

米撲代理:https://proxy.mimvp.com

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.