- 博客(11)
- 收藏
- 关注
原创 使用Go实现监听模式
近来打算学习一下各种设计模式,有助于自己在开发过程中将项目结构设计得优雅一点监听模式的实现(本质上与发布订阅模式差不多)都是需要在观察者和被观察者之间建立桥梁。被观察者需要记录观察者的对象,当有发生变化时,广播到每个观察者对象中去,观察者需要暴露一个接口来执行发生变化时的操作。package mainimport "fmt"// obvsersable 被观察者接口应该实现的基本方法type obvsersable interface { addObsver(obsver)
2021-01-25 17:49:53 1999
原创 python 手动实现with 语句的两个方式
python中with语句用的最多的一般是在打开文件的时候,使用with可以在退出这个语句块的时候自动释放文件句柄。想想这种自动释放确实很方面,在其他一些需要占用系统资源或者IO的地方很值得一用。总结下两个实现with语句的方法。1. 使用__enter__ 和 __exit__class OpenFile(): def __init__(self,filename): self.filename = filename self.fp = No.
2021-01-06 15:45:01 768 1
原创 python inspect
python3 内置了一个模块 inspect,通过该模块可以查询到一个类对象中的成员(包含函数、字段等)举个栗子:import inspectclass Test(): def promo1(self): pass def promo2(self): pass def promo3(self): passif __name__ == "__main__": promos = [func for nam
2021-01-06 11:43:49 1134
原创 protoc-gen-go: program not found or is not executable
使用protoc 生成go文件时遇到了以下错误:protoc-gen-go: program not found or is not executable这是因为当前路径没有在环境变量中,便进行如下设置export PATH = "$PATH:$GOPATH/bin" ($GOPATH: /opt/gopath)source /etc/profile这样即可...
2021-01-04 16:44:07 9339
原创 Go基于函数闭包实现函数可选项模式
一般在调用函数时,遇到可选参数是非常普遍的。在Go中可以利用函数闭包实现可选参数功能,最近在学习一些go写的包,看过源码,也都是采用这种方式,值得学习package mainimport ( "fmt")type Person struct { name string age int gender string}// 定义options参数的类型,这里定义为一个函数type option func(*Person)// 通过withage函数去定义结构.
2020-12-30 17:28:11 112
原创 Kvm 平台自定义网络的方式
Kvm是一个用于创建虚拟机的虚拟化平台,可以用它来创建不同操作系统的虚拟机Kvm在安装完后,创建时默认时使用的网络名称是 default,其会在宿主机上创建一张虚拟网卡--virbr0,所有虚拟机对外通信的流量都需要经过这张网卡,默认网段是192.168.122.0/24但在实际环境中,可能需要根据实际情况创建不同网段的虚拟机,这时候就需要自己去定义并创建网络了。创建的步骤也很简单:1. 根据默认的default网络的xml配置文件,复制出一份新的xml文件virbr1.xml,在新文.
2020-12-30 17:01:44 533
原创 python 字符串拼接 + 与 join 的区别
python在进行字符串的拼接时,一般有两种方法,一种是使用+直接相加,另一种是使用joina = "tests"b = "teststs"# 使用 + c = a + b# 使用joinc = "".join(a,b)这两种,其实在性能上具有比较大的差别,当然如果拼接的字符串的个数不多,就感受不到这种差别。先谈谈这两种拼接方式各自的原理吧。1. 使用 +首先需要知道的是,在python中字符串属于不可变对象。当用操作符+连接字符串的时候,由于字符串是不可变对..
2020-12-02 15:05:07 1113 3
原创 初步接触grpc
这两天了解了一下grpc,grpc其实是为了实现不同语言、不同设备之间的通信,使得跨语言、跨设备的服务调用更加方便。上面便是grpc框架中服务端和客户端通信的流程。其中,最关键的应该是protobuffer 这个中间件,通过protobuf语法,定义服务接口的参数以及规范,通过不同语言对应的protobuf插件,能够很快的生成对应语言的关于该服务的客户端和服务端的抽象类接口代码,后续实现自己业务时,只需要去继承和重写这些接口即可。1)、C++, 每一个.proto 文件可以生成一个 .
2020-12-01 09:58:01 90
原创 python 做除法之前尽量先将变量类型都转化为float浮点类型
由于python是动态语言,变量的类型不用事先声明,解释器会边运行边判断变量的类型。当两个整数(int)进行相除时,不管除不除得尽,得到的结果都是int类型,这在有些情景下就会得不到想要的结果,因此可以将int先转化为float类型,进行相除即可。不过,在有些情况下,用float类型也会报错,比如看下面这段简单的代码i = 1while i!= 1.5: i += 0.1 print(i)这段代码执行的结果是会进行无限循环,原因是,当进行到1.1 与 0.1 相.
2020-11-29 22:21:26 1343 1
原创 Go module 进行包管理
go module是Go1.11版本之后官方推出的版本管理工具,并且从Go1.13版本开始,go module将是Go语言默认的依赖管理工具。使用go module进行包管理,就不用非得在GOPATH下面开发(之前是需要在gopath/src/),可以在任意位置进行Go 开发,提高了灵活性。以下,写写自己对go module的理解。假设写了一个包 package1,这时候在另外的包package2中要调用这个包的函数。那么可以在package1 目录下,使用go mod init package1,
2020-11-27 23:13:12 299
原创 总结git常用命令和在工作中的使用流程
文章目录git常用命令工作中使用git的一般流程git常用命令git statusgit commitgit add filenamegit checkout -b 新分支名称创建新的分支并且切换到该分支git checkout 已经存在的分支名称切换到已经存在的某个分支git merge 分支名称合并某个分支到当前分支git pull从远程进行拉取git push 远程地址的代码(origin) 分支名称本地推到远程指定分支git remote -v查看本地git添加的远
2020-11-26 22:10:02 243 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人