- 博客(19)
- 资源 (6)
- 收藏
- 关注
原创 linux中shell输入输出重定向(>,>>,&>,>&,1>&2,2&>1)
linux中0,1,2分别代表什么在linux系统中0,1,2是一个文件描述符| 名称 | 代码 | 操作符 | java中表示 | linux下文件描述符(Debian为例) ||–|--|| 标准输入(stdio) | 0 | <,<< | System.in | /dev/stdin -> /proc/self/fd/0 -> /dev/pts/0 || 标准输出(stdout) | 1 | >,>>,1>,1>> | Sys
2021-03-22 16:11:31
331
1
原创 go语言使用var声名变量
变量是为存储特定类型的值而提供给内存位置的名称。在go中声明变量有多种语法。所以变量的本质就是一小块内存,用于存储数据,在程序运行过程中数值可以改变使用var声名一个变量时,如果不赋初始值,系统会自动给其赋初始值:int 为 0,float 为 0.0,bool 为 false,string 为空字符串,指针为 nil 等。所有的内存在 Go 中都是经过初始化的。注意:变量必须先定义才能使用go语言是静态语言,要求变量的类型和赋值的类型必须一致。变量名不能冲突。(同一个作用于域内不能冲突)简短
2020-10-24 16:41:32
387
原创 consul概述及其内部原理
consul概述:consul是google开源的一个使用go语言开发的服务发现、配置管理中心服务,consul属于微服务架构的基础设置中用于发现和配置服务的一个工具。consul的核心功能:服务发现:consul的某些客户端可以提供一个服务,其他客户端可以使用consul去发现这个服务的提供者。健康检查:consul客户端可以提供一些健康检查,这些健康检查可以关联到一个指定的服务,比如心跳包的检测。键值存储:应用实例可以使用consul提供的分层简直存储,比如动态配置,特征标记,协作等。通过HTT
2020-10-10 21:16:42
1456
1
原创 服务的发现机制
服务的发现机制:客户端发现和服务端发现客户端发现模式:客户端负责决定可用服务的网络地址,并且在集群中请求相应的负载均衡,客户端访问服务登记表,也就是一个可用服务的数据库,然后客户端使用一种负载均衡算法,选择一个可用的服务实例然后发送请求。注:服务实例的网络地址在服务器启动的时候被登记到服务注册表中,当实例终止服务时,从注册表中移除,服务实例的注册一般是通过心跳机制阶段性的进行刷新。服务端发现模式:在该模式下,客户端通过一个负载均衡器向服务端发送请求,负载均衡器查询查询服务注册表,并把请求路由到一台可用
2020-10-10 20:43:01
336
原创 微服务简介
微服务的定义:将一个单体应用拆分为一组微小的服务组件,每个微小的服务组件运行在自己的进程上,组件之间通过RESTful API这样的轻量级机制进行交互,这些服务以业务能力为核心,用自动话部署机制独立部署,另外这些服务可以用不同语言进行研发,用不同技术来存储数据对于单独部署独立运行的微服务实例而言,在业务需要时,需要与其他服务进行通信,这种通信是进程之间的通信方式(简称:IPC)IPC有两种实现方式:同步过程调用和异步消息调用。同步过程调用的具体实现中,有一种实现方式为RPC(远程过程调用)的通信方式
2020-10-10 20:25:36
167
原创 Mapreduce排序
一、排序概述1、排序是 MR 中非常重要的操作之一,MapTask 和 ReduceTask 都会对数据按照 key 进行排序。该操作是默认行为。任何 MR 程序中数据均会被排序,而不看逻辑是否需要。2、MapTask 中,它会将处理的结果暂时放到环形缓冲区中,当环形缓冲区使用率到一定的阈值,再对缓冲区数据进行一次快排,并将这些有序数据溢写到磁盘上,而当数据处理完毕后,它会对磁盘上所有文件进行归并排序。3、ReduceTask 中,它从每个 MapTask 上远程拷贝相应的数据文件,如果文件大小超过一
2020-09-27 16:28:59
901
原创 channel通道的一些细节
在go语言中需要使用内置函数make来创建一个通道make的第一个参数是关键字chan,之后跟着允许通道交换的数据类型。如果创建的是一个有缓存的通道,之后还要再第二个参数指定缓存区的大小。//无缓存的整形通道unbuffered:=make(chan int)//有缓存的字符串通道buffered:=make(chan string,10)向通道发送值或指针需要用到 <- 操作符//创建一个有缓存的字符串通道buffered:=make(chan string,10)//通过通道
2020-09-26 14:50:26
26619
原创 创建goroutine并管理其寿命
创建goroutine并管理其寿命步骤:1.分配逻辑处理器给调度器使用//分配一个逻辑处理器给调度器使用runtime.GOMAXPROCS(1)2.使用WaitGroup来作为一个计数信号量,可以用来记录并维护gororutine,如果WaitGroup的值大于0,wait方法就会阻塞//wg用来等待程序完成var wg sync.WaitGroup//计数加二,表示要等待两个goroutinewg.add(2)go func(){ ... //在函数退出时调用Done来通知ma
2020-09-25 21:36:48
154
原创 值接收者和指针接收者
go语言中有两种类型的接收者:值类型的接收者和引用类型的接收者如果使用值接收者声明方法,调用时会使用这个值的一个副本来执行。当调用使用指针接受者声明的方法时,这个方法会共享调用方法时接收者所指向的值。内置类型(值传递):数值类型,字符串类型,布尔类型引用类型(应用传递):切片,映射,通道,接口,函数类型规范里定义的方法集的规则:ValuesMethods ReceiversT(t T)*T(t T)and(t *T)从接收者类型的角度来看方法集:Me
2020-09-25 21:36:36
358
1
原创 并发和并行
并发和并行:并发:是指同时管理很多事情,这些事情可能只做了一般就去做别的事情去了。并行:是让不同的代码片段同时在不同的物理处理器上执行。并行的关键是在同时做很多事情。
2020-09-25 20:27:59
89
原创 使用os.openfile读文件时的权限
os.openfile()方法权限:O_RDONLY int = syscall.O_RDONLY // 只读模式打开文件O_WRONLY int = syscall.O_WRONLY // 只写模式打开文件O_RDWR int = syscall.O_RDWR // 读写模式打开文件O_APPEND int = syscall.O_APPEND // 写操作时将数据附加到文件尾部O_CREATE int = syscall.O_CREAT // 如果不存在将创建一个新文件O_EXCL
2020-09-21 19:47:53
1089
原创 defer
defer的词义:”延迟“,”推迟“在go语言中使用关键字defer来延迟一个函数或方法的执行1.defer 函数或方法:一个函数或方法的执行被推迟了2.defer的用法: A:对象.close(),临时文件的删除... B:go语言中关于异常的处理,使用panic()和recover() panich函数用于引发恐慌,导致程序中断执行 recover函数用于恢复程序的执行,recover语法上要求必须在defer中执行3.当一个函数有多个延迟调用时,它们被添加到一个堆栈中,并在L
2020-09-13 16:25:36
113
原创 递归函数
递归函数(recursion):一个函数自己调用自己,就叫做递归,这样的函数就叫做递归函数递归函数要有一个出口,逐渐的向出口靠近func main(){sum:=getSum04(100)fmt.Println(sum)res:=fbnq(12)fmt.Println(res)}//递归求和func getSum04(n int) int {if n == 1 { return 1}return getSum04(n-1)+n}//求斐波那契数列func fbnq(n
2020-09-13 15:53:55
161
原创 break和continue
switch中的break和continue/* switch中的break和fallthrough语句 break:可以在switch中使用,也可以在for循环中使用 强制结束case语句,从而结束switch分支 fallthrough:用于穿透switch 当switch中某个case匹配成功之后,就执行该case语句 如果遇到fallthrough,那么后面紧邻的case无需匹配,执行穿透执行 fallthrough应该位于某个case的最后一行*/n := 1sw
2020-09-12 19:44:30
169
原创 switch
/* 1.switch语句: 语法结构: switch 变量名{ case 数值1:分支1 case 数值2:分支2 case 数值3:分支3 ... default:最后一个分支 } 注意: 1.switch可以作用在其他类型上,case后的数值类型必须和switch作用的变量类型一致 2.case是无无序的 3.case后面的数值是唯一的 4.default语句是可选的操作,相当于 2.省略switch后的变量,相
2020-09-12 18:20:50
98
原创 golang中的map
map:映射,是一种专门用于存储键值对的集合,属于引用类型存储特点: A:存储的是无序的键值对 B:键不能重复,并且和value是一一对应的 map中的key不能重复,如果重复,那么新的value会覆盖原来的value,程序不会报错创建map: var map1 map[key类型]value类型 为nil,不能直接使用 var map2=make(map[key类型]value类型) var map3=map[key类型]value类型{key:value,key:value,k
2020-09-10 09:56:04
236
原创 深拷贝与浅拷贝
深拷贝:拷贝的是数据本身值类型的数据,默认都是深拷贝:array,int,float,string,bool,struct浅拷贝:拷贝的是数据地址导致多个变量指向同一块内存引用类型的数据,默认都是浅拷贝:slice,map
2020-09-09 19:25:38
53
原创 切片slice
切片slice1.每一个切片引用了一个底层数组2.切片本省不存储任何数据,都是这个底层数组存储,如果修改切片也就是修改这个底层数组3.当向切片中添加数据时,如果没有超过容量,直接添加,如果超过容量,自动扩容(成倍增长)4.切片一旦扩容就是从新指向一个新的底层数组1.创建切片//创建一个空切片var slice01 []int//创建一个长度和容量为3的切片slice01 := []int{10,20,30}//使用make创建切片func make(t Type,size …Integ
2020-09-09 18:32:47
117
原创 go语言数据类型
数据类型基本数据类型:int,float,string,bool引用数据类型:array,slice,map,function,pointer,channel值类型:int,float,string,bool,array存储数据本身,将数据传递给其他的变量,传递的是数据的备份。引用类型:slice,map存储的是数据的内存地址。...
2020-09-09 15:21:00
54
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人