-
(四十)golang--单元测试
所属栏目:[大数据] 日期:2020-12-16 热度:101
传统的测试: package mainimport ( " fmt " )func addUpper(n int ) int { res : = 0 for i := 0 ; i = n; i++ { res += i } return res}func main() { res : = addUpper( 10 ) if res != 55 { fmt.Printf( 错误,真实值:%v,期望值:%v " ,res, ) } else[详细]
-
golang--redis基本介绍
所属栏目:[大数据] 日期:2020-12-16 热度:138
redis(remote-dictionary-system)即远程字典服务器,是NoSQL数据库: 适合做缓存以及持久化; 免费开源,高性能的分布式内存数据库; redis的安装和使用: 下载Redis-x64-3.2.100.zip,然后解压即可; 双击redis-server.exe即可启动redis服务端; redis五大[详细]
-
(四十一)golang--goroutine
所属栏目:[大数据] 日期:2020-12-16 热度:55
首先得了解: 进程 线程 并发 并行 Go协程和Go主线程: 主线程:相当于进程;直接作用于cpu上,是重量级的,是物理态的; 协程:相当于轻量级的线程;由主协程开启,是逻辑态的; Go协程的特点: 有独立的栈空间 共享程序堆单元 调度由用户控制 协程是轻量级[详细]
-
(四十二)golang--协程之间通信的方式
所属栏目:[大数据] 日期:2020-12-16 热度:61
假设我们现在有这么一个需求: 计算1-200之间各个数的阶乘,并将每个结果保存在mao中,最终显示出来,要求使用goroutime。 分析: (1)使用goroutime完成,效率高,但是会出现并发/并行安全问题; (2)不同协程之间如何通信; 对于(1):不同协程之间可能[详细]
-
(三十七)golang--如何获取命令行参数
所属栏目:[大数据] 日期:2020-12-16 热度:152
1.第一种方式 ? 缺点:参数的接收受输入的顺序所影响。 2.第二种方式(使用flag包) ?[详细]
-
(三十四)golang--接口
所属栏目:[大数据] 日期:2020-12-16 热度:112
golang的多态特性主要体现在接口上; 主要优势:高内聚低耦合; package main import ( " fmt " )type usb interface { start() stop()}type phone struct {}func (p phone) start() { fmt.Println( 手机开始工作 )}func (p phone) stop() { fmt.Println( 手[详细]
-
golang--连接redis数据库并进行增删查改
所属栏目:[大数据] 日期:2020-12-16 热度:126
(1)安装第三方开源的redis库; (2)在使用redis之前,需要安装第三方库,在GOPATH路径下执行安装指令--$GOPATH$:go get github.com/garyburd/redigo/redis; 注意:在安装redis之前,需要确保已经安装和配置了Git,因为是从github上面下载安装redis库的[详细]
-
(十七)golang--闭包(简单明了)
所属栏目:[大数据] 日期:2020-12-16 热度:165
所谓闭包:就是一个函数和其相关的引用环境组合的一个整体; 首先,有如下一个小例子,最终的输出结果是什么呢?是输出11,12吗? ?对上述代码说明: (1)addUpper是一个函数,返回的是func(int) int; (2)func(int) int引用函数外的n,因此这个匿名函数和[详细]
-
(二十一)golang--字符串中的函数
所属栏目:[大数据] 日期:2020-12-16 热度:90
golang中ascii对应的字符占一个字节,而汉字占三个字节。 (1)统计字符串的长度len (2)字符串遍历,同时处理有中文的问题r:=[]rune(str) (3)字符串转整数:n,err:= strconv.Atoi("12") (4)整数转字符串:str = strconv.ltoa(12345) (5)字符串转[]by[详细]
-
(二十四)golang--错误处理
所属栏目:[大数据] 日期:2020-12-16 热度:149
在默认情况下,遇到错误时,程序会崩溃; 在发生错误时,我们可以捕获错误,使程序可以继续运行,并抛出错误提示; ? 错误处理: (1)Go语言追求简洁优雅,所以不支持传统的try catch finally; (2)引入的处理方式为:defer,panic,recover (3)这几个[详细]
-
(二十三)golang--内置函数
所属栏目:[大数据] 日期:2020-12-16 热度:93
1.用于求长度,占多少个字节 2.内置函数new:分配内存,主要用来分配值类型,比如int、float等,其第一个实参为类型,而非值,其返回值为指向该类型的新分配的零值的指针; ? ? 3.make:用来分配内存,主要用来分配引用类型,比如map、切片、管道等;[详细]
-
(二十六)golang--切片
所属栏目:[大数据] 日期:2020-12-16 热度:82
基本介绍: 切片是数组的引用; 切片的使用和数组类似; 切片的长度是可以变化的; 切片的定义 var a []int,注意和数组定义的区别; 切片不仅可以使用len函数,还有cap函数来计算切片的容量; 切片在内存中的形式: ? ? ? ? ? ?从该图我们可以得出: slice[详细]
-
(十六)golang--匿名函数
所属栏目:[大数据] 日期:2020-12-16 热度:109
Go支持匿名函数,如果我们某个函数只是使用一次,可以考虑使用匿名函数,匿名函数也可以实现多次调用; 匿名函数的使用方式: (1)在定义匿名函数的时候就直接调用,这种方式匿名函数只调用一次; (2)将匿名函数赋予给一个变量,再通过变量来调用匿名函数[详细]
-
(十九)golang--函数参数的传递方式
所属栏目:[大数据] 日期:2020-12-16 热度:106
两种传递方式: 值传递:值类型参数默认 引用传递:引用类型参数默认 一般来说,地址传递效率高,因为数据量[详细]
-
两张图弄懂函数的递归(以golang为例)
所属栏目:[大数据] 日期:2020-12-16 热度:158
?函数递归时要遵守的原则: 执行一个函数时,就要创建一个新的受保护的独立空间(新函数栈) 函数的局部变量是独立的,不会相互影响; 递归必须向退出递归的条件逼近,否则就会无限递归; 当一个函数执行完毕,或者遇到return,就会返回,遵守誰调用,就将结[详细]
-
(二十二)golang--时间和日期相关函数
所属栏目:[大数据] 日期:2020-12-16 热度:123
? ? ?时间的常量,可以获得指定时间单位 ? ? ?Unix和UnixNano ? 小例子:统计函数运行的时间;[详细]
-
(二十五)golang--数组
所属栏目:[大数据] 日期:2020-12-16 热度:155
数组:存放多个同一类型的数据。 在Go中,数组也是一种值类型 数组的基本定义: 数组的内存布局: 数组的地址可以用取出,且它的地址就是第一个元素的地址 数组不用被被初始化而默认是有值的; 数组中的某元素地址是前一个元素的地址加上本元素所占的字节数[详细]
-
(十五)golang--init函数
所属栏目:[大数据] 日期:2020-12-16 热度:190
每一个源文件都会包含一个init函数,这个函数会在执行main()执行之前被调用,相当于python中的__init__ ? ?注意细节: (1)如果一个文件同时包含全局变量定义,init函数和main函数,则执行的流程是变量定义--init--main; (2)init函数的主要作用,就是完[详细]
-
(三十三)golang--面向对象之继承
所属栏目:[大数据] 日期:2020-12-16 热度:93
继承可以解决代码复用; 实现:只需要在结构体中嵌套一个匿名结构体; 结构体可以使用匿名结构体中所有字段核方法:无论是大写还是小写; 可以简化访问匿名结构体中的属性和方法; 当该结构体和匿名结构体有相同属性或方法时,遵从就近原则使用,也可以通过[详细]
-
(二十八)golang--二维数组
所属栏目:[大数据] 日期:2020-12-16 热度:66
初始化: var array [2][3]int = [2][3]int{{0,0},{0,0}} var array [2][3]int = [...][3]int{{0,0}} var array = [2][3]int{{0,0}} array := [2][3]int{{0,0}.{0,0}} 二维数组在内存空间的表示: ? ? ?二维数组的遍历:[详细]
-
(二十)golang--变量的作用域
所属栏目:[大数据] 日期:2020-12-16 热度:167
(1)函数内部申明/定义的变量叫局部变量,作用域仅限于函数的内部; (2)函数外部申明/定义的变量叫全局变量,作用域在整个包都有效,如果其首字母为大写,则作用域是整个程序; (3)如果变量是在一个代码块内,比如在if/for中,那么这个变量的作用域就该[详细]
-
(三十)golang--面向对象
所属栏目:[大数据] 日期:2020-12-16 热度:201
首先我们要明确: golang并不是纯粹的面向对象的编程语言; golang没有类class,使用struct代替; golang面向对象编程非常简洁,去掉了传统的继承、重载、构造函数和析构函数、隐藏的this指针等; golang仍然有面向对象编程的继承、封装和多态的特性,只是实[详细]
-
(十八)golang--defer关键字
所属栏目:[大数据] 日期:2020-12-16 热度:72
在函数中,程序员经常需要创建资源(比如,数据库连接,文件句柄,锁等),为了在函数执行完毕后,及时释放资源,go设计者提供defer(延时机制) ?用defer申明的语句不会立即执行,而是被存入到defer栈中,在程序执行完毕后,再从栈中取出(先进后出): ? ?[详细]
-
(三十一)golang--面向对象之工厂模式
所属栏目:[大数据] 日期:2020-12-16 热度:52
golang面向对象中是不存在构造函数的,可以使用工厂模式。 ? ? ?使用工厂模式,让即使不是大写的变量可以被外部包使用。 ? ?[详细]
-
(三十二)golang--面向对象之封装
所属栏目:[大数据] 日期:2020-12-16 热度:85
封装:把抽象出来的字段和对字段的操作封装在一起,数据被保护在内部,程序的其它包只有通过被授权的操作(方法),才能对字段进行操作。 封装的好处: (1)隐藏实际的细节; (2)可以对数据进行验证,保证安全合理; 如何体现封装: (1)对结构体的属性[详细]
