go语言

Go语言 time包

左心房为你撑大大i 提交于 2020-02-12 00:25:12
Go语言基础之time包 时间和日期是我们编程中经常会用到的,本文主要介绍了Go语言内置的time包的基本用法。 time包 time包提供了时间的显示和测量用的函数。日历的计算采用的是公历。 时间类型 time.Time类型表示时间。我们可以通过time.Now()函数获取当前的时间对象,然后获取时间对象的年月日时分秒等信息。示例代码如下: func timeDemo ( ) { now := time . Now ( ) //获取当前时间 fmt . Printf ( "current time:%v\n" , now ) year := now . Year ( ) //年 month := now . Month ( ) //月 day := now . Day ( ) //日 hour := now . Hour ( ) //小时 minute := now . Minute ( ) //分钟 second := now . Second ( ) //秒 fmt . Printf ( "%d-%02d-%02d %02d:%02d:%02d\n" , year , month , day , hour , minute , second ) } 时间戳 时间戳是自1970年1月1日(08:00:00GMT)至当前时间的总毫秒数。它也被称为Unix时间戳

Go语言实现冒泡和快速排序

房东的猫 提交于 2020-02-11 04:08:38
冒泡和快速排序都属于交换类排序,所谓交换排序是指借助数据元素之间互相交换进行排序的方法。 冒泡排序法 冒泡排序法是一种最简单的交换类排序方法,它是通过相邻数据的交换逐步将线性表变成有序。 冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。 即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。 在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的), 第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。 由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。 参考: http://baike.baidu.com/view/254413.htm 图来自: http://www.cppblog.com/guogangj/archive/2009/11/13/100876.html Go 语言实现 fund BubbleSort(values[]int){ flag:=true

Go语言 包

老子叫甜甜 提交于 2020-02-11 01:22:55
Go语言基础之包 在工程化的Go语言开发项目中,Go语言的源码复用是建立在包(package)基础之上的。本文介绍了Go语言中如何定义包、如何导出包的内容及如何导入其他包。 Go语言的包(package) 包介绍 包(package)是多个Go源码的集合,是一种高级的代码复用方案,Go语言为我们提供了很多内置包,如fmt、os、io等。 定义包 我们还可以根据自己的需要创建自己的包。一个包可以简单理解为一个存放.go文件的文件夹。 该文件夹下面的所有go文件都要在代码的第一行添加如下代码,声明该文件归属的包。 package 包名 注意事项: 一个文件夹下面直接包含的文件只能归属一个package,同样一个package的文件不能在多个文件夹下。 包名可以不和文件夹的名字一样,包名不能包含 - 符号。 包名为main的包为应用程序的入口包,这种包编译后会得到一个可执行文件,而编译不包含main包的源代码则不会得到可执行文件。 可见性 如果想在一个包中引用另外一个包里的标识符(如变量、常量、类型、函数等)时,该标识符必须是对外可见的(public)。在Go语言中只需要将标识符的首字母大写就可以让标识符对外可见了。 举个例子, 我们定义一个包名为pkg2的包,代码如下: package pkg2 import "fmt" // 包变量可见性 var a = 100 // 首字母小写

Go语言简介

假装没事ソ 提交于 2020-02-10 23:36:46
终于等到你!Go语言——让你用写Python代码的开发效率编写C语言代码。 为什么互联网世界需要Go语言 世界上已经有太多太多的编程语言了,为什么又出来一个Go语言? 硬件限制:摩尔定律已然失效 摩尔定律:当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。 换言之,每一美元所能买到的电脑性能,将每隔18-24个月翻一倍以上。 从上面的图表可以看出,近十年单线程性能和处理器频率保持稳定。我们不能像之前一样把添加更多晶体管当成是解决方案,因为在较小规模上一些量子特性开始出现(如隧道效应),并且因为在同样小的空间里放置更多晶体管的代价非常昂贵,每1美元可以添加的晶体管数量开始下降。 制造商开始从其他方面提高处理器的性能: 向处理器添加越来越多的内核,如四核和八核CPU。 发明了超线程技术。 为处理器添加了更多缓存以提高性能。 但上述解决方案也有其自身的局限性。因为成本原因我们不能无限制的为计算机添加内核,也无法无限制的添加缓存来提高性能,因为缓存越大,取值的性能越低。 我们没有办法在硬件上一直取得突破,我们需要提高软件的性能或者说我们需要高性能的软件。 Go语言为并发而生 如上所述,硬件制造商正在为处理器添加越来越多的内核以提高性能。所有数据中心都在这些处理器上运行,更重要的是,今天的应用程序使用多个微服务来维护数据库连接

Go语言基础之数组

大憨熊 提交于 2020-02-10 23:23:20
本文主要介绍Go语言中数组(array)及它的基本使用。 Array(数组) 数组是同一种数据类型元素的集合。 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化。 基本语法: // 定义一个长度为3元素类型为int的数组a var a [3]int 数组定义: var 数组变量名 [元素数量]T 比如: var a [5]int , 数组的长度必须是常量,并且长度是数组类型的一部分。一旦定义,长度不能变。 [5]int 和 [10]int 是不同的类型。 var a [3]int var b [4]int a = b //不可以这样做,因为此时a和b是不同的类型 数组可以通过下标进行访问,下标是从 0 开始,最后一个元素下标是: len-1 ,访问越界(下标在合法范围之外),则触发访问越界,会panic。 数组的初始化 数组的初始化也有很多方式。 方法一 初始化数组时可以使用初始化列表来设置数组元素的值。 func main() { var testArray [3]int //数组会初始化为int类型的零值 var numArray = [3]int{1, 2} //使用指定的初始值完成初始化 var cityArray = [3]string{"北京", "上海", "深圳"} //使用指定的初始值完成初始化 fmt.Println

Go语言基础之包

泄露秘密 提交于 2020-02-10 22:44:18
在工程化的Go语言开发项目中,Go语言的源码复用是建立在包(package)基础之上的。本文介绍了Go语言中如何定义包、如何导出包的内容及如何导入其他包。 包(package)介绍 包(package) 是多个Go源码的集合,是一种高级的代码复用方案,Go语言为我们提供了很多内置包,如 fmt 、 os 、 io 等。 定义包 我们还可以根据自己的需要创建自己的包。一个包可以简单理解为一个存放 .go 文件的文件夹。 该文件夹下面的所有go文件都要在代码的第一行添加如下代码,声明该文件归属的包。 package 包名 注意事项: 一个文件夹下面直接包含的文件只能归属一个 package ,同样一个 package 的文件不能在多个文件夹下。 包名可以不和文件夹的名字一样,包名不能包含 - 符号。 包名为 main 的包为应用程序的入口包,这种包编译后会得到一个可执行文件,而编译不包含 main 包的源代码则不会得到可执行文件。 可见性 如果想在一个包中引用另外一个包里的标识符(如变量、常量、类型、函数等)时,该标识符必须是对外可见的(public)。在Go语言中只需要将标识符的首字母大写就可以让标识符对外可见了。 举个例子, 我们定义一个包名为 pkg2 的包,代码如下: package pkg2 import "fmt" // 包变量可见性 var a = 100 //

17Go语言基础之单元测试

折月煮酒 提交于 2020-02-10 20:52:14
本文是 李文周的博客 go语言学习之路的目录提要版,方便复习查看使用,原文参见文章连接: https://www.liwenzhou.com/posts/Go/go_menu/ 不写测试的开发不是好程序员。我个人非常崇尚TDD(Test Driven Development)的,然而可惜的是国内的程序员都不太关注测试这一部分。 这篇文章主要介绍下在Go语言中如何做单元测试和基准测试。 单元测试总结 go test工具 Go语言中的测试依赖 go test 命令。编写测试代码和编写普通的Go代码过程是类似的,并不需要学习新的语法、规则或工具。 go test命令是一个按照一定约定和组织的测试代码的驱动程序。在包目录内,所有以 _test.go 为后缀名的源代码文件都是 go test 测试的一部分,不会被 go build 编译到最终的可执行文件中。 在 *_test.go 文件中有三种类型的函数,单元测试函数、基准测试函数和示例函数。 类型 格式 作用 测试函数 函数名前缀为Test 测试程序的一些逻辑行为是否正确 基准函数 函数名前缀为Benchmark 测试函数的性能 示例函数 函数名前缀为Example 为文档提供示例文档 go test 命令会遍历所有的 *_test.go 文件中符合上述命名规则的函数,然后生成一个临时的main包用于调用相应的测试函数,然后构建并运行

Go语言的主要特性和发展影响

不问归期 提交于 2020-02-09 19:33:26
1、Go发展的环境和影响因素 1.1 影响 Go 语言发展的早期编程语言 正如 “21 世纪的 C 语言” 这句话所说,Go 语言并不是凭空而造的,而是和 C++、Java 和 C# 一样属于 C 系。不仅如此,设计者们还汲取了其它编程语言的精粹部分融入到 Go 语言当中。 在声明和包的设计方面,Go 语言受到 Pascal、Modula 和 Oberon 系语言的影响;在并发原理的设计上,Go 语言从同样受到 Tony Hoare 的 CSP(通信序列进程 Communicating Squential Processes)理论影响的 Limbo 和 Newsqueak 的实践中借鉴了一些经验,并使用了和 Erlang 类似的机制。 这是一门完全开源的编程语言,因为它使用 BSD 授权许可,所以任何人都可以进行商业软件的开发而不需要支付任何费用。 尽管为了能够让目前主流的开发者们能够对 Go 语言中的类 C 语言的语法感到非常亲切而易于转型,但是它在极大程度上简化了这些语法,使得它们比 C/C++ 的语法更加简洁和干净。同时,Go 语言也拥有一些动态语言的特性,这使得使用 Python 和 Ruby 的开发者们在使用 Go 语言的时候感觉非常容易上手。 1.2 为什么要创造一门编程语言 C/C++ 的发展速度无法跟上计算机发展的脚步

Go语言标准库之http/template

耗尽温柔 提交于 2020-02-09 17:39:55
html/template 包实现了数据驱动的模板,用于生成可防止代码注入的安全的HTML内容。它提供了和 text/template 包相同的接口,Go语言中输出HTML的场景都应使用 html/template 这个包。 模板与渲染 在一些前后端不分离的Web架构中,我们通常需要在后端将一些数据渲染到HTML文档中,从而实现动态的网页(网页的布局和样式大致一样,但展示的内容并不一样)效果。 我们这里说的模板可以理解为事先定义好的HTML文档文件,模板渲染的作用机制可以简单理解为文本替换操作–使用相应的数据去替换HTML文档中事先准备好的标记。 很多编程语言的Web框架中都使用各种模板引擎,比如Python语言中Flask框架中使用的jinja2模板引擎。 Go语言的模板引擎 Go语言内置了文本模板引擎 text/template 和用于HTML文档的 html/template 。它们的作用机制可以简单归纳如下: 模板文件通常定义为 .tmpl 和 .tpl 为后缀(也可以使用其他的后缀),必须使用 UTF8 编码。 模板文件中使用 {{ 和 }} 包裹和标识需要传入的数据。 传给模板这样的数据就可以通过点号( . )来访问,如果数据是复杂类型的数据,可以通过{ { .FieldName }}来访问它的字段。 除 {{ 和 }} 包裹的内容外,其他内容均不做修改原样输出。

Go语言操作Redis

空扰寡人 提交于 2020-02-09 16:46:53
在项目开发中redis的使用也比较频繁,本文介绍了Go语言如何操作Redis。 Redis介绍 Redis是一个开源的内存数据库,Redis提供了多种不同类型的数据结构,很多业务场景下的问题都可以很自然地映射到这些数据结构上。除此之外,通过复制、持久化和客户端分片等特性,我们可以很方便地将Redis扩展成一个能够包含数百GB数据、每秒处理上百万次请求的系统。 Redis支持的数据结构 Redis支持诸如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、带范围查询的排序集合(sorted sets)、位图(bitmaps)、hyperloglogs、带半径查询和流的地理空间索引等数据结构(geospatial indexes)。 Redis应用场景 缓存系统,减轻主数据库(MySQL)的压力。 计数场景,比如微博、抖音中的关注数和粉丝数。 热门排行榜,需要排序的场景特别适合使用ZSET。 利用LIST可以实现队列的功能。 Redis与Memcached比较 Memcached中的值只支持简单的字符串,Reids支持更丰富的5中数据结构类型。 Redis的性能比Memcached好很多 Redis支持RDB持久化和AOF持久化。 Redis支持master/slave模式。 Go操作Redis 安装 Go语言中使用第三方库 https:/