golang特有程序结构入门教程


Posted in Python onJune 02, 2021

Go语言的由来

​ Go语言亦叫Golong语言,是由谷歌Goggle公司推出。Go语言的主要开发者有:肯.汤姆逊(Ken Thompson)、罗布.派克(Rob Pike)和罗伯特.格里泽默(Robert Griesemer)。这三个都是大神,稍介绍一下他们的贡献:
​ 肯.汤姆逊(Ken Thompson):图灵奖得主,Uinx发明人,B语言作者(C语言前身),还做飞行员,后来被谷歌挖走。
​ 罗布.派克(Rob Pike):Unix团队和Plan 9操作系统计划的成员,与Ken老爷子共事多年,并共创出广泛使用的UTF-8 字元编码。
​ 罗伯特.格里泽默(Robert Griesemer):曾协助制作Java的HotSpot编译器,和Chrome浏览器的JavaScript引擎V8。

Go语言的特点

Go语言保证了既能到达静态编译语言的安全和性能,又达到了动态语言开发速度和易维护性,有人形容Go语言:Go = C + Python , 说明Go语言既有C静态语言程序的运行速度,又能达到Python动态语言的快速开发。

提示:本系列文章适合对Go有持续冲动的读者

阅前须知:在程序结构这章,更多会关注golang中特有结构,与其他语言如C、python中相似结构(命名、声明、赋值、作用域等)不再赘述。

一、golang类型别名

在go1.9中引入类型别名的特性,其中两个内置类型byteruneuint8int32的别名。类型别名即字面意思换个名字,两者是相同类型。

类型声明语句一般出现在包一级,因此如果新创建的类型名字的首字符大写,则在包外部也可以使用。

解决问题:大规模重构期间启用渐进式代码修复,特别是将类型从一个包移动到另一个包,以便引用旧名称的代码与引用新名称的代码互操作。类型别名对于允许使用单个顶级导出 API 将大型包拆分为多个实现包,以及对现有包的扩展版本进行试验也可能很有用。

定义方法:

type T1 = T2

提案地址:18130-type-alias

二、变量初始化

1.如果初始化表达式被省略,那么将用零值初始化该变量,即如下:

int -->0

bool -->false

string-->""

接口类型:slice、指针、map、chan、函数 -->nil

数组或结构体: 每个元素或字段初始为对应类型零值

零值初始化机制可以确保每个声明的变量总是有一个良好定义的值,这个特性可以减少许多额外工作

2.函数返回值初始化变量,比如err的获取。在赋值语句左边的变量和右边最终的求到的值必须有相同的数据类型。

if err:=http.Get(addr),err{
	//
}

3.初始化表达式可以是字面量或任意的表达式。在包级别声明的变量会在main入口函数执行前完成初始化,局部变量将在声明语句被执行到的时候完成初始化

4.简短式(:=)局部变量声明只可用于局部变量声明。并且简短变量声明语句对这些已经声明过的变量具有赋值行为。如下第二个声明只声明了out一个变量。

in, err := os.Open(infile)
// ...
out, err := os.Create(outfile)

5.函数内生命的变量必须使用,不过可以使用下划线_ 丢弃。

三、变量生命周期

对于在包一级声明的变量来说,它们的生命周期和整个程序的运行周期是一致的。

而相比之下,局部变量的生命周期则是动态的:每次从创建一个新变量的声明语句开始,直到该变量不再被引用为止,然后变量的存储空间可能被回收。

函数的参数变量和返回值变量都是局部变量。它们在函数每次被调用的时候创建。

四、golang package(包)与golang Module(模块)

1. package:对一组函数或功能的封装,即避免重复造轮子。

在1.12之后版本(引入了module)安装后,会在用户目录下创建一个 go 文件夹作为默认的 GOPATH,go get 会将远程的软件包下载到GOPTH目录下 pkg/mod 里。GOROOT为go文件和安装目录。$GOROOT/src为内置标准库。

golang特有程序结构入门教程

GOPATH目录已下载的package

golang特有程序结构入门教程

$GOROOT/src目录内置package

golang特有程序结构入门教程

在?]有使用 golang module 前导入他人分享的 package 需要先使用 go get 下载到本地,然后才可以通过import引用此 package

2. module:对package进行管理,即管理应用的依赖和package版本。

引入module后项目目录不再只限制在GOPATH/src,你可以在任意文件夹下创建你的项目,再使用go mod init初始化即可。如下初始化一个module为github.com/csgo 在当前文件夹下产生go.mod文件。

[root@VM-0-5-centos water_man]# ls
go.mod  water_man.go
[root@VM-0-5-centos water_man]# cat go.mod 
module github.com/csgo   //文件名称

go 1.15   //go版本

replace github.com/csgo/rush_b => ../rush_b  //重定向package到../rush_b文件夹下

require github.com/csgo/rush_b v0.0.0-00010101000000-000000000000  //非标准库依赖包和版本

上层目录下自定义的package:

golang特有程序结构入门教程

go module会根据 go.mod 的依赖引用关系导入三方包。如果发现本地cache没有,就会从远程拉取。即如果github.com/csgo/rush_b未重定向到本地就会使用 go get 。当 go module下载了远程包后,同时会自动更新 go.mod 。

需要注意自定义的package函数、变量如果需要被外部引用则首字母应大写,即包级别的名字都是以大写字母开头。

到此这篇关于golang特有程序结构入门教程的文章就介绍到这了,更多相关golang程序结构内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
使用python解析xml成对应的html示例分享
Apr 02 Python
Python的Django框架中的Context使用
Jul 15 Python
Python的Flask框架中集成CKeditor富文本编辑器的教程
Jun 13 Python
python去除空格和换行符的实现方法(推荐)
Jan 04 Python
Python tkinter模块弹出窗口及传值回到主窗口操作详解
Jul 28 Python
Python实现的选择排序算法原理与用法实例分析
Nov 22 Python
python 获取键盘输入,同时有超时的功能示例
Nov 13 Python
对Python3之方法的覆盖与super函数详解
Jun 26 Python
flask应用部署到服务器的方法
Jul 12 Python
用Python进行websocket接口测试
Oct 16 Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
Nov 24 Python
Python中BeautifulSoup通过查找Id获取元素信息
Dec 07 Python
Python中的np.argmin()和np.argmax()函数用法
Jun 02 #Python
python之np.argmax()及对axis=0或者1的理解
Python import模块的缓存问题解决方案
Jun 02 #Python
Python3 类型标注支持操作
Jun 02 #Python
python 实现两个变量值进行交换的n种操作
聊聊Python中关于a=[[]]*3的反思
python内置进制转换函数的操作
Jun 02 #Python
You might like
星际原理概述
2020/03/04 星际争霸
mysql 的 like 问题,超强毕杀记!!!
2007/01/18 PHP
php启动时候提示PHP startup的解决方法
2013/05/07 PHP
使用PHP函数scandir排除特定目录
2014/06/12 PHP
浅析PHP中的闭包和匿名函数
2017/12/25 PHP
PHP中非常有用却鲜有人知的函数集锦
2019/08/17 PHP
Jquery 获取表单text,areatext,radio,checkbox,select值的代码
2009/11/12 Javascript
关于JS控制代码暂停的实现方法分享
2012/10/11 Javascript
阻止事件(取消浏览器对事件的默认行为并阻止其传播)
2013/11/03 Javascript
用Jquery.load载入页面后样式没了页面混乱的解决方法
2014/10/20 Javascript
DataTables+BootStrap组合使用Ajax来获取数据并且动态加载dom的方法(排序,过滤,分页等)
2016/11/09 Javascript
javascript 闭包详解及简单实例应用
2016/12/31 Javascript
jQuery实现在新增加的元素上添加事件方法案例分析
2017/02/09 Javascript
jQuery使用bind函数实现绑定多个事件的方法
2017/10/11 jQuery
详解vue2.0+axios+mock+axios-mock+adapter实现登陆
2018/07/19 Javascript
JavaScript捕捉事件和阻止冒泡事件实例分析
2018/08/03 Javascript
详解javascript函数写法大全
2019/03/25 Javascript
Vue基础配置讲解
2019/11/29 Javascript
vue搜索页开发实例代码详解(热门搜索,历史搜索,淘宝接口演示)
2020/04/11 Javascript
详解用js代码触发dom事件的实现方案
2020/06/10 Javascript
vue2.* element tabs tab-pane 动态加载组件操作
2020/07/19 Javascript
Vuex实现简单购物车
2021/01/10 Vue.js
Python基于dom操作xml数据的方法示例
2018/05/12 Python
python主线程捕获子线程的方法
2018/06/17 Python
Django框架组成结构、基本概念与文件功能分析
2019/07/30 Python
python openvc 裁剪、剪切图片 提取图片的行和列
2019/09/19 Python
Pytorch实现的手写数字mnist识别功能完整示例
2019/12/13 Python
Python面向对象编程基础实例分析
2020/01/17 Python
python requests包的request()函数中的参数-params和data的区别介绍
2020/05/05 Python
Python如何使用ElementTree解析xml
2020/10/12 Python
巴基斯坦电子产品购物网站:Home Shopping
2017/09/14 全球购物
奥兰多迪士尼门票折扣:Undercover Tourist
2018/07/09 全球购物
2014大学生党员评议个人总结
2014/09/22 职场文书
2015年财务试用期工作总结
2014/12/24 职场文书
2015年上半年信访工作总结
2015/03/30 职场文书
上课迟到检讨书范文
2015/05/06 职场文书