1 认识狗

  • Go的特性、历史及优缺点
  • 不同系统安装Go环境的方法
  • Go的基本命令及开发Go的常用工具

1.1 Go语言简介

  • 09年正式发布
  • 开源静态编译型编程语言

1.1.1 Go简史

  • 最早07年由Rob Pike(贝尔实验室UNIX团队成员,曾参与Plan9、 Inferno和 Limbo等项目)、 Robert Griesemer( Java Hotspot,虚拟机、V8引擎开发者之一)和Ken
    Thompson(贝尔实验室UNIX团队成员,C语言、UNIX和Plan9创始人之ー,与 Rob Pike
    共同开发了UTF-8字符集规范)三人在业余时间联合开发,后来还加入了 lan Lance Taylor
    (GCC核心开发人员)、 Russ Cox(曾参与Plan9操作系统的开发)和 Brad Fitzpatrick
    ( memcached的作者)等人。
    Go语言的创始团队对操作系
    统和系统编程语言有着非常深刻的理解,这对一门编程语言的开发起到至关重要的作用。

  • 09年11月10日正式发布,以BSD协议完全开源,
  • 支持Linux和 Mac OS,同年11月Windows。
  • 至今Go已完成自举,
    • 大量杀手级应用
    • (Moby、 Kubernetes、 Gogs、 Grafana、Etcd),
    • 两次TIOBE年度编程语言称号(09年和16年)。
  • 累计接受3万多次代码提交,近900开发者参与到Go项目

1.1.2 特性

  • 作为一门静态类型的编译型语言,与传统开发语言(Java、PHP)
    相比具备许多新特性。
  • Go有自动垃圾回收,也允许开发人员干预回收操作;
  • 有更丰富的内置类型,在错误处理方面语法更加精简高效。
  • 函数支持多个返回值,函数也是一种值类型,可作为参数传递。
  • Go语言的类型定义参考了C中的struct,但不像C+和Java那样设计一个庞杂的类型系统,仅支持最基本的类型组合,不支持继承和重载。
  • 虽然没有类和继承,但通过接口的概念来实现多态

  • 对多核处理器的编程优化,
  • 从程序与结构方面来实现并发编程,
  • Go最重要的特性之一

  • 和其他语言一样,有健全的包管理机制,得益于包之间的树状依赖
  • Go的初次编译速度媲美C/C++,二次编译速度快于C/C++,
  • 接近Python等解释语言的简洁和开发效率
  • 执行速度、编译速度和开发效率权衡
    • 达到快速编译,高效执行,易于开发

  • 支持交叉编译,可在Linux上开发Windows下的应用程序。
  • 源码文件格式默认都用UTF-8编码

1.1.3谁适合使用Go语言

  • Go适合哪些场景?
  • Go可以让Web服务器端的开发更高效,能充分发挥多核计算机性能,拥有更出色的网络环境兼容能力。
  • 自动垃圾回收、类型安全、依赖严格、编译快速等特点都是Go的魅力。
  • Go的目标就是针对服务器端的Web开发

  • 其出色的并发能力,在高性能分布式系统领域,
    • 像集群系统、游戏服务器端都把其作为首选开发语言
  • 不适合开发强实时性的软件,
    • 垃圾回收和自动内存分配导致在实时性上力不从心

1.2 开发环境部署

  • 目前支持 FREEBSD Linux
  • 安装包
    • https://golang.org/dl

1.2.1 环境变量

  • 安装Go语言开发环境要设置
    • 全局的操作系统环境变量(除非用包管理工具直接安装)
  • 系统级环境变量
  • $GOROOT:安装位置,可任意位置,只有一个值,必须是绝对路径
  • $GOPATH:工作目录,可有多个,类似于工作空间
    • 不建议将 SGOPATH和 SGOROOT设置为同一目录

1.2.2 Linux上安装Go语言环境

  • 先下载Linux安装包,如图1-1,选择 Linux安装包。

1 认识狗

  • 下载后,解压

1 认识狗

1 当前用户

  • 解压后看到go文件夹
  • 把这个文件夹移动到你喜欢的位置,
  • 编辑 $HOME/.profile

1 认识狗

  • 放在$HOME/Applications/go/
  • $HOME/Workspace/Go/和$HOME/other/Go为工作目录
  • $GOPATH可设多个,
    • 包管理安装时默认使用第一个为下载目录,
    • 建议$GOPATH第一个值设为常用的全局工作目录,
      • 以后安装一些Go工具时,它们的bin执行文件可在这里找到

  • 第三句把前两个变量输出到系统$PATH变量,
  • 当前用户环境中就可随时使用Go环境

2.所有用户

  • 如果让所有用户都能全局用这个Go环境变量
  • 可把解压出来的go目录移到相应目录,并设置变量

1 认识狗

3 用系统包管理安装

  • 还可用Linux发行版在软件仓库中提供的Go语言环境安装包,
  • 如Debian、 Ubuntu等发行版

1 认识狗

  • 其他发行版类似,软件包名称不是golang就是go,或组合词

1.2.3 Mac Os上安装

  • 图1-1可下载 Mac OS的安装包,
  • 双击安装,根据引导安装即可
  • 默认安到/usr/local/go/
  • 如果之前已安装Go,要卸载原来版本再安装
    • 即删除/etc/paths.d/go文件

  • Mac OS设置变量与Linux-样,
    • 安装结束后用命令査看Go是否安装成功
  • $ go version

1.2.4 Windows上安装

  • 图1-1下载Windows安装包,一个可执行文件,双击安装
  • 默认安装位置C:\Go
  • Windows有针对所有用户的系统变量与针对当前用户的用户变量,设置系统变量为例,针对所有用户都有效。

  • “系统变量”中单击“新建”,输入“变量名”GOROOT,
    • “值”是Go语言路径C:/Go,就配置好Go的安装路径
  • 修改PATH,在变量值最后添加%%GOROOT\bin,
    • 与其他PATH变量以;分隔
  • CMD中输入 go version看是否正常输出版本号

1.3 Go的基本命令及使用

  • 输入go help看哪些命令可用

  • go是用于管理Go源码的工具

  • go command [arguments]

  • build:编译源代码包和依赖。

1 认识狗

  • go help [command]每一个命令的使用细节。

  • 这些自带的命令实际来自$GOROOT/bin与$GOROOT/pkg/tool/linux_amd64下的可执行文件。
  • 1.3.3介绍常用的基础命令。
  • 先看GOROOT与GOPATH中有哪些要注意的

1.3.1 GOROOT结构

1 认识狗

1 认识狗

  • api存放公开的变量、常量、函数等API列表,用于Go语言API
    检索。
  • bin存储标准命令执行文件,如默认的go、 godot、 gofmt三件套。
  • doc存放标准库的文档,使用 godot-htp=:6060命令可以启动文档服务,通过本地6060端口即可访问。
  • pkg存放编译Go语言标准库生成的文件,
    • 里面的文件根据不同系统与架构有所不同,在SGOROOT这个文件中的pkg一般只有标准库的编译缓存文件,这些文件编译Go程序时起到很大作用,例如pkg/tool/linux_amd64/下就有很多 go tool i命令的执行文件。
  • src:Go语言自己的源码(包括标准库),阅读源码时就看这

1.3.2 GOPATH结构