–
第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 倍左右。
–
评论前必须登录!
注册