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创始人之ー,与Pike共同开发UTF-8字符集规范)
    • 三人在业余时间联合开发,
    • 后来还加入lan Lance Taylor(GCC核心开发人员)、
    • Russ Cox(参与Plan9操作系统的开发)
    • Brad Fitzpatrick(memcached的作者)等
  • 对OS和系统编程语言
    • 有非常深刻的理解

  • 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可以让Web服务器端的开发更高效,能充分发挥多核计算机性能,拥有更出色的网络环境兼容能力
  • 自动垃圾回收、类型安全、依赖严格、编译快速等特点都是魅力
  • 针对服务器端的Web开发

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

实时性强的不适合go啊?

1.2 开发环境部署

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

1.2.1 环境变量

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

1.2.2 Linux上安装Go语言环境

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

在这里插入图片描述

  • 下载后,解压

在这里插入图片描述

1 当前用户

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

在这里插入图片描述

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

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

2.所有用户

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

在这里插入图片描述

3 用系统包管理安装

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

在这里插入图片描述

  • 其他发行版类似,软件包名称不是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:编译源代码包和依赖。

在这里插入图片描述

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

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

1.3.1 GOROOT结构

在这里插入图片描述

在这里插入图片描述

  • 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结构

  • $GOROOT安装目录,
  • $GOPATH工作目录。
    • 开发Go语言程序时就是在这里进行
    • 这个目录一般3个文件夹
  • bin:存放 go install生成的可执行文件,
    • 前面把GOPATH/bin加入PATH环境变量后就可以在全局任意位置使用这个文件夹内的执行文件
    • 就与前面配置的GOROOT/binー样,
    • 可直接在终端里使用这些程序
  • pkg:存放go编译生成的文件
  • src:存放我们开发的Go项目的源代码,不同工程项目的代码以包名区分

在这里插入图片描述

  • Go的包名或项目名称习惯以 domain/project为格式命名,
  • 这与Go语言的get命令Go语言的包管理机制有莫大关系。
    • 然这并不是强制规定
  • 但为方便,建议也用这种结构建立自己的本地项目目录

  • GOPATH可以有很多个,如果有两个Go语言开发工作区,可以使用冒号分隔两个变量路径,
  • 第一个 SGOPATH会被作为默认的 go get存放目录

1.3.3 命令行参数

1.程序编译

  • 已介绍go build编译指定的代码包以及它们的依赖包
  • go build不后跟任何代码包,那命令将试图编译当前目录的代码包。
  • 编译代码包hello,进入 hello目录并执行

cd hello & go build

  • 以上述这种方式编译时
  • 如果代码包 hello是example项目(example项目路径是一个工作区)中的一个代码包,这个hello包只有库源码文件和测试源码文件,那么编译之后不生成任何文件
  • 这就涉及Go语言的源代码文件分类

  • Go中,源代码文件分3种
  • 命令源代码文件、
  • 库源代码文件
  • 测试源代码文件。
  • 功能各不相同,写法也各有特点
  • 命令源代码文件作为可执行程序的入口:
  • 库源代码文件
    • 放置各种程序实体(全局常量、全局变量、接口、结构体函数等);
  • 测试源代码文件对前两种源代码文件中的程序实体的功能和性能进行测试
    • 或者展现前两者中程序的使用方法。

package main
import "fmt"
func main(){
  fmt.Println("而愤然过热")
}
  • 上面编译一个库包是不能生成任何文件的,
  • 对于命令源代码文件,还可指定单个文件编译

在这里插入图片描述

  • 上面就是第一个Go程序(先不管这个程序的结构),
  • 此时目录中已有了一个可执行文件01_hell,
  • go install把这个可执行移动到GOPATH/bin目录中
  • 使这个01_hello 成为全局命令,
  • 要删除这个命令只需进入 SGOPATH/bin中删除它

  • 单文件程序还有一个更简单的运行方式:
  • go run hello. go
  • go run不会保存可执行文件,而是直接执行输出结果

下载咋安装

  • 地址下载吧

https://studygolang.com/dl

在这里插入图片描述

  • 然后安装啥的就好了

  • 安装完这样子

在这里插入图片描述

  • 打开一个命令行,爽一下

C:\Users\ZTZ>go version
go version go1.14.4 windows/amd64

C:\Users\ZTZ>go env
set GO111MODULE=
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\ZTZ\AppData\Local\go-build
set GOENV=C:\Users\ZTZ\AppData\Roaming\go\env
set GOEXE=.exe
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=C:\Users\ZTZ\go
set GOPRIVATE=
set GOPROXY=https://proxy.golang.org,direct
set GOROOT=D:\software\go
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLDIR=D:\software\go\pkg\tool\windows_amd64
set GCCGO=gccgo
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -fmessage-length=0 -fdebug-prefix-map=C:\Users\ZTZ\AppData\Local\Temp\go-build033761674=/tmp/go-build -gno-record-gcc-switches

在这里插入图片描述

在这里插入图片描述

  • 小李子
package main
import "fmt"
func main(){
  fmt.Println("而愤然过热")
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fgh431

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值