Loading [MathJax]/jax/output/CommonHTML/jax.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Golang学习笔记,从入门到精通,持续记录

Golang学习笔记,从入门到精通,持续记录

作者头像
房东的狗丶
发布于 2023-02-17 07:20:25
发布于 2023-02-17 07:20:25
1.3K00
代码可运行
举报
文章被收录于专栏:友人a的笔记丶友人a的笔记丶
运行总次数:0
代码可运行

Golang官网:https://go.dev/、Golang下载:https://go.dev/、Golang学习文档:https://go.dev/doc/

Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。

安装Golang

相关文档:https://go.dev/doc/install,下载对应操作系统的安装包后,按说明安装即可;

环境变量

环境变量主要是能操作系统能在任意目录访问go的可执行文件,Window下将go的安装目录添加到PATH环境变量即可(C:\Program Files\Go\bin);

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GOOS            #编译系统
GOARCH          #编译arch
GO111MODULE     #gomod开关
GOPROXY         #go代理 https://goproxy.io  https://goproxy.cn
GOSSAFUNC       #生成SSA.html文件,展示代码优化的每一步 GOSSAFUNC=func_name go build
GOPATH          #用来指定项目开发目录,所有项目文件都在这个路径下面
GOROOT          #GO的安装路径

依赖管理

1.软件包

软件包仓库:https://pkg.go.dev/,Go1.13之后GOPROXY默认值为https://proxy.golang.org,在国内是无法访问的;修改镜像地址:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
go env -w GOPROXY=https://goproxy.cn,direct

Go语言从v1.5开始开始引入vendor模式,查找项目的某个依赖包,首先会在项目根目录下的vender文件夹中查找,如果没有找到就会去$GOAPTH/src目录下查找。

从 Go1.11 开始, Go 官方加入 Go Module 支持, Go1.12 成为默认支持; 从此告别源码必须放在 Gopath 中 以及 Gopath 对初学者造成的困扰.

要启用go module支持首先要设置环境变量GO111MODULE(如其名字所暗示,GO111MODULE 是 Go 1.11 引入的新版模块管理方式。),通过它可以开启或关闭模块支持,它有三个可选值:off、on、auto,默认值是auto。

  • GO111MODULE=off禁用模块支持,编译时会从GOPATH和vendor文件夹中查找包。
  • GO111MODULE=on启用模块支持,编译时会忽略GOPATH和vendor文件夹,只根据 go.mod下载依赖。
  • GO111MODULE=auto,当项目在$GOPATH/src外且项目根目录有go.mod文件时,开启模块支持。

简单来说,设置GO111MODULE=on之后就可以使用go module了,以后就没有必要在GOPATH中创建项目了,并且还能够很好的管理项目依赖的第三方包信息。

相关

使用 go module 管理依赖后会在项目根目录下生成两个文件go.mod和go.sum。 

2.初始化

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
go mod init [module 名称]  #初始化
go mod tidy               #检测和清理依赖

3.安装依赖

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
go get -v path #安装指定包
go get -u  #更新依赖
go get -u github.com/go-ego/gse  #更新指定包依赖
go get -u github/com/go-ego/gse@v0.60.0-rc4.2  #指定版本

4.替换安装源

在国内访问http://golang.org/x的各个包都需要翻墙,你可以在go.mod中使用replace替换成github上对应的库。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 使用命令行:
go mod edit -replace github.com/go-ego/gse=/path/to/local/gse
go mod edit -replace github.com/go-ego/gse=github.com/vcaesar/gse

#直接修改模块文件:
replace github.com/go-ego/gse => github.com/vcaesar/gse

5.常用命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
go mod init  # 初始化 go.mod
go mod tidy  # 更新依赖文件
go mod download  # 下载依赖文件

go mod vendor  # 将依赖转移至本地的 vendor 文件
go mod edit  # 手动修改依赖文件
go mod graph  # 打印依赖图
go mod verify  # 校验依赖

6.GOPATH

go 命令依赖一个重要的环境变量:$GOPATH,Go 从1.1版本到1.7必须设置这个变量,而且不能和Go的安装目录一样,这个目录用来存放Go源码,Go的可运行文件,以及相应的编译之后的包文件。所以这个目录下面有三个子目录:src、bin、pkg

从go 1.8开始,GOPATH 环境变量现在有一个默认值,如果它没有被设置。 它在Unix上默认为$HOME/go,在Windows上默认为%USERPROFILE%/go。

  • src 存放源代码(比如:.go .c .h .s等)
  • pkg 编译后生成的文件(比如:.a)
  • bin 编译后生成的可执行文件(为了方便,可以把此目录加入到 {GOPATH//://bin:}/bin添加所有的bin目录)

7. go.mod

go.mod文件记录了项目所有的依赖信息,其结构大致如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
module github.com/Q1mi/studygo/blogger

go 1.12

require (
	github.com/DeanThompson/ginpprof v0.0.0-20190408063150-3be636683586
	github.com/gin-gonic/gin v1.4.0
	github.com/go-sql-driver/mysql v1.4.1
	github.com/jmoiron/sqlx v1.2.0
	github.com/satori/go.uuid v1.2.0
	google.golang.org/appengine v1.6.1 // indirect
)
  • module用来定义包名
  • require用来定义依赖包及版本
  • indirect表示间接引用

相关文档:https://zhuanlan.zhihu.com/p/359843333

IDE工具

Jetbrains全家桶:https://www.jetbrains.com/zh-cn/go/

代码目录结构 

GOPATH下的src目录就是接下来开发程序的主要目录,所有的源码都是放在这个目录下面,那么一般我们的做法就是一个目录一个项目,例如: $GOPATH/src/mymath 表示mymath这个应用包或者可执行应用,这个根据package是main还是其他来决定,main的话就是可执行应用,其他的话就是应用包。

所以当新建应用或者一个代码包时都是在src目录下新建一个文件夹,文件夹名称一般是代码包名称,当然也允许多级目录,例如在src下面新建了目录$GOPATH/src/github.com/astaxie/beedb 那么这个包路径就是"github.com/astaxie/beedb",包名称是最后一个目录beedb

注意

一般建议package的名称和目录名保持一致

1.编译应用包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 编译后生成编译的应用包文件到pkg
cd 应用包源代码目录
go install 
# 或者
go install  应用包源代码目录

命令行

1. 命令大全

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
go build      // 编译包和依赖包
go clean      // 移除对象和缓存文件
go doc        // 显示包的文档
go env        // 打印go的环境变量信息
go bug        // 报告bug
go fix        // 更新包使用新的api
go fmt        // 格式规范化代码
go generate   // 通过处理资源生成go文件
go get        // 下载并安装包及其依赖
go install    // 编译和安装包及其依赖
go list       // 列出所有包
go run        // 编译和运行go程序
go test       // 测试
go tool       // 运行给定的go工具
go version    // 显示go当前版本
go vet        // 发现代码中可能的错误

2. go get

get 命令用来解决go模块及其依赖项目的下载、创建和安装问题。实际该命令线执行从在线仓库(BitBucket、GitHub、Google Code、国内的gitee等)下载模块(包),再执行Go Install命令。get 命令是依赖git。

get 会先下载相关依赖项目模块,下载时每个包或包的部分模块,下载的版本默认遵从以下顺序:最新release版 > 最新pre-release版 > 其他可用的较高版本

  • -d 只下载,而不执行创建、安装
  • -t 同时下载命令行指定包的测试代码(测试包)
  • -u 在线下载更新指定的模块(包)及依赖包(默认不更新已安装模块),并创建、安装
  • -v 打印出所下载的包名
  • -insecure 允许命令在非安全的scheme(如HTTP)下执行get命令
  • -fix 在下载代码包后先执行修正动作,而后再进行编译和安装,根据当前GO版本对所下载的模块(包)代码做语法修正
  • -f 忽略掉对已下载代码包的导入路径的检查
  • -x 打印输出,get 执行过程中的具体命令

学习文档

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
黎曼猜想很大可能将在中国被证实!Riech定理成为解谜钥匙!
阿蒂亚爵士提出的证明论也因为采用了精细结构常数α作为立论基础,被世人打上了怀疑的标签。
镁客网
2018/10/18
7000
82岁的北大教授证明了黎曼猜想?
上个月,89 岁的菲尔兹奖与阿贝尔奖双料得主、英国皇家学会院士迈克尔·阿蒂亚爵士(Michael Atiyah)刚刚宣布自己证明了黎曼猜想。
AI科技大本营
2018/10/22
9620
82岁的北大教授证明了黎曼猜想?
北大教授证明黎曼猜想?但在前一天取消了
2018年10月11日14:30-16:30,在中国科学院数学院南楼N913室将会有一场报告,主讲人为北京大学李忠教授,将会报告黎曼猜想的证明。摘要显示,报告中的所有步骤均有严格详细的解释与证明。
量子位
2018/10/26
5530
陶哲轩力推36岁菲尔兹奖得主新论文,指向黎曼猜想重大突破!
「千禧年七大数学难题」之一——黎曼猜想(Riemann hypothesis,RH),刚刚取得显著突破,数学家们距离摘取「猜想界的皇冠」又近了一步!
新智元
2024/06/17
1580
陶哲轩力推36岁菲尔兹奖得主新论文,指向黎曼猜想重大突破!
问题来了,谁能证明阿蒂亚关于黎曼猜想的证明是对的?
万众期待下,89岁的阿蒂亚爵士只花了不到十分钟的时间,用一张PPT就完成了他的证明,这场过于简洁的解说让演讲现场的提问环节陷入了迷之尴尬,尔后整个数学界都沉默了。
镁客网
2019/11/12
8730
问题来了,谁能证明阿蒂亚关于黎曼猜想的证明是对的?
突发!登台证明黎曼猜想三个月后,89岁数学大师阿蒂亚爵士逝世
据《纽约时报》报道,英国著名数学大师阿蒂亚爵士(Sir Michael Francis Atiyah),已于本周五(1月11日)去世。享年89岁。
量子位
2019/04/24
4980
突发!登台证明黎曼猜想三个月后,89岁数学大师阿蒂亚爵士逝世
89岁挑战黎曼猜想的数学家阿蒂亚爵士,去世了……
迈克尔·阿蒂亚爵士,前普林斯顿高等研究院教授及成员,于 2019 年 1 月 11 日上午逝世,享年八十九岁。作为世界上最受尊敬的数学家之一,他在拓扑 K-理论、量子场论等方面的工作启发了世界各地的学者。
机器之心
2019/04/30
5300
89岁挑战黎曼猜想的数学家阿蒂亚爵士,去世了……
89岁英国数学家阿蒂亚逝世,三月前称已证明了黎曼猜想
当地时间1月11日,89岁的数学家迈克尔⋅阿蒂亚爵士(Sir Michael Francis Atiyah)去世,英国皇家学会发布讣告。
大数据文摘
2019/01/23
7230
89岁英国数学家阿蒂亚逝世,三月前称已证明了黎曼猜想
黎曼猜想为何如此重要?
159年前,德国数学家黎曼在题为《论小于给定数值的素数个数》的论文中提出的“黎曼猜想”,一直以来被视作“纯数学领域最重要的问题之一”。尽管无数一流数学家向证明黎曼猜想发起冲击,却无一人能成功——不过就在昨天(9月24号),著名数学家、菲尔兹奖和阿贝尔奖双料得主阿蒂亚爵士或将成为这样一个划时代的人物。
昱良
2019/07/04
1.3K0
止步89岁!宣布证明黎曼猜想后,数学大师阿蒂亚爵士突然逝世
不久前,他还曾在2018年的海德堡桂冠论坛(HLF)上做了讲座 ,称已经找到了黎曼假设的证明。这件事曾引起很大反响,当时在国内也一度掀起了黎曼猜想普及热潮。
镁客网
2019/01/24
7220
止步89岁!宣布证明黎曼猜想后,数学大师阿蒂亚爵士突然逝世
北大数学“黄金一代”今何在?
鱼羊 博雯 发自 凹非寺 量子位 | 公众号 QbitAI 一张老照片,现在又被北大官方带火了。 △图源:北大新闻网 照片中人,左起分别是刘若川、恽之玮、袁新意、宋诗畅、肖梁和许晨阳。 不错,正是大名鼎鼎的北大数学黄金一代。 2004年,这群正要奔向世界各地探索数学进阶之路的年轻人,在燕园留下了这样一张意气风发的合影。 那时,他们可能不会想到,正是他们这群人,包揽了2018年、2019年、2020年的科学突破奖新视野数学奖。 拉马努金奖、斯隆研究奖、美国国家数学学会百年纪念奖……一系列国际数学界重量级奖项
量子位
2022/04/06
6530
北大数学“黄金一代”今何在?
15年磨一剑!张益唐111页「零点猜想」论文终于来了
昨天,著名华裔数学家张益唐教授在攻克数学界著名难题之一——郎道-西格尔零点猜想问题的道路上再进一步!
新智元
2023/01/07
6130
15年磨一剑!张益唐111页「零点猜想」论文终于来了
15年磨一剑:张益唐证明黎曼猜想相关问题?11月论文见
这两天,张益唐「攻克」朗道-西格尔零点猜想(Landau-Siegel Zeros Conjecture)的传闻铺天盖地。
新智元
2023/01/06
8590
15年磨一剑:张益唐证明黎曼猜想相关问题?11月论文见
见证历史!数学家张益唐北大讲座:本质上已证明“零点猜想”,111 页论文已公开
有数论学者表示,张益唐有关朗道 - 西格尔零点猜想的论文结果意义重大,使得以前的很多结果从假设性结果变成了确定性结果。
深度学习与Python
2022/11/28
4680
见证历史!数学家张益唐北大讲座:本质上已证明“零点猜想”,111 页论文已公开
一人最高能拿2500万!新基石研究员名单公布,刘若川段路明陆朝阳上榜,川大哈工大南大均有入选
杨净 Pine 发自 凹非寺 量子位 | 公众号 QbitAI 刚刚,首届新基石研究员名单公布! 这个项目由科学家主导,腾讯出资,10年内投入100亿,主要聚焦在数学与物质科学和生物与医学科学两个基础创新领域。 最终,共有来自全国22所高校及机构的58位中青年科学家获得,他们将在未来5年内每年获得最多500万元的资助。 其中包括北大数学“黄金一代”刘若川教授、清华大学的段路明教授,以及中科大的陆朝阳教授等知名科学家。 聚焦数学和物理领域,我们来看看都有哪些大佬~ 数学物理领域 数学领域 刘若川(北京大学)
量子位
2023/02/28
1.1K0
一人最高能拿2500万!新基石研究员名单公布,刘若川段路明陆朝阳上榜,川大哈工大南大均有入选
素数之魂——黎曼和他的伟大猜想
作者:卢昌海 博客:http://www.changhai.org 摘自:南方周末 导读 与费尔马猜想时隔三个半世纪以上才被解决,哥德巴赫猜想历经两个半世纪以上屹立不倒相比,黎曼猜想只有一个半世纪的纪录还差得很远,但它在数学上的重要性要远远超过这两个大众知名度更高的猜想。黎曼猜想是当今数学界最重要、最期待解决的数学难题。 黎曼(1826-1866)是历史上最具想象力的数学家之一 1 2000年5月24日,美国克雷数学研究所在法国巴黎召开了一次数学会议。在会议上,与会者们列出了七个数学难题,并作出了一个颇具轰
大数据文摘
2018/05/22
1K0
中国人工智能的起步,与这位数学家密切相关
工作中的吴文俊(1919年5月12日-2017年5月7日)。图源:中国科学院数学与系统科学研究院
大数据文摘
2023/09/06
2690
中国人工智能的起步,与这位数学家密切相关
网传张益唐宣称解决黎曼猜想相关朗道-西格尔零点猜想,论文11月将公布
从昨晚开始,一则消息开始在微博、知乎以及朋友圈流传:张益唐宣布证明了与黎曼猜想相关的朗道西格尔零点问题。
机器之心
2022/12/15
4030
网传张益唐宣称解决黎曼猜想相关朗道-西格尔零点猜想,论文11月将公布
张益唐被曝已证明黎曼猜想相关问题,震动数学界
网传数学家张益唐,已经攻克了朗道-西格尔零点猜想(Landau-Siegel Zeros Conjecture)。
量子位
2022/12/08
3120
张益唐被曝已证明黎曼猜想相关问题,震动数学界
黎曼猜想显著突破!陶哲轩强推MIT、牛津新论文,37岁菲尔兹奖得主参与
黎曼猜想是数学中一个非常重要的未解决问题,与素数分布的精确性质有关(素数是那些只能被 1 和自身整除的数字,它们在数论中扮演着基础性的角色)。
机器之心
2024/06/17
2130
黎曼猜想显著突破!陶哲轩强推MIT、牛津新论文,37岁菲尔兹奖得主参与
推荐阅读
黎曼猜想很大可能将在中国被证实!Riech定理成为解谜钥匙!
7000
82岁的北大教授证明了黎曼猜想?
9620
北大教授证明黎曼猜想?但在前一天取消了
5530
陶哲轩力推36岁菲尔兹奖得主新论文,指向黎曼猜想重大突破!
1580
问题来了,谁能证明阿蒂亚关于黎曼猜想的证明是对的?
8730
突发!登台证明黎曼猜想三个月后,89岁数学大师阿蒂亚爵士逝世
4980
89岁挑战黎曼猜想的数学家阿蒂亚爵士,去世了……
5300
89岁英国数学家阿蒂亚逝世,三月前称已证明了黎曼猜想
7230
黎曼猜想为何如此重要?
1.3K0
止步89岁!宣布证明黎曼猜想后,数学大师阿蒂亚爵士突然逝世
7220
北大数学“黄金一代”今何在?
6530
15年磨一剑!张益唐111页「零点猜想」论文终于来了
6130
15年磨一剑:张益唐证明黎曼猜想相关问题?11月论文见
8590
见证历史!数学家张益唐北大讲座:本质上已证明“零点猜想”,111 页论文已公开
4680
一人最高能拿2500万!新基石研究员名单公布,刘若川段路明陆朝阳上榜,川大哈工大南大均有入选
1.1K0
素数之魂——黎曼和他的伟大猜想
1K0
中国人工智能的起步,与这位数学家密切相关
2690
网传张益唐宣称解决黎曼猜想相关朗道-西格尔零点猜想,论文11月将公布
4030
张益唐被曝已证明黎曼猜想相关问题,震动数学界
3120
黎曼猜想显著突破!陶哲轩强推MIT、牛津新论文,37岁菲尔兹奖得主参与
2130
相关推荐
黎曼猜想很大可能将在中国被证实!Riech定理成为解谜钥匙!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验