自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

李斌的BLOG

http://blog.mailjob.net

  • 博客(163)
  • 资源 (5)
  • 问答 (2)
  • 收藏
  • 关注

原创 汀风说后端【个站】

https://blog.mailjob.net

2021-05-18 18:54:27 250

原创 Go语言实现23种设计模式

设计模式是一套被广泛应用于软件开发中的解决问题的经验总结,它可以帮助开发人员设计出更加灵活、可维护和可扩展的代码。本文将探讨使用设计模式的好处,并对常见的设计模式进行分类和介绍。此外,我们还将提供设计模式的相关链接,以便读者深入了解各个设计模式的细节和实例。最后,我们将探讨如何学习设计模式以及如何在日常开发和项目过程中应用设计模式,以及使用设计模式所带来的好处。设计模式是软件开发中重要的工具之一,它可以帮助开发人员设计出灵活、可维护和可扩展的代码。

2023-07-18 09:39:45 3112

原创 深入理解Gin框架中Trie树的实现原理

通过本文的介绍,我们深入理解了Gin框架中Trie树的实现原理。我们了解了Trie树的基本概念,并提供了一个简化的Trie树实现示例,帮助读者更好地理解Gin框架中Trie树的实现方式。Trie树在Gin框架中的应用为路由匹配提供了高效的解决方案。读者可以根据示例代码和理解,自己编写类似的Trie树结构,并在自己的项目中应用。

2023-07-07 23:50:08 2977

原创 订单拆单,电商开发时 经常遇到的问题

订单管理系统,处理核心的自动拆单流程,维护主数据订单与子单之间的关系,有拆单规则配置,处理2次拆单按实际包裹拆单,并且回写订单库,所有订单的拆分合并核心业务都在此系统上处理,上对订单服务化,下接商家ERP和WMS,同时以后还要支持扩展用户按最快发货方式,用户手动拆单,已经在“发货”状态的订单不能拆分;系统异步拆单后,OMS维护主数据订单与子单之间的关系,回写到订单,订单库中就有4个订单,同时告知用户前端,你的订单因为XXXX原因,为了方面你跟踪,我们拆分了订单,订单的状态为“待发货”

2022-08-19 11:55:34 3450 1

原创 Go语言标准项目布局

该项目布局主要参考 project-layout 形成的,对 project-layout 某些描述不清的模块进行进一步描述,和对某些模块详细配置不清楚的模块进一步扩展示例。项目布局推荐Go程序目录.├── cmd├── internal└── pkgserver application目录/api该目录用来存放 OpenAPI/Swagger 规则说明, JSON 格式定义, 协议定义文件等。也有可能用来存放具体的对外公开 API.web application 目录/webWe

2022-05-22 13:08:59 681

原创 Go 安装可执行程序工具报错以及无法使用的问题

前言在 Go 语言中,我们通常用借用一些工具作为可执行程序使用。但是按照官方文档安装过程中,总是会发生 go get 成功了,但是执行命令的时候总是提示命令未找到的错误,例如:Mac: bash: /Users/libin/go/bin/xxx: No such file or directory、Windows: xxx不是内部或外部命令,也不是可运行的程序或批处理文件在常用的工具中,拿 protoc-gen-go 和 wire 来举例,需要文档的安装命令是:go get github.com/go

2022-05-11 11:01:51 2094

原创 Go 手动打造一个简易版的 try cache

func main() { // 手动改造的 try catch 方法 try(func() { fmt.Println("测试方法开始执行") panic("error this try catch") }, func(err interface{}) { fmt.Println("捕获到了异常err:", err) })}// fun 正常的方法// catch 异常处理的方法// interface{} 可以接收所有的异常func try(fun func(), ca.

2022-05-08 14:57:22 256

原创 Go test 针对单个测试文件构建失败

go test 可以对项目所有的测试文件(文件名以_test.go结尾的文件)进行单元测试但是,有时候我们只需要对单独的一个文件进行单元测试,有可能出现下面的错误为定义的类型和方法,并且构建失败go test -v showList_test.go # command-line-arguments [command-line-arguments.test]./showList_test.go:8:8: undefined: ShowList./showList_test.

2022-05-07 11:25:50 514

转载 vue父子组件v-model传值

记录三种常用的父子组件传值1、常规用法(1)父组件传值给子组件,通过props接收父组件的传的值。子组件传值给父组件,通过$emit()事件分发向父组件传值。父组件中 定义:isDomDialog传值 :<DomDialog :isDomDialog="isDomDialog" @getValue="getVal"></DomDialog>子组件中接收:props:{ isDomDialog:{type: Boolean,}},data(){

2022-03-29 17:12:46 10249

转载 深入理解Laravel定时任务调度机制

1. 基本实现逻辑一个复杂的web系统后台当中,一定会有很多定时脚本或者任务要跑。例如爬虫系统需要定期去爬取一些网站数据,自动还贷系统需要每个月定时对用户账户扣款结算,会员系统需要定期检测用户剩余会员天数以便及时通知续费等等。Linux系统中内置的crontab一般被广泛地用于跑定时任务。其任务指令格式如下:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-li661hSQ-1643009747304)(https://ask.qcloudimg.com/http-save/

2022-01-24 15:36:26 1417

原创 Laravel打印执行的SQL语句

Laravel 打印SQL语句\DB::connection()->enableQueryLog(); //开启执行日志,加在需要打印的SQL语句之前$list = self::where(['investorid'=>$id])->whereBetween('inserttime',[$start,$end])->where('deposit','>',0)->orderBy('id','asc')->Paginate(20);print_r(\DB

2022-01-17 14:48:12 2672

原创 Go语言使用protobuf快速入门

前言protobuf 即 Protocol Buffers,是一种轻便高效的结构化数据存储格式,与语言、平台无关,可扩展可序列化。protobuf 性能和效率大幅度优于 JSON、XML 等其他的结构化数据格式。protobuf 是以二进制方式存储的,占用空间小,但也带来了可读性差的缺点。protobuf 在通信协议和数据存储等领域应用广泛。Protobuf 在 .proto 定义需要处理的结构化数据,可以通过 protoc 工具,将 .proto 文件转换为 C、C++、Golang、Java、P

2022-01-15 16:01:35 4553

原创 Go:专属二进制编码方式Gob

Gob 是 Go 自己的以二进制形式序列化和反序列化程序数据的格式;可以在 encoding 包中找到。这种格式的数据简称为 Gob (即 Go binary 的缩写)。类似于 Python 的 “pickle” 和 Java 的 “Serialization”。Gob 通常用于远程方法调用(RPCs,参见 15.9 的 rpc 包)参数和结果的传输,以及应用程序和机器之间的数据传输。 它和 JSON 或 XML 有什么不同呢?Gob特定地用于纯 Go 的环境中,例如,两个用 Go 写的服务之间的通信。.

2022-01-14 22:20:09 1260

原创 Go常用命令

Go语言自带有一套完整的命令操作工具,可以通过在命令行中执行go来查看它们go build这个命令主要用于编译代码。在包的编译过程中,若有必要,会同时编译与之相关联的包。如果是普通包,就像编写的mymath包那样,当执行go build之后,它不会产生任何文件。如果需要在$GOPATH/pkg下生成相应的文件,那就得执行go install。如果是main包,当执行go build之后,它就会在当前目录下生成一个可执行文件。如果需要在$GOPATH/bin下生成相应的文件,需要执行go in

2021-11-25 12:46:01 162

原创 PHP使用ImageMagick操作gif图

具体的效果就是对于微信小游戏和小程序来说,不能直接地使用动态 Gif 图片,一张 Gif 图片在小游戏或小程序中是不会动的。所以在我们公司的游戏开发中,需要一张将整个 Gif 动图的每一帧拆出来的图片拼成一张精灵图交给前端,由他们来使用 JS+CSS 的能力动态地循环我们拆帧后的图片,从而形成动图的效果。业务需求就是这么个情况,当然,最后的解决方案也正是使用了 ImageMagick 来实现的。话不多说,我们直接先看代码。参考文献PHP: ImageMagick - Manual https:/

2021-10-29 10:25:36 464

原创 PHP项目目录这样设计会更好

参考文献Laravel 程序架构设计思路使用动作类:https://learnku.com/laravel/t/12791如何使用Serviece模式:https://learnku.com/articles/38999如何使用Repository模式:https://learnku.com/articles/39000Controller[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zlkxtj1S-1635401385829)(https://segment

2021-10-28 14:10:18 192

原创 go结构体与JSON序列化

代码示例package mainimport ( "encoding/json" "fmt")type dog struct { Name string `json:"name" db:"name"` Year int `json:"year"`}func main() { d1 := dog{ Name: "布迪", Year: 2020, } // 序列化 b,err := json.Marshal(d1) if err!=nil { fmt.Print

2021-09-24 18:53:06 212

原创 go结构体嵌套和用结构体实现模拟“继承”

什么是结构体嵌套一个结构体中可以嵌套包含另一个结构体或结构体指针示例结构体嵌套package mainimport "fmt"// 桌子结构体type table struct { material string shape int com common // 嵌套结构体}// 被嵌套的结构体定义type common struct { year int}func main() { // 嵌套结构体定义和输出方法 s1 := table{ material:

2021-09-24 10:12:24 970

原创 go语言实现简单的学生管理系统

介绍总结go语言的基础学习,通过两种方式实现简单的学生信息管理系统方法一package mainimport ( "fmt" "os")// 定义所有学生信息var studentData map[int]*student// 定义学生type student struct { id int64 name string score int}// 初始化分配内存空间func init() { studentData = make(map[int]*student,

2021-09-20 17:42:36 1232

原创 理解 Go 语言中的方法和接收者

Go语言中的 方法(Method) 是一种作用于特定类型变量的函数。这种特定类型变量叫做 接收者(Receiver)。接收者的概念就类似于其他语言中的this或者 self。方法的定义格式如下:func (接收者变量 接收者类型) 方法名(参数列表) (返回参数) { 函数体}其中,接收者变量:接收者中的参数变量名在命名时,官方建议使用接收者类型名称首字母的小写,而不是self、this之类的命名。例如,Person类型的接收者变量应该命名为 p,Connector类型的接收者变量应该

2021-09-16 23:17:58 4027

原创 Go中的构造函数

构造函数介绍Golang作为结构化的语言是没有面向对象语言中的构造方法的,不过可以通过一些方式实现类似的面向对象语言中构造方法的效果。因为 struct 是值类型,如果结构体比较复杂的话,值拷贝 性能开销会比较大,所以该构造函数返回的是结构体指针类型。规范New 关键字开头返回结构体指针示例package mainimport "fmt"// 结构体type dog struct { name string}// NewDog 构造函数func NewDog(n

2021-09-16 22:29:06 529

原创 Go中的 for range 结合 & 取地址的趣味小问题

前言在网上发现一道golang 中的 for range 和 & 取地址结合的题目,感觉很有趣,先来看看演示代码。演示代码package mainimport "fmt"type student struct { name string age int}func main() { m := make(map[string]*student) stus := []student{ {name: "小王子", age: 18}, {name: "娜扎", age:.

2021-09-16 10:45:11 379

原创 Go中的内存对齐演示

机构体占用一块连续的内存:package mainimport "fmt"type test struct { a int8 b int8 c int8 d int8}func main() { type test struct { a int8 b int8 c int8 d int8 } n := test{ 1, 2, 3, 4, } fmt.Printf("n.a %p\n", &n.a) fmt.Printf("n.b %p\n",

2021-09-15 16:03:00 117

原创 Go结构体初始化的几种方式

new初始化结构体指针可以通过使用new关键字对结构体进行实例化,得到的是结构体的地址。 格式如下:package mainimport "fmt"type stu struct { name,address string}func main() { // 结构体指针1 var stu1 = new(stu) stu1.name = "张三" (*stu1).address = "北京" fmt.Println(stu1)}取结构体地址实例化使用&对结构体进行取

2021-09-15 15:07:59 4699

原创 laravel中env底层加载和解析原理

前言我们的应用程序几乎都会遇到不同环境需要不同的配置文件,比如最常见的开发环境需要连接开发数据库,生产需要连接生产库。记的自己曾经有个项目的做法是写两个配置文件,然后定义一个常量IS_PRODUCTION,默认是false,然后根据这个常量取配置文件,因为当时不是自动化部署,最闹心的就是每次上线之后还要去线上服务器手动将这个常量的值改为true。终于使用了laravel和自动化部署开发,完美的解决了不同环境加载不同配置文件,再也不用担心环境多配置文件乱的问题了。今天我们先来看看laravel中env的加

2021-09-02 18:20:59 661

原创 go 匿名函数和闭包

匿名函数匿名函数多用于实现回调函数和闭包。函数当然还可以作为返回值,但是在Go语言中函数内部不能再像之前那样定义函数了,只能定义匿名函数。匿名函数就是没有函数名的函数,匿名函数的定义格式如下:func(参数)(返回值){ 函数体}匿名函数因为没有函数名,所以没办法像普通函数那样调用,所以匿名函数需要保存到某个变量或者作为立即执行函数:func main() { // 匿名函数 sumFuns := func(x int, y int) int { return x

2021-08-31 14:44:13 237

原创 常见的企业Wiki

企业Wiki(Enterprise Wiki)指适用于企业或组织内部使用的Wiki。与非企业Wiki(如著名的MediaWiki)最根本的不同点在于,企业Wiki是为企业量身定做的Wiki。通过鼓励、发动组织成员参与协作、共享与创新,企业Wiki旨在整合企业组织内部的信息孤岛,提高企业知识管理能力,提升企业信息化程度,从而为企业在知识经济时代的可持续发展打下坚实基础。企业Wiki同样适用于其他以团队为基本组织结构的组织。很多著名的企业Wiki都是开源产品,如Foswiki(基于Perl),TWiki(基

2021-08-30 14:31:44 568

转载 Jetbrains系列产品重置试用方法

没错,jetbrains-agent这个项目停止了。市面上漫天飞的各种最新都是其他大神的魔改版本。[/斜眼]我不是要专门写个博文来说明jetbrains-agent项目已经停止,然后缅怀感叹一番。这篇文章是想和大家聊聊另一种思路。0x0. 项目背景Jetbrains家的产品有一个很良心的地方,他会允许你试用30天(这个数字写死在代码里了)以评估是否你真的需要为它而付费。但很多时候会出现一种情况:IDE并不能按照我们实际的试用时间来计算。我举个例子:如果我们开始了试用,然后媳妇生孩子要你回去

2021-08-30 14:30:25 934

原创 docker-compose 部署 ubuntu 镜像 port 端口不生效

编写了一个 docker-compose 用于部署 ubuntu 镜像。出现了一个很怪的问题:当我 run 容器的时候,映射的端口是生效的。但是当我用 docker-compose 把命令编在一起的时候,用 docker-composer up -d 端口不生效。我先用 docker logs {container_id} 试图查看错误日志,发现日志为空。查阅资料后,发现要用以下命令启动,可以查到到错误。docker-compose up --build得到的报错信息如下:ubu

2021-08-23 18:53:34 2811

原创 Win10 VMware Nat 配置Centos7静态IP

Windows电脑配置本地网络

2021-07-27 07:38:04 356

原创 MacOS VMware Nat 配置Centos7静态IP

把VMware网络配置成 nat 模式通过Mac终端进入VMware Fusion的vmnet8目录cd /Library/Preferences/VMware\ Fusion/vmnet8查看nat.conf内容cat nat.conf记住红框中的数据,下面配置时需要用到查看cat dhcpd.confcat dhcpd.conf注意range 这个是虚拟机允许选择的静态ip地址范围,自定义的静态ip地址必须要在这个范围内(本文打算使用192.168.1

2021-07-06 13:20:52 405 1

原创 PHPUnit 单元测试

什么是单元测试单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。在php里边,最小单元可以指一个函数、或者类,需要验证的就是每个函数,每个类的功能与我们预想的一致。单元测试有什么意义可以 减少一些细节错误的发生 ,比如应该报错的情况没有报错,入参、结果是否与需求对应上等。 便于日后修改维护 ,实际工作中存在不少

2021-06-02 17:16:52 850 2

原创 PHP使用glob()查找文件

大部分PHP函数的函数名从字面上都可以理解其用途,但是当你看到 glob() 的时候,你也许并不知道这是用来做什么的,其实glob()和scandir() 一样,可以用来查找文件,请看下面的用法:// 取得所有的后缀为PHP的文件$files =glob(‘*.php');print_r($files);/* 输出:Array([0] => phptest.php[1] => pi.php[2] => post_output.php[3] => test.p.

2021-05-25 10:13:53 428

原创 PHP传递任意数量的函数参数

我们在.NET或者JAVA编程中,一般函数参数个数都是固定的,但是PHP允许你使用任意个数的参数。下面这个示例向你展示了PHP函数的默认参数:// 两个默认参数的函数function foo($arg1 = ”,$arg2 = ”) {echo “arg1:$arg1\n”;echo “arg2:$arg2\n”;}foo(‘hello','world');/* 输出:arg1: helloarg2: world*/foo();/* 输出:arg1:arg2:*/下面这

2021-05-25 10:11:43 279

原创 Swoole 健康检查

参考文献client同步阻塞客户端:https://wiki.swoole.com/#/client?id=%E5%AE%8C%E6%95%B4%E7%A4%BA%E4%BE%8Bheartbeat_check_interval:https://wiki.swoole.com/#/server/setting?id=heartbeat_check_interval健康检查机制对于长连接这种断开的问题;主要的点就在于服务端会保存客户端会话的有效性以及平台上监控所有客户端的网络状况;对于这种功能的实

2021-03-27 21:54:54 149

转载 内网渗透之代理转发

1 前言谈到内网转发,在我们日常的渗透测试过程中经常会用到端口转发,可以利用代理脚本将内网的流量代理到本地进行访问,这样极大的方便了我们对内网进行横向渗透。那为什么不直接通过登陆服务器来对内网中其他机器进行渗透,而是通过内网转发呢?意义何在呢?因为………大部分时候拿到权限不够,无法直接登录。而且如果在内网服务器中进行操作,我们需要上传工具进行很多操作,如果服务器缺少对应的环境变量或者组件,会导致渗透受阻。而且直接远程登录会留下比较明显的痕迹。因此内网转发是我们最好的选择,在本

2021-02-19 21:41:55 1459

转载 linux简单实现发送邮件

1)利用sendEmail程序来发送报警邮件.sendEmail是一个轻量级,命令行的SMTP邮件客户端,非常完美,使用简单并且功能强大.这个被设计用在php、bash 、perl和web站点使用。2)利用python脚本来发送邮件一、利用sendemail发送报警邮件1)先下载安装包到本地,解压。[root@Zabbix-server ~]# cd /usr/local/src/[root@Zabbix-server src]# wget -chttp://caspian.dotconf.n.

2021-02-19 03:32:44 594

转载 Linux搭建smtp服务发送email

介绍sendmail是linux系统中一个邮箱系统,如果我们在系统中配置好sendmail就可以直接使用它来发送邮箱。sendmail的配置文件/etc/mail/sendmail.cf Sendmail的主配置文件;/etc/mail/access 中继访问控制;/etc/mail/domaintable 域名映射;/etc/mail/local-host-names 本地主机别名;/e...

2021-02-19 03:31:26 6325

原创 VSCode 必知必会的 20 个快捷键

并不是每一个开发者都有足够的时间,去了解熟悉所有的快捷键,来帮助我们提高编码效率。因为快捷键实在是太多了。所以,下面我列出了我最喜欢的快捷键。多行转一行 在 MAC 上:Ctrl + J 在 Ubuntu/Windows 上:通过File>Preferences>Keyboard shortcuts打开快捷键的设置,并且绑定editor.action.joinLines你自己的快捷键。 格式化代码这个快捷键可以帮助我们对代码进行缩进。注:可...

2021-02-06 23:57:59 2639

转载 转载:Docker从入门到上瘾

1 容器简介 2 什么是 Docker? 3 安装Docker 4 docker镜像相关操作 5 容器的日常管理 6 Docker 数据卷的管理 7 Dockerfile自动构建docker镜像 8 Docker中的镜像分层 9 使用docker运行zabbix-server 10 docker 仓库(registry) 11 docker-compose编排工具 12 重启docker服务,容..

2021-01-28 10:42:35 362

PHP操作SqlLite类

PHP操作SqlLite类

2017-05-09

ECShop_V2.7.3_UTF8_完美兼容_jQuery_模式

Ecshop与Jquery冲突的完美解决方案 ECShop把AJAX事件和JSON解析的模块放在common/transport.js之中,可以说它也有自己封装的一套工具,这其实是很正常的。 但恰恰的,在封装JSON各种方法的同时对object的模型进行了重写,这个就跟jQuery冲突了。因为众所周知的,jQuery对各种JavaScript对象进行了扩展。 在这里我已经把里面的冲突文件调好了, 所以提供给大家下载, 大家下载下来之后可以去直接安装使用, 并且不会包有关jQuery冲突方面的问题 /**/习惯用jQuery符合定义的jquery文件的朋友建议下载此文件 更多问题请联系博主!

2016-01-07

ECShop_V2.7.3_UTF8_完美兼容_$_模式

Ecshop与Jquery冲突的完美解决方案 ECShop把AJAX事件和JSON解析的模块放在common/transport.js之中,可以说它也有自己封装的一套工具,这其实是很正常的。 但恰恰的,在封装JSON各种方法的同时对object的模型进行了重写,这个就跟jQuery冲突了。因为众所周知的,jQuery对各种JavaScript对象进行了扩展。 在这里我已经把里面的冲突文件调好了, 所以提供给大家下载, 大家下载下来之后可以去直接安装使用, 并且不会包有关jQuery冲突方面的问题 /**/习惯用$符合定义的jquery文件的朋友建议下载此文件 更多问题请联系博主!

2016-01-07

jquery.json-1.3.js

ecshop中新定义的json文件, 提供给大家下载哦!!!

2016-01-07

PHP_CI框架分页使用

PHP_CI框架分页使用, 欢迎大家学习哦哦哦!

2015-12-25

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

TA关注的人

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