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
安装目录说明:
$ 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/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 语言中 = 和 := 有什么区别
= 是赋值, := 是声明变量并赋值。
// = 使用必须使用先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 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 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 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个省市,代理质量和可用性非常高
Go语言下载、安装、配置、使用的更多相关文章
- 从零开始使用git第一篇:下载安装配置
从零开始使用git 第一篇:下载安装配置 第一篇:从零开始使用git第一篇:下载安装配置 第二篇:从零开始使用git第二篇:git实践操作 第三篇:从零开始使用git第三篇:git撤销操作.分支操作和 ...
- AntSword 中国蚁剑的下载安装配置(附下载文件)
文章更新于:2020-04-11 按照惯例,需要的文件附上链接放在文首. 文件一: antSword-2.1.8.1.zip.7z 文件大小: 14.3 MB 下载链接: 中国蚁剑 v2.1.8.1 ...
- win10 DVWA下载安装配置(新手学渗透)
电脑重装系统了,需要重新装一下渗透测试的学习环境DVWA,借此机会就跟大家讲一下DVWA的安装过程,因为不同的电脑配置.环境不同,在我的电脑上按照我这个安装教程是一次性就安装好了的.如果安装的时候遇到 ...
- Jmeter下载安装配置及使用(windows)
1 前言 仅作为记录使用. 2 步骤 2.1 下载地址:http://jmeter.apache.org/download_jmeter.cgi 2.2 选择binary版本即可:apache-jme ...
- 01_2Java开发环境的下载 安装 配置
01_2Java开发环境的下载 安装 配置 l 配置Java开发环境步骤(WindowsXP) l 下载并按照最新版本的J2SDK l 设置Windows环境变量 l 选择合适的文本编辑器或使用集成开 ...
- 2019-03-18 OpenCV Tesseract-OCR 下载 安装 配置(cv2 报错)
OpenCV 下载 安装 配置 1.下载和Python版本对应的版本,此为下载地址 2.安装(在powershell管理员模式下安装) pip3 install .\opencv_python-3.4 ...
- JDK下载安装配置教程(详细)
JDK下载安装配置教程(详细) 版权声明:本文为原创文章,转载请附上原文出处链接和本声明.https://www.cnblogs.com/mxxbc/p/11844885.html 因为最近需要在Wi ...
- Windows32位或64位下载安装配置Scala
[学习笔记] Windows 32位或64位下载安装配置Scala: 1)下载地址:http://www.scala-lang.org/download/,看我的spark那节,要求scala是2.1 ...
- Windows32或64位下载安装配置Spark
[学习笔记] Windows 32或64位下载安装配置Spark:1)下载地址:http://spark.apache.org/downloads.html 马克-to-win @ 马克java社区: ...
- win10操作系统下oracle11g客户端/服务端的下载安装配置卸载总结
win10操作系统下oracle11g客户端/服务端的下载安装配置卸载总结 一:前提 注意:现在有两种安装的方式 1. oracle11g服务端(64位)+oracle客户端(32位)+plsql(3 ...
随机推荐
- Java常见算法整理
兔子问题(斐波那契数列规律) 台阶问题 (兔子问题变种,递归规律) 素数问题(判断素数.质数方式) 水仙花数问题(数字分解) 查找算法(二分查找) 排序算法(选择排序,冒泡排序,快速排序) 兔子问题, ...
- 延迟实例化 Lazy<T>
之前写的设计模式 单例模式中,推荐了使用Lazy<T>来达到线程安全和减少系统资源消耗的作用. 作用及优点: 创建某一个对象需要很大的消耗,而这个对象在运行过程中又不一定用到,为了避免每次 ...
- 程序员也有春天之HTTP/2.0配置
哎呀,一不小心自己的博客也是HTTP/2.0了,前段时间对网站进行了https迁移并上了CDN,最终的结果是这酱紫的(重点小绿锁,安全标示以及HTTP/2.0请求). 科普 随着互联网的快速发展,HT ...
- JavaScript在应用中的技巧(二)
==,===运算符和强制转换 先看个表达式: "1.0e0" == { valueOf: function() { return true; } }; 是的,这个结果可能有点出乎意 ...
- px,em,rem,vw单位在网页和移动端的应用
px: 是网页设计中最常用的单位,然而1px到底是多大长,恐怕没有人能回答上来 它用来表示屏幕设备物理上能显示的最小的一个点,这个点不是固定宽度的,不同设备上点的长度.比例有可能会不同. 假设:你现在 ...
- Linux-grep 命令和find 命令 (6)
grep与find区别: grep:查找指定目录下过滤文本文件中行数据 find:查找指定目录下文件 grep使用 格式: grep "text" * [选项] 选项: ...
- 用GDI+画验证码
1.新建一个窗体应用程序,在上面拖一个pictureBox对象,为其添加单击事件 2.创建GDI对象.产生随机数画入图片中.画线条.最后将图片到pictureBox中,代码如下: private vo ...
- 标题:a++和++a的区别
以前我也是老搞不懂a++和++a的区别, 后来看了很多资料, 终于总结出来一条规律, 小白专用! 看完这个例子就懂了: 例1:$a = 8, 求 ++a + a++ - --a + a-- + ++a ...
- 【java】关于java类和对象,你想知道的在这里!
java类的基本组成 java作为一门面向对象的语言, 类和对象是最重要的概念之一,下面,就让我们来看看java中类的基本结构是怎样的: 一个简单的java类主要可由以下几个部分(要素)组成: 1.实 ...
- 201521123091 《Java程序设计》第13周学习总结
Java 第十三周总结 第十三周的作业. 目录 1.本章学习总结 2.Java Q&A 3.码云上代码提交记录及PTA实验总结 4.课后阅读 1.本章学习总结 1.1 以你喜欢的方式(思维导图 ...