路漫漫其修远兮
吾将上下而求索

第1-3章总结:go安装

第1章
1.1
2007-2017,最新版本:1.9.2
官网:https://golang.org
go编译器下载链接:https://golang.org/dl/
github地址:https://github.com/golang/go
查看github代码api文档:https://gowalker.org/

1.2
go语言优势,改进的地方:快速编译,高效执行,易于开发
不允许进行指针运算,安全
goroutine 这种轻量级线程,并发
编译成执行文件,快速编译
go install快速安装第三方包
编译生成二进制文件,没有复杂的执行环境依赖,即拿即用,易于部署
通过接口(interface)的概念来实现多态,面向对象
标准库齐全,规范统一
节省内存

第2章
2.1
对于纯 Go 语言代码或者包而言,在各个操作系统平台上的可移植性是非常强的,只需要将源码拷贝到相应平台上进行编译即可
Go 语言本身是由 C 语言开发的,而不是 Go 语言(Go 1.5 开始自举)

2.2
linux下环境变量
$GOROOT 表示 Go 在你的电脑上的安装位置,它的值一般都是 $HOME/go,当然,你也可以安装在别的地方。
$GOARCH 表示目标机器的处理器架构,它的值可以是 386、amd64 或 arm。
$GOOS 表示目标机器的操作系统,它的值可以是 darwin、freebsd、linux 或 windows。
$GOPATH 默认采用和 $GOROOT 一样的值,但从 Go 1.1 版本开始,你必须修改为其它路径。它可以包含多个包含 Go 语言源码文件、包文件和可执行文件的路径,
    而这些路径下又必须分别包含三个规定的目录:src、pkg 和 bin,这三个目录分别用于存放源码文件、包文件和可执行文件。
$GOPATH/src目录下面有标准库的源码文件目录,里面的代码值得学习


下面进行测试,下载当前最新版go二进制包
linux下可从官网下载安装包到指定目录,此文件为二进制文件,即可直接使用
源码编译需下载src.tar.gz包,安装相应的devel包进行构建
[root@master-20 ~]#wget https://go.dev/dl/go1.20.3.linux-amd64.tar.gz

[root@master-20 ~]#tar xf go1.20.3.linux-amd64.tar.gz -C /usr/local/
[root@master-20 ~]#ll /usr/local/go/
total 208
drwxr-xr-x  2 root root  4096 Aug 14 00:56 api
-rw-r--r--  1 root root 55358 Aug 14 00:54 AUTHORS
drwxr-xr-x  2 root root  4096 Aug 14 00:59 bin
-rw-r--r--  1 root root  1339 Aug 14 00:54 CONTRIBUTING.md
-rw-r--r--  1 root root 78132 Aug 14 00:54 CONTRIBUTORS
drwxr-xr-x  8 root root  4096 Aug 14 00:56 doc
-rw-r--r--  1 root root  5686 Aug 14 00:54 favicon.ico
drwxr-xr-x  3 root root  4096 Aug 14 00:56 lib
-rw-r--r--  1 root root  1479 Aug 14 00:54 LICENSE
drwxr-xr-x 13 root root  4096 Aug 14 00:56 misc
-rw-r--r--  1 root root  1303 Aug 14 00:54 PATENTS
drwxr-xr-x  6 root root  4096 Aug 14 00:59 pkg
-rw-r--r--  1 root root  1607 Aug 14 00:54 README.md
-rw-r--r--  1 root root    26 Aug 14 00:54 robots.txt
drwxr-xr-x 46 root root  4096 Aug 14 00:56 src
drwxr-xr-x 21 root root 12288 Aug 14 00:56 test
-rw-r--r--  1 root root     8 Aug 14 00:56 VERSION

#配置代理,有些包需要翻墙才能下载,配置这个后可以在国内下载
export GO111MODULE=on
export GOPROXY=https://goproxy.cn

goproxy.cn:由七牛云运行,支持代理 sum.golang.org,经过 CDN 加速,高可用,可应用进公司复杂的开发环境中,亦可用作上游代理;
mirrors.aliyun.com/goproxy:由阿里云运行,不支持 sumdb 代理,经过 CDN 加速,高可用,可应用进公司复杂的开发环境中,亦可用作上游代理;
goproxy.io:由个人运行,支持代理 sum.golang.org。

windows环境变量配置:打开控制面板,选择系统和安全 再选择系统 再选择高级系统设置 选择高级一栏,点击环境变量 将上面的环境变量配置上就可以


[root@master-20 ~]#cat >> /etc/profile <<EOF


export GOROOT=/usr/local/go
export PATH=\$PATH:\$GOROOT/bin
export GOPATH=/data/gopath
export GO111MODULE=on
export GOPROXY=https://goproxy.cn
EOF

[root@master-20 ~]#source /etc/profile

[root@master-20 ~]#go env
GOARCH="amd64"
GOBIN=""
GOCACHE="/root/.cache/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/data/gopath"
GOPROXY=""
GORACE=""
GOROOT="/usr/local/go"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build894625180=/tmp/go-build -gno-record-gcc-switches"

[root@master-20 ~]#cat hello_world1.go 
package main
func main(){
    println("hello", "world")
}
[root@master-20 ~]#go run hello_world1.go 
hello world


Go 的源代码有以下三个分支:
 - Go release:最新稳定版,实际开发最佳选择
 - Go weekly:包含最近更新的版本,一般每周更新一次
 - Go tip:永远保持最新的版本,相当于内测版

推荐使用:https://www.jetbrains.com/go/  提高开发效率,事半功倍
对应的快捷键:http://www.cnblogs.com/jajian/p/8012603.html


2.7
尽管 Go 编译器产生的是本地可执行代码,这些代码仍旧运行在 Go 的 runtime(这部分的代码可以在 runtime 包中找到)当中。这个 runtime 类似 Java 和 .NET 
语言所用到的虚拟机,它负责管理包括内存分配、垃圾回收、栈处理、goroutine、channel、切片(slice)、map 和反射(reflection)等等。

3
在 fmt.Printf 中使用下面的说明符来打印有关变量的相关信息:

%+v 打印包括字段在内的实例的完整信息
%#v 打印包括字段和限定类型名称在内的实例的完整信息
%T 打印某个类型的完整说明,如果不知道某个变量的类型,可以使用
3.4
使用 Go 自带的更加方便的工具来构建应用程序:
go build 编译并安装自身包和依赖包
go install 安装自身包和依赖包
3.5
go fmt(gofmt)。这个工具可以将你的源代码格式化成符合官方统一标准的风格,属于语法风格层面上的小型重构。遵循统一的代码风格是 Go 开发中无可撼动的铁律,
    因此你必须在编译或提交版本管理系统之前使用 gofmt 来格式化你的代码。
3.6 
go doc 工具会从 Go 程序和包文件中提取顶级声明的首行注释以及每个对象的相关注释,并生成相关文档。
go doc package 获取包的文档注释,例如:go doc fmt 会显示使用 godoc 生成的 fmt 包的文档注释。
go doc package/subpackage 获取子包的文档注释,例如:go doc container/list。
go doc package function 获取某个函数在某个包中的文档注释,例如:go doc fmt Printf 会显示有关 fmt.Printf() 的使用说明。
这个工具只能获取在 Go 安装目录下 .../go/src 中的注释内容。此外,它还可以作为一个本地文档浏览 web 服务器。在命令行输入 godoc -http=:6060,然后使用浏
    览器打开 http://localhost:6060 后,你就可以看到本地文档浏览服务器提供的页面。
3.8
Go 语言与 C 语言的性能差距大概在 10%~20% 之间
Go 程序比 Java 或 Scala 应用程序要快上 2 倍,并比这两门语言使用少占用 70% 的内存。
比较 Go 和 Python 在简单的 web 服务器方面的性能,单位为传输量每秒:
原生的 Go http 包要比 web.py 快 7 至 8 倍,如果使用 web.go 框架则稍微差点,比 web.py 快 6 至 7 倍。在 Python 中被广泛使用的 tornado 异步服务器和框架
    在 web 环境下要比 web.py 快很多,Go 大概只比它快 1.2 至 1.5 倍(详见引用 26)。
Go 和 Python 在一般开发的平均水平测试中,Go 要比 Python 3 快 25 倍左右,少占用三分之二的内存,但比 Python 大概多写一倍的代码(详见引用 27)。

根据 Robert Hundt(2011 年 6 月,详见引用 28)的文章对 C++、Java、Go 和 Scala,以及 Go 开发团队的反应(详见引用 29),可以得出以下结论:
Go 和 Scala 之间具有更多的可比性(都使用更少的代码),而 C++ 和 Java 都使用非常冗长的代码。
Go 的编译速度要比绝大多数语言都要快,比 Java 和 C++ 快 5 至 6 倍,比 Scala 快 10 倍。
Go 的二进制文件体积是最大的(每个可执行文件都包含 runtime)。
在最理想的情况下,Go 能够和 C++ 一样快,比 Scala 快 2 至 3 倍,比 Java 快 5 至 10 倍。
Go 在内存管理方面也可以和 C++ 相媲美,几乎只需要 Scala 所使用的一半,比 Java 少 4 倍左右。

未经允许不得转载:江哥架构师笔记 » 第1-3章总结:go安装

分享到:更多 ()

评论 抢沙发

评论前必须登录!