Go语言下载、安装、配置、使用

Go语言

Go语言(Golang,The Go Programming Language),是谷歌2009发布的第二款开源编程语言。2009年7月份,谷歌曾发布了Simple语言,它是用来开发Android应用。

Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。

谷歌首席软件工程师罗布派克(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)

2. 安装 Go

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

注意: 必须安装在 /usr/local/ 目录下,因为GOROOT必须为/usr/local/go

安装目录说明:

1234567891011121314151617181920

$ 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

目录文件解释:

1234567891011121314151617181920212223

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

注意: 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 语言中 = 和 := 有什么区别

= 是赋值, := 是声明变量并赋值。

123456789101112

// = 使用必须使用先var声明例如:var aa=100 // 或var b = 100 // 或var c int = 100 // := 是声明并赋值,并且系统自动推断类型,不需要var关键字d := 100

1) hello 示例

vim hello.go

1234567

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

编译执行:

go build ./hello

运行结果:

$ ./hello  hello mimvp.com

2)爬取网页示例

vim spider_web.go

12345678910111213141516171819202122

/*** 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 语言代理示例如下(全部都经过测试,成功):

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163

/*** 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中获取HTTP代理地址// 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个省市,代理质量和可用性非常高

米扑代理:http://proxy.mimvp.com

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小旋锋的大数据专栏

Google guava工具类的介绍和使用

工具类就是封装平常用的方法,不需要你重复造轮子,节省开发人员时间,提高工作效率。谷歌作为大公司,当然会从日常的工作中提取中很多高效率的方法出来。所以就诞生了gu...

22730
来自专栏学无止境

Go:学习笔记兼吐槽(1)

在很多其他的编程语言中,每一行代码的结尾都必须有分号(假设一行中只有一句代码),Golang 的开发者认为,既然每行都要加,不如编译器自动来加。当然,你加了分号...

8910
来自专栏web开发(程序员)

goweb开发学习(一)

4、建立Go的工作空间(workspace,也就是GOPATH环境变量指向的目录)

512100
来自专栏Jerry的SAP技术分享

SAP S/4HANA里如何创建Customer主数据以及执行后续处理

1, Launch tcode: BP and select the Organization

22620
来自专栏流川疯编写程序的艺术

研究生英语主题练习

science and technology (Mobile phone,Emai)—-口语练习 p.s.希望大家主要借鉴格式,忽略具体内容

13420
来自专栏TheOneGIS空间站

英文中常见连读规律总结

前一个辅音音素是:/p/、/b/、/t/、/d/、/k/、/g/时,失去爆破,即只做口型不发音

71240
来自专栏云市场·精选汇

吸粉 | 喜茶用小程序杀死排队:半年零成本吸粉600万,复购率翻3倍

在各家门店营业额持续上涨的前提下,喜茶的排队人数正在大大减少。黄牛排队加价也从20到30元不等,降为10元。

23010
来自专栏明天依旧可好的专栏

爬虫专栏目录

版权声明:转载注明博主:明天依旧可好;来源: https://blog.csdn.ne...

16740
来自专栏静谧的小码农

MS SQL 的存储过程练习

/*带参存储过程 if(OBJECT_ID('proc_find_stu', 'p') is not null)    dro...

9430
来自专栏伟大程序猿的诞生

Android开发者常用Chrome插件---(源码查看,投屏,json格式化等)

链接地址: https://chrome.google.com/webstore/detail/android-sdk-search/hgcbffeiceh...

19920

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励