自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

名狱的博客

建设世界,贡献世界

  • 博客(60)
  • 收藏
  • 关注

原创 Golang连接操作MongoDB基础处理

下面查询使用到的bson.M和bson.D差不多,只要区别在于M内部元素是无序的map,D是有序的切片。

2024-04-08 21:54:19 413

原创 protoc生成gRPC代码和HTTP网关代码

为什么需要网关层,因为grpc调用是用于程序内部的远程调用协议,但是我们测试接口的时候通常使用http协议,http协议是应用层的协议,和grpc不相通,因此我们希望有一层可以帮我们转换,把我们调用的http协议数据转下格式,然后发给grpc服务接口,这就是这个网关做的事情。

2022-10-10 01:31:20 1779 1

原创 Golang函数返回值少用对象

NewMySQL()内部返回nil,但实际上这份方法定义了返回一个结构体指针,类型是结构体,值是指针,nil只是填充了值,类型依旧是*main.MySQL类型。然后把这个返回值赋给Dao接口,同样的,这个Dao接口类型没有变,只是值为nil。所以在判断是否为nil时,由于类型不为nil,导致判断结果不为nil。2、然后要知道一个东西,interface包含类型和值,只有类型和值都为空时,这个interface才等于nil。只有值为nil,但是类型不为nil时,这个interface是不等于nil的。

2022-10-09 18:48:06 646

原创 本地搭建gitlab服务器(Ubuntu)

1、下载ce包2、安装3、配置Gitlab4、配置Ubuntu网络5、配置Windows网络6、启动Gitlab7、登陆。

2022-08-12 00:29:21 4314

原创 golang方法参数的封装

假如有一个对象,下面有个方法需要对很多参数做一些处理,这些参数可以由开发者自定传参,可传可不传,可传一也可传多,一般这种信息有时是不重要的,但是实际中不能缺少。如果是对于使用者而言,参数多也很正常,但是对于第三方库的开发者来说,代码太丑了,那么就需要封装一下。假如不封装你会这样一个一个的传,Parameter参数越多,方法的形参越多。稍微封装亿点点之后,自由度就高了,想修改哪个参数就传哪个。......

2022-08-01 21:53:30 355

原创 Golang sort包排序(详细全集)

文章目录一、整型倒序二、浮点型三、字符串型四、真的使用的是快速排序算法吗?五、稳定性六、结构体类型排序

2021-12-05 17:44:19 13221 6

原创 Golang单例模式

单例模式有两种方式,这里介绍框架中经常使用且简单的一种不多废话,直接看图,右上角是文件目录结构。dangli.go 是实现单例模式的重点,其他文件只是测试调用的。其中核心思想是,有个全局的变量保存对象地址,有个函数用于返回对象,函数里面判断全局对象是否被实例化,如果已经实例化,则直接返回,如果没有实例化,则先实例化再返回var Conn *Ceshifunc NewObj() *Ceshi { if Conn == nil { Conn = &Ceshi{} return Co

2021-12-05 01:01:04 561 2

原创 Git工作中常用操作记录

1、查看当前的仓库状态git status2、查看所有分支git branch3、创建分支并关联到远程仓库,然后切换到该分支(注意:该分支必须在远程仓库已经存在)git checkout -b 新分支名 origin/新分支名4、切换分支git checkout 分支名5、删除分支git branch -D 分支名6、在当前分支下拉取远程仓库最新代码git pull7、忽略某些文件的更改(不能影响新建和删除文件操作,只影响修改操作)忽略正在修改的一个文件git c

2021-12-03 15:20:10 296 2

原创 nginx配置支持https访问

在哪个环境下安装nginx,就要在哪里生成证书,比如在阿里云主机上安装nginx就在阿里云主机上生成证书,如果是在docker中安装nginx就在docker中生成证书。如果使用docker安装,记得生成容器时映射一个443端口root@iZbp18qtvejt7jqx8ghcanZ:~# docker run --name nginx -d -p 8080:80 -p 443:443 nginx使用openssl生成,默认已安装。1、使用常用的RSA算法生成秘钥文件openssl genrs

2021-10-25 14:19:12 1228

原创 golang中orm或gorm或json序列化结构体时零值的处理

golang中平常写orm的结构体时,可以通过工具快速生成数据表的映射结构体http://sql2struct.atotoa.com/生成的结构体或者自己写的结构体大概是这样子的type Dianpu1 struct { Id int `orm:"id" json:"id"` //自增主键 UserName string `orm:"user_name" json:"user_name"` //用户名 UserAge int16 `orm:"user_a

2021-10-10 21:11:50 2625 1

原创 Golang net/http客户端的使用

测试连接:有个站点,专门为了测试http、https请求,get请求为http://httpbin.org/get、post请求为http://httpbin.org/post、put请求为http://httpbin.org/put等等。发送一个请求给它,他就根据我们请求内容返回我们的请求内容给我们,这样我们就可知道我们发送的结果是什么了。下面模拟各种方法的请求,各个方法的创建基本都差不多,但是由于Get和Post方法经常使用,所以官方帮我们做了包装,我们只需要一个函数调用就可以了,但是没有包装其他的方

2021-07-21 23:17:46 1316 1

转载 Golang使用验证码

使用的第三方库go get github.com/dchest/captchapackage mainimport ( "fmt" "github.com/dchest/captcha" "io" "log" "net/http" "text/template")var formTemplate = template.Must(template.New("example").Parse(formTemplateSrc))func showFormHandler(w http.

2021-06-20 17:58:24 1445

转载 Golang发送邮件

在设置->账户中开启两个服务,然后生成授权码,复制授权码,后面使用到。package mainimport ( "log" "net/smtp" "github.com/jordan-wright/email")func main() { e := email.NewEmail() //设置发送方的邮箱 e.From = "自己的邮箱@qq.com" // 设置接收方的邮箱 e.To = []string{"发送目标的邮箱@qq.com"} //设置主题 e.Sub

2021-06-20 17:04:40 402

原创 Golang操作Rabbitmq

简介Rabbitmq就是一个消息的中间人,负责接受消息、转发消息和存储消息,并不参与消息的处理和计算。没有固定哪一方是生产者,哪一方是消费者,谁发送消息给Rabbitmq谁就是生产者,谁接收Rabbitmq发送的消息谁就是消费者。Rabbitmq这个词是描述整个软件,而缓存消息的是这个软件内部的队列(或者说缓冲器,先进先出结构),内部可以后很多条队列,由于不参与计算,所以队列的性能只受内存和磁盘的约束。一个生产者可以对应一个或者多个队列,一个队列可以对应一个或者多个消费者,并且传输过程中又很多处理方法

2021-06-19 16:32:39 1819

原创 vscode中使用Git,结合Github

一、git查看和修改所有配置git config [<options>]常用几个命令:查看系统配置 git config --system -l查看用户的全局配置 git config --global -l/--list添加用户的某个全局配置 git config --global --add user.email 2915713554@qq.com删除用户的某个全局配置 git config --global --unset user.email要想使用g

2021-06-12 00:20:19 572 2

原创 Python制作翻译工具(程序员必备中英文翻译工具)

因为我英文不好,对接口、函数、结构体起名字的时候特别为难,因此我使用Python写了一个工具在输入框输入对应的中文,就生成Golang语言对应的接口、函数或接口体的写法,如下演示:看懂代码之后,就可以修改为其它语言对应的写法import tkinterimport requestsimport hashlibimport pyperclipimport time# 获取翻译结果class Baidufanyi: def __init__(self, appid="到百度API获

2021-06-01 18:36:29 2822 1

原创 Golang操作MySQL数据库

文章目录事先准备插入数据查询数据更新操作删除数据事务操作事先准备go下载两个东西:MySQL驱动工具go get github.com/go-sql-driver/mysql 对mysql驱动的封装,方便我们使用API操作go get github.com/jmoiron/sqlx创建数据库和表# 新建名为gomysql的数据库create database gomysql;# 使用这个数据库use gomysql;# 创建一张名为person的表CREATE TABL

2021-05-31 01:35:45 241

原创 Golang操作Redis

安装第三方库go get -u github.com/garyburd/redigo/redis连接操作package mainimport ( "fmt" "github.com/garyburd/redigo/redis")func main() { redisObj, err := redis.Dial("tcp", "127.0.0.1:6379") if err != nil { fmt.Println("连接失败", err) return } defer

2021-05-30 23:29:06 709

原创 Redis进阶学习总结(Docker搭建环境)

文章目录一、主从复制环境搭建(一带N结构)二、哨兵模式环境搭建(一个哨兵)三、缓存穿透、缓存击穿、缓存雪崩1、缓存穿透概念解决方案2、缓存击穿概念解决方案3、缓存雪崩概念解决方案一、主从复制一个主服务器master,多个从服务器slave。主要作用:数据冗余、故障恢复、负载均衡、高可用集群。主机可以写,但从节点不能写只能读,主机中的信息都会被从节点保存,主节点宕机了从节点数据还保留着,且从节点的身份不变,等主节点恢复后从节点还能继续连接查看主从复制的基本信息127.0.0.1:6379>

2021-05-30 18:01:15 197 1

原创 Redis学习总结(Docker搭建环境)

中文版命令学习地址(有些参数没细讲):http://www.redis.cn/commands.html英文版命令学习地址:https://redis.io/commands文章目录一、安装二、启动、关闭1.启动2.查看是否启动成功3.基本使用4、登陆密码5、配置命令6.关闭redis服务三、redis-benchmark工具四、Redis的基本概念1.切换数据库2.查看数据库容量3.删除当前所选数据库的所有键五、5种基本数据类型一)辅助命令1、判断某个键是否存在2、移动键到其他数据库3、设置键的过期时

2021-05-30 17:56:30 1166

原创 Golang使用net/http包写http服务端

文章目录一、处理器 Handler二、处理器函数 HandleFunc三、使用原理四、请求多路复用器使用 net/http 标准库实现 http服务端,通常有两种方式,分别是处理器和处理器函数。一、处理器 Handler下面实现两个页面,每个页面使用一个处理器,处理器处理的必须是一个实现了Handler接口的对象,Handler接口要求对象里面必须有一个ServerHTTP方法,且对方法的参数也有要求,如下:package mainimport ( "net/http")type Say

2021-05-25 16:29:07 754 2

原创 shell编程总结

文章目录一、开始运行1、sh命令运行2、bash命令运行3、./方式运行4、案例一5、echo1、基本用法2、包含转义字符3、颜色二、变量1、普通变量的赋值、使用和取消2、全局变量3、系统变量4、特殊变量(重点)1)$number2)$#3)$* 和 $@4)$?三、字符串操作1、获取字符串长度2、截取字符串3、替换字符串4、提取字符串5、字符串拼接四、运算符1、expr2、let3、bc计算器2、$[表达式子]3、$((表达式子))(常用)五、条件判断1、两个整数之间的比较2、按照文件权限进行判断3、按照

2021-05-21 01:14:51 2542 3

原创 Golang的i/o对象及操作

参考:http://c.biancheng.net/view/5569.html无论是实现 web 应用程序,还是控制台输入输出,又或者是网络操作,都不可避免的会遇到 I/O 操作。Go语言标准库的 bufio 包中,实现了对数据 I/O 接口的缓冲功能。这些功能封装于接口 io.ReadWriter、io.Reader 和 io.Writer 中,并对应创建了 ReadWriter、Reader 或 Writer 对象,在提供缓冲的同时实现了一些文本基本 I/O 操作功能。我们平常使用的字符串并.

2021-05-04 14:24:51 257

原创 Golang实现事件系统

参考:http://c.biancheng.net/view/71.html事件系统基本原理事件系统可以将事件派发者与事件处理者解耦。例如,网络底层可以生成各种事件,在网络连接上后,网络底层只需将事件派发出去,而不需要关心到底哪些代码来响应连接上的逻辑。或者再比如,你注册、关注或者订阅某“大V”的社交消息后,“大V”发生的任何事件都会通知你,但他并不用了解粉丝们是如何为她喝彩或者疯狂的。一个事件系统拥有如下特性:能够实现事件的一方,可以根据事件 ID 或名字注册对应的事件。事件发起者,会根据.

2021-05-02 12:46:47 829

原创 服务发现consul的使用

下载安装wget https://releases.hashicorp.com/consul/1.9.4/consul_1.9.4_linux_amd64.zipunzip consul_1.9.4_linux_amd64.zipmv consul /usr/local/bin常用的几个命令agent该指令是consul的核心,它运行agent来维护成员的重要信息、运行检查、服务宣布、查询处理等等。consul agent-bind=0.0.0.0 指定 consul所在机器的

2021-04-18 20:25:14 274

原创 Windows中vscode安装golang插件问题解决

在Windows中,编译器默认安装C:\Program Files\Go配置用户环境变量添加用户变量GOPATH变量设置用户工作目录。如果写代码时要用到第三方库,然后使用go get xxx时,xxx就下载到这个目录。变量 GOPATH 值 C:\Program Files\Go\binGOROOT变量设置Go编译器的安装位置变量 GOROOT 值 C:\Program Files\Go配置go的环境变量在命令行下使用go env命令可以看到所有关于go的环境

2021-03-27 13:45:12 4857

原创 Golang高并发安全(一)

一、场景很多时候,我们希望加载配置时只加载一次,因为如连接数据库时较慢且不必加载多次;我们希望关闭通道时只关闭一次,因为关闭多次会报错;我们希望访问一个公共资源时,该资源是完整可靠的。二、介绍Golang语言的sync包中的sync.Once可以帮助我们只执行一个场景,其内部只有一个func (o *Once) Do(f func()) { }方法。该方法不能传递参数,所以有这需求时,可以使用闭包解决。三、问题的引出下面模仿我们平常不正确的写法,现在有一个场景:有很多个协程要使用到配置资源,一般先

2021-03-26 21:53:47 490

原创 Golang等待协程运行结束

sync.WaitGroup可以使得我们很优雅的等待协程的退出,还可以辅助控制协程的数量写一个普通的例子。下面的例子中,say函数中的字符串不会输出,因为main函数也是一个协程,say函数相当于一个子协程,父协程运行完退出后,子协程也会退出,并不会等待子协程中的任务完成,而要想执行完子协程中的任务,最简单的方法是让父协程等待一段时间,子协程可以在这段时间内执行完任务。去掉下面的注释后,say函数就可以执行完内部的任务。package mainimport ( "fmt" "time")f

2021-03-26 19:04:20 1015

原创 RPC是什么?Go语言使用它

RPC是远程过程调用协议的缩写,简单说就是他可以在本地网络下,调用远方的一个进程中的方法。比如我在广州自己的电脑上运行自己写的一个程序,该程序使用了RPC协议,然后就可以调用远在北京的一个程序,该程序当然也使用了RPC协议。这样的话就可以屏蔽了语言的差异,比如本地可以用C或Python语言写,远端可以使用JAVA或GO语言写。他们之间使用的是网络通信,为了保证数据传输的稳定性和安全性,使用TCP进行连接,所以RPC算是位于传输层和应用层之间。我们进行网络编程一般使用Socket编程,相比TCP编程,So

2021-03-10 00:19:09 210

原创 golang单元测试

为什么要进行单元测试?(该段装载于知乎)提高代码质量。代码测试都是为了帮助开发人员发现问题从而解决问题,提高代码质量。尽早发现问题。问题越早发现,解决的难度和成本就越低。保证重构正确性。随着功能的增加,重构(修改老代码)几乎是无法避免的。很多时候我们不敢重构的原因,就是担心其它模块因为依赖它而不工作。有了单元测试,只要在改完代码后运行一下单测就知道改动对整个系统的影响了,从而可以让我们放心的重构代码。简化调试过程。单元测试让我们可以轻松地知道是哪一部分代码出了问题。简化集成过程。由于各个单元已经

2021-03-07 01:04:43 125

原创 GO语言的package怎么使用

以Python作为对比,在Python中如果要使用自己写的库,该库可以在当前或当前子目录下,假设在当前目录下,你需要在当前目录下新建一个__init__.py的空文件,这样在当前目录下的工作文件中可以使用import xxx导入自己写的库。Go的package关键字定义该文件所属包,然后使用import关键字调用包。以实例讲解,首先有如下的目录结构,当前在GOLANG目录下,learn.go是主文件,GOLANG下面有一个say的文件夹,say文件夹下有一个test.go文件其中的learn.go文件

2021-02-25 18:53:54 592

原创 Docker学习总结

在bilibili观看kuangshen讲解Docker做的笔记安装更新下载源$ apt update安装软件包以允许apt通过HTTPS使用存储库$ apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common添加Docker的官方GPG密钥$ curl -fsSL https://download.docker.

2021-02-24 00:02:40 1379

原创 Python使用selectors库开发高性能服务器

模拟网络通信,单独使用socket库编写时,你可能会这么写我在Linux上运行的,没在Windows上运行过socket_server.py 服务端# -*- coding: UTF-8 -*-import socket# 创建socket对象serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 设置IP地址复用serversocket.setsockopt(socket.SOL_SOCKET, sock

2021-02-05 00:50:28 670

原创 Ubuntu安装Python2或Python3多版本

在Ubuntu下安装,如果想在Windows中安装,参考https://github.com/pyenv/pyenv以下命令都是在root用户下操作,如果你不是root,没有权限时在命令前添加sudo一.下载pyenv使用Git下载,如果没有Git就使用命令apt install git先安装Git工具,再执行下面的命令root@zxh:~# git clone https://github.com/pyenv/pyenv.git ~/.pyenv如果下载的慢导致下载失败,使用下面的方法安.

2021-02-03 22:47:26 685 1

原创 Nginx配置学习总结

在b站学习nginx时做的笔记,没有实践,可能有误(^ … ^)在Ubuntu中安装Nginx:apt install nginx结构示例,在宝塔中默认的Nginx配置文件location后面有个~符号代表使用正则表达式,后面就开始接正则表达式进行匹配请求配置反向代理公网服务器有公网地址18.18.18.18:80,也有私网地址192.168.1.1,与公网服务器处在同一个内网下的主机192.168.1.2:8080存放教育网页面,主机192.168.1.3:8080存放淘宝网页面。客户端.

2021-01-20 20:30:46 277

原创 Ubuntu安装spark(伪分布式)

首先下载spark安装包到主机,2.4.0版本的spark我是在林子雨老师分享的网盘中下的该网址里有讲到http://dblab.xmu.edu.cn/blog/2441-2/# 解压sudo tar -zxvf spark-2.4.0-bin-without-hadoop.tgz -C /usr/local/cd /usr/lcoal# 改名sudo mv spark-2.4.0-bin-without-hadoop.tgz spark# 设置文件所有者和所有组,我的主机名是zhongsu

2020-12-08 22:51:26 585 2

原创 Python异步asyncio库学习总结

异步I/O主要解决的问题是减少I/O操作的的等待时间,将原本CPU要等待的时间用来执行其它的任务,以此来提高性能,I/O可以是网路I/O和本地文件I/O。网络I/O:对于网络底层来说,发出远程TCP/UDP请求后,数据要经过一条条网线,一个个路由器,到达目的地,回应数据然后还要原路返回,如果CPU执行的是同步的线程代码,那么这段时间内CPU不会继续执行该线程内的其它任务(或者说代码),而是在等待结果的返回。由此可看出对CPU资源的浪费。本地文件I/O:磁盘相对于CPU来说运行是极为缓慢的,因为CPU的

2020-12-08 22:34:27 754

原创 Python操作spark

本文的内容参考Spark编程基础(Python版) 厦门大学 林子雨在学习下面之前最好先理解Python原生的map函数和reduce函数的作用菜鸟教程Python map() 函数>>> data = [1, 2, 3, 4, 5]>>> for i in map((lambda x: x+5), data):... print(i)...678910菜鸟教程Python reduce() 函数>>> from f

2020-12-08 00:41:05 6639

原创 Python使用pyhive库远程操作hive的配置和使用

请先安装好hive,林子雨老师的配置方法,该配置方法是可以配置成功的,请注意配置hive-site.xml文件的时候,里面添加的信息都是在标签里的尾部添加配置hive环境到hive安装的conf目录下,把hive-env.sh.template复制一份并改名为hive-env.shcd /usr/local/hive/conf/cp hive-env.sh.template hive-env.sh然后配置hive-env.sh文件,进入里面会发现里面都是被注释了的。使用命令vim /usr/l

2020-11-21 00:41:34 5103 17

原创 python使用hdfs库操作Hadoop的HDFS

此次使用python的hdfs库操作HDFS,首相安装该库:pip install hdfs其次,要保证HDFS可用,如下图就代表可用,当然你列出的文件和我的不同老规矩,先来看看它这个库的大概结构,方便以后调用。先 import hdfs ,然后跟进hdfs库,查看定义它的地方。如下,既然是连接的库,那么这个client就是连接的客户端了,这里出现了三个client,它们有什么不同首先是Client类,转到定义处之后,可以发现它里面有很多操作,基本的增删查改都有了,看它的 __init__ 方法,

2020-11-01 15:38:42 10109

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除