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)

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 VERSION
drwxr-xr-x   14 homer  staff    476 May 25 04:14 api
drwxr-xr-x    5 homer  staff    170 May 25 04:16 bin
drwxr-xr-x    4 homer  staff    136 May 25 04:16 blog
drwxr-xr-x   44 homer  staff   1496 May 25 04:14 doc
-rw-r--r--    1 homer  staff   5686 May 25 04:14 favicon.ico
drwxr-xr-x    3 homer  staff    102 May 25 04:14 lib
drwxr-xr-x   16 homer  staff    544 May 25 04:16 misc
drwxr-xr-x    7 homer  staff    238 May 25 04:16 pkg
-rw-r--r--    1 homer  staff     26 May 25 04:14 robots.txt
drwxr-xr-x   68 homer  staff   2312 May 25 04:14 src
drwxr-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/we...

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 a
a=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 mainimport ("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 mainimport ("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 varable
func 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)}
}// 指定代理ip
func 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:8081
func 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 dialerdialer, 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.Dialtransport := &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 proxyproxy_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 proxyproxy_socks := "175.138.65.244:1080"main_socks5(proxy_socks, mimvp_url)
}

本示例中的代理,全部来自米扑代理

米扑代理,提供专业高品质代理,支持http、https、socks4、socks5等协议,

覆盖全球120多个国家,中国34个省市,代理质量和可用性非常高

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

Go语言下载、安装、配置、使用相关推荐

  1. Linux GO语言下载安装配置

    下载安装 首先查看centos是64位还是32位,显示是64就是64位: 然后下载go-linux-64位源码包,手动wget安装,不推荐yum安装(现在最新版都1.8了,yum仓库最新版本才1.4) ...

  2. BASIC语言下载安装配置教程(超级简单!)

    1.使用bing搜索"FreeBasic"不要打卡第一个网址,点开下面的"Download"选项,选择中间的下载选项进行下载. 2.打开安装程序,一步一步安装即 ...

  3. Go语言下载安装教程|Goland配置教程|2021|Windows

    Go语言下载安装 Goland下载 *Goland安装Go(选) Go语言下载安装 下载地址:Golang.google 若是已安装或决定要用Goland,可选择Goland安装Go方法 Window ...

  4. Day001--Scala中的下载安装配置及下载安装集成开发环境IDEA

    老生常谈,我们学习一门语言之初都会先将其所依赖的环境和包安装好,Scala也不例外,只是Scala不能像Java一样,有一个专门来写它的IDE(eclipse),但我们可以在IDEA(集成开发环境)上 ...

  5. Android Studio新手–下载安装配置–零基础入门–基本使用–调试技能–构建项目基础–使用AS应对常规应用开发

    转自:http://blog.csdn.net/yanbober/article/details/45306483 目标:Android Studio新手–>下载安装配置–>零基础入门–& ...

  6. VMware16以及Ubuntu1.6的下载安装配置详细教程

    VMware以及Ubuntu的下载安装配置 一.安装VMware 二.开始安装Ubuntu 2.1 点击创建新的虚拟机![在这里插入图片描述](https://img-blog.csdnimg.cn/ ...

  7. MySQL命令行下载安装配置——详细教程

    安装一定要装在C盘,下载别的盘可能不好使 文章目录 免安装版的MySQL MySQL命令行下载 1.打开官网下载 2.点击 MySQL Community Server 3.选择适合的版本 MySQL ...

  8. AntSword 中国蚁剑的下载安装配置(附下载文件)

    文章更新于:2020-04-11 按照惯例,需要的文件附上链接放在文首. 文件一: antSword-2.1.8.1.zip.7z 文件大小: 14.3 MB 下载链接: 中国蚁剑 v2.1.8.1 ...

  9. mysql5.6.37驱动_mysql 5.6.37(zip)下载安装配置图文教程

    本文为大家分享了mysql 5.6.37 下载安装配置教程,供大家参考,具体内容如下 1.下载地址 2.下载完成之后解压缩,移动至安装目录下,建议重命名为:mysql server 5.6,我的安装目 ...

  10. java jdk windows环境 下载安装配置环境变量

    目录 下载 安装 环境变量 验证 下载 打开官网下载页面: https://www.oracle.com/java/technologies/javase-downloads.html 依次点击下图红 ...

最新文章

  1. USACO 1.4 Packing Rectangles
  2. mysql节假日表_节假日常见的数据库磁盘空间处理小结
  3. C++ :Signal: SIGSEGV (Segmentation fault) ,深拷贝
  4. C语言嵌入式系统编程修炼之六性能优化
  5. Windows10远程报错:由于CredSSP加密Oracle修正
  6. java 反射 速度_Java 反射获取类方法速率和实现方式
  7. 【Go学习笔记2】go语言中的基本数据类型和包的介绍(一)
  8. 微波感应模块电路图_关于人体感应灯,你不知道的“冷”知识
  9. CentOS添加新角色(新增一个具有root权限的新用户)
  10. 一站式学习Redis 从入门到高可用分布式实践(慕课)第三章 Redis客户端
  11. 激光光斑能量分布的matlab处理方法,激光光斑能量分布的MATLAB处理方法
  12. ValueError: bad transparency mask
  13. [转载]Oraclenbsp;grantnbsp;revokenbsp;…
  14. 讯飞语音 20006 错误 已解决
  15. 一文讲清楚什么是类型化数组、ArrayBuffer、TypedArray、DataView等概念
  16. android dialog隐藏虚拟按键,dialog全屏且不会弹出虚拟按键
  17. 补边不失真的resize(2)
  18. python 小说下载工具_python 制作网站小说下载器
  19. android 多屏幕显示activity,副屏,无线投屏
  20. 尾递归优化 - 尾递归优化

热门文章

  1. 2024届,该怎么找工作?
  2. 谷歌浏览器插件ghelper的安装
  3. JavaScript中,返回上一个页面时,如何保证上一个页面的不刷新?
  4. 在Vue中使用eCharts的地图图表,及生成自定义地图数据(乡镇级)
  5. Linux CentOS 7 touch 命令
  6. IDEA如何使用快捷键进行驼峰命名转换
  7. Mongodb 批量插入
  8. python中readlines_python中read,readline,和readlines的区别 并逐行输出
  9. QQ浏览器兼容模式下Cookie失效 导致的NetCore Cookie认证失效
  10. 再穷也要出去旅行,再累也要有自己的生活