Golang序言

一、Go发展

诞生

一切要从Ken Thompson说起。
1966年,Ken Thompson就职于贝尔实验室,参与了MULTICS项目,独自开发了B语言,并利用一个月
时间用B语言开发了一个精简的操作系统,起名UNICS。后来,同事Dennis Ritchie基于B语言发明了C语
言。他们一起用C重写了Unix系统。
Rob Pike是贝尔实验室Unix组成员,也是《Unix环境编程》和《程序设计实践》作者之一。1992年和
Ken Thompson共同设计了UTF-8编码。2002年加入Google,研究操作系统。
2006年,Ken Thompson加入Google。
2007920日,身处Google的Rob Pike对不断扩充新特性的C++非常不满,与Robert Griesemer(之
前参与JavaScript V8引擎和Java HotSpot虚拟机)、Ken Thompson进行了一次关于设计一门新语言的讨
论。第二天,三人继续进行了对新语言设计的讨论会,并在会后有Robert Griesemer发出了一封邮件,
总结了设计思路:要在C语言基础上,修正一些明显缺陷,删除一些被诟病的特征,增加一些缺失的功
能。
20091110日正式开源,这一天被Go官方确定为Go语言诞生日。
Go语言也拥有了自己的吉祥物(Rob Pike夫人Renee French设计的地鼠)。Go程序员被称为
Gopher。

版本

2012328日,Go 1.0正式发布。
2015819日,Go 1.5这个里程碑版本发布。
Go不在依赖C编译器,Go编译器和运行时都使用Go代码了,实现了自举
GOMAXPROCS的默认值1改为运行环境的CPU核数
2018825日,Go1.11版本发布。
引入Go Module包管理机制
2021218日,Go 1.16版本发布。
Go Module-aware模式成为默认模式,即GO111MODULE默认从auto改为on
go build/run命令不再自动更新go.mod和go.sum文件
2022315日,Go 1.18版本发布
引入了泛型Generic
支持工作区Workspace

设计理念

其它语言的弊端
对多核CPU缺乏支持。很多语言诞生过早,还停留在单核CPU时代,未对多核CPU并行做优化
C语言等原生语言缺乏好的依赖管理(C语言依赖头文件)
Java、C++等语言过于笨重。很小一个需求,也需要很多代码,甚至需要引入很重的框架
C、C++没有提供垃圾回收,这对很多程序员来说并不友好
Go设计者推崇“最小方式”思维,即一件事仅有一种方式,或尽可能少的方式去完成。目的是减少开发人
员选择的痛苦,减少理解别人选择的苦恼。
仅有25个关键字,简洁的语法
内置垃圾回收器,大大降低程序员管理内存的负担
去除隐式类型转换、去除指针算数,提高语言健壮性
首字母大小写决定可见性,通过约定而不是声明告诉开发者,提高阅读效率
故意不支持函数默认参数,必须明确每个参数意义,提高设计的清晰度和代码可读性
没有面向对象的类,也没有子类,没有构造函数和析构函数
偏好 组合
任何类型都可以拥有方法
接口只是方法的集合,其实现是隐式的(无需implements显示声明)
n--、n++都是语句,不是表达式。没有--n、++n
没有三元运算符
内存总是初始化为零值
没有异常
内置字符串、切片、map等类型
内置并发支持,对多核计算机支持友好。goroutine、channel、select就是为并发而生的
官方提供了丰富的工具链,涵盖了编译、编辑、依赖获取、调试、文档、性能分析等诸多方面

环境与开发

官网 https://go.dev/ 或 https://golang.google.cn/
目前稳定版本是1.18.x和1.17.x。
注:对于所有语言,我们不追求最新版本。新版会引进新特性、新功能,这些都可能导致Bug,而且项
目中使用的第三方库未必兼容。因此,使用最新版本有很大风险。如果尝鲜可以试装。

安装

安装文档 https://golang.google.cn/doc/install https://go.dev/doc/install
从 https://go.dev/dl/ 或 https://golang.google.cn/dl/ 下载对应操作系统平台指定的版本即可。

windows安装

官网下载 go1.x.y.windows-amd64.msi ,按照安装向导安装。
>go version
go version go1.18.7 windows/amd64
  1. 添加环境变量
如果是当前用户使用,就是用户环境变量;如果是系统所有用户使用,就是系统变量,需要管理员权限

配置环境变量

观察环境变量PATH、GOPATH,新建GOPROXY。
可以运行命令go env看看Go的环境变量。

Linux安装

# tar xf go1.18.7.linux-amd64.tar.gz -C /usr/local
添加到环境变量PATH,修改$HOME/.profile或/etc/profile
export PATH=$PATH:/usr/local/go/bin
export GOPROXY=https://mirrors.aliyun.com/golang/,direct

环境变量

· GOROOT:go安装目录
· PATH:环境变量PATH添加GOROOT下的bin目录,go可执行文件所在目录
· GOPATH 第三方依赖包安装路径
	- 例如我本机默认GOPATH=~\go
	- 以前放自己开发的代码,目前不要这样放了
	- GOMODCACHE存储第三方依赖包
· GO111MODULE=on
	- go早期版本管理依赖包方式使用GOPATH和vendor文件夹
	-1.11引入Go Module,1.16版本开始GO111MODULE默认为on,会根据go.mod管理和下载依赖

· GOPROXY 1.13开始支持。国外站点经常失败,建议改为国内镜像站地址
	1. 参考 https://go.dev/ref/mod#environment-variables
 	2. GOPROXY 缺省是 https://proxy.golang.org,direct
		- direct 表示从镜像下载失败后,直接从原版本库地址下载
 		- off 表示不允许从任何源下载
	2. https://mirrors.aliyun.com/goproxy/ 、https://mirrors.huaweicloud.com/home

	3. 
		GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
		GOPROXY=https://repo.huaweicloud.com/repository/goproxy/
		一定要配置,不然后面安装包经常下载包很困难

****Windows主要环境变量,如下

>go env
set GO111MODULE=
set GOARCH=amd64
set GOENV=C:\Users\wayne\AppData\Roaming\go\env
set GOMODCACHE=C:\Users\wayne\go\pkg\mod
set GOOS=windows
set GOPATH=C:\Users\wayne\go
set GOPROXY=https://mirrors.aliyun.com/golang/,direct
set GOROOT=C:\Program Files\Go
set GOTOOLDIR=C:\Program Files\Go\pkg\tool\windows_amd64
set GOVERSION=go1.18.7

Windows安装版安装完PATH路径就添加了
>echo %PATH%
C:\Program Files\Go\bin;C:\Users\wayne\go\bin

Linux主要环境变量,如下

# go env
GO111MODULE=""
GOARCH="amd64"
GOENV="/root/.config/go/env"
GOMODCACHE="/root/go/pkg/mod"
GOOS="linux"
GOPATH="/root/go"
GOPROXY="https://mirrors.aliyun.com/golang/,direct"
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GOVERSION="go1.18.7"
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/go/bin

开发工具

 // 好用的工具能提升生产效率,但不要迷信工具,写出好的代码才是王道 --
· Goland 收费工具
· VSCode 微软推出的轻量级、插件化、多语言开发IDE。课堂教学使用
	- Windows、MAC、Debian、RedHat
	- Windows User版是当前用户一人使用;System版当前机器所有用户使用

VSCode插件安装

切记,安装插件之前,一定要配置GO国内源的GOPROXY,否则可能报很多错误。

Go三件套
1、Go插件
在这里插入图片描述
2、gopls

gopls(发音Go please)是官方提供的模块,实现语言服务器协议LSP的Language Server,具有构建、
格式化、自动完成等功能。
LSP是由微软开发的开发标准,它为便捷器提供对语言特性的支持。
当你使用模块和 VSCode 时,在编辑器中点击保存将不再直接运行 go build 命令。现在发生的情况是,
一个请求被发送给 gopls,gopls 运行适当的 Go 命令和相关的 API 来提供编辑器反馈和支持。
参考 https://github.com/golang/tools/blob/master/gopls/README.md
可以手动安装,也可以在VSCode中编辑第一个xxx.go文件触发安装

可以点击Install单独安装,也可以点击Install All连dlv等一起安装。

gopls手动安装

 go install golang.org/x/tools/gopls@latest
 Tools environment: GOPATH=C:\Users\wayne\go
Installing 1 tool at C:\Users\wayne\go\bin in module mode.
 gopls
Installing golang.org/x/tools/gopls@latest (C:\Users\wayne\go\bin\gopls.exe) 
SUCCEEDED
All tools successfully installed. You are ready to Go. :)

//配置
参考 https://github.com/golang/tools/blob/master/gopls/doc/settings.md
打开File/Preference/Settings(Ctrl +,),搜索gopls,如下例配置
{
    "gopls": {
        "ui.completion.usePlaceholders": true
   }
}
  1. div
go-delve是Go语言的调试利器。
编写一个main.go,输入pkgm自动补全
package main
import "fmt"
func main() {
 fmt.Println("Hello magedu.com")
}

// 按F5启动调试,会出现安装dlv的提示。同样,可以手动安装,也可以根据提示安装。

在这里插入图片描述

Tools environment: GOPATH=C:\Users\wayne\go
Installing 1 tool at C:\Users\wayne\go\bin in module mode.
 dlv
Installing github.com/go-delve/delve/cmd/dlv@latest 
(C:\Users\wayne\go\bin\dlv.exe) SUCCEEDED
All tools successfully installed. You are ready to Go. :)

至此,运行Go所需的go、gopls、dlv
命令行中运行
$ go run ./main.go Hello magedu.com

goalng–demo

//main包  该go文件存在的当前目录名 比如目录名是pro 这里不写pro  该目录下的go文件都写main
//比如pro目录下新建了一个pro1 这是pro1下的go文件  都写 package pro1
package main

//import 导入本次要用的包 fmt
import (
	"fmt"
)

//main 函数是程序的唯一入口  一个项目只能有一个main函数
func main(){
	fmt.Println("Hello World")
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值