- 博客(312)
- 资源 (48)
- 收藏
- 关注
原创 Golang 装饰器模式以及在NSQ中的使用
最近在研究NSQ这款中间件,发现了一些有意思的东西,装饰器模式就是其中一个。在整个项目中,装饰器模式的使用随处可见,因此有了这篇文章。 装饰器模式属于设计模式的一种,它的定义,简单来说,就是在不改变对象的内部结构情况下,动态地扩展对象的功能。通过创建一个装饰器,包装真实的对象,给对象增加新的功能特性。在Java中,IO就是典型的应用到了装饰器模式;Python中,更是在语法上原生支持,这大大提高了装饰模式在 Python 中的应用。 我们举个例子来看一下装饰器的应用。首先
2022-07-02 22:30:01
452
原创 Golang 匿名函数使用
最近在研究NSQ中间件,在研究这个中间件的过程中,发现了一些自己在平时开发工作中未使用到的Golang特性;决定记录下在这个过程中学习到的一些知识;本篇文章要写的,是关于Golang匿名函数的使用 匿名函数没有函数名只有函数体,他可以作为一种类型被赋值给函数类型的变量,匿名函数也往往以变量方式传递。 Go语言支持随时在代码里定义匿名函数。 匿名函数,由一个不带函数名的函数声明和函数体组成。简而言之,就是匿名函数可以将作为普通变量使用:能在函数中传递或者是赋值给变量。
2022-06-26 15:07:47
406
原创 NSQ源码安装运行过程
最近对NSQ很感兴趣,所以想研究一下NSQ源码;要想研究源码,首先得知道怎么使用吧。因此,第一步,就是如何通过源码来安装并启动NSQ 1 下载源码,并且编译: 这样,整个NSQ项目就搞好了 2 在nsq目录下,进入build目录,如下: 可以看到,在这个目录下的nsqd,nsqlookupd,nsqadmin等可执行文件 1 在一个shell下,启动 2 在另一个shell下,启动;这里需要注
2022-06-18 22:24:39
485
原创 100 Go Mistakes and How to Avoid Them 之代码结构和项目组织(四)
七 返回接口类型 在设计一个方法时,我们可能不得不返回一个接口类型或者一个具体的类型。那么我们来思考下,在大多数情况,返回一个接口,在Go中是一个槽糕的实践。 我们来看下,接口存在于消费端(用户端)的情况。来看下下图,如果一个方法返回一个接口类型而不是结构体会发生怎样的依赖问题。我们将会看到,这样会如何导致问题。 设计如
2022-06-04 22:00:04
561
1
原创 100 Go Mistakes and How to Avoid Them 之代码结构和项目组织(三)
六 生产端的接口 在前面的例子中,我们看到了接口的价值所在;但是,有一个问题经常让开发者误解:那就是接口到底放在哪一端。 在讨论这个话题之前,我们先要明确在这一节里面说的相关术语的明确含义: 生产端:接口的定义与具体实现在同一个包里面 客户端(应用端):接口定
2022-05-29 10:36:06
380
原创 Go 语言中,for循环引起的并发安全问题
一 问题来源 最近项目的开发过程中,遇到报空指针错误的问题。追查了好久,发现是Golang的经典问题: for循环中使用了goroutine,而在goroutine中使用了for循环的参数。二 问题描述 在工作项目中,实现了一个业务需求功能;去掉业务逻辑,代码抽象出来大概是这样: for msg:= range list {
2022-05-22 22:59:09
965
原创 100 Go Mistakes and How to Avoid Them 之代码结构和项目组织(二)
四 过度使用getters and setters方法 4.1 Ps:没有举具体代码实例,就当成作者的一个提醒吧五 接口污染 5.1 概念 接口污染的概念,指的是,用不必要的抽象来处理代码,使其难以理解与使用。在Go中,接口一般用来定义一组规范,而不是具体实现。...
2022-05-15 21:23:51
481
原创 Gitpod---可以在线运行Github上代码的IDE
一 Gitpod是什么Gitpod是一个在线IDE,可以打开任何Github页面,然后运行对应的实例代码。官方地址二 如何使用Gitpod在任何GitHub项目的URL前加上“gitpod.io#”即可。例如,一个Github项目的地址是:https://github.com/seabridge/xxx,那么加入后的地址就是:https://gitpod.io/#/github.com/seabridge/xxx 这样就能在浏览器中用Gitpod打开这个项目,在浏览器中处理了三 演示如何使
2022-05-14 18:47:42
5854
原创 100 Go Mistakes and How to Avoid Them 之代码结构和项目组织(一)
来源《100 Go Mistackes:How to Avoid Them》一 意外的变量隐藏 变量的作用域是指它的可见性。换句话说,程序中的名称在哪部分是有效的。在Go中,在块中声明的变量名称可以在内部块中重新声明。这种被称为变量隐藏的原则很容易出现错误。举例如下:var client *http.Client 1if tracing { client, err := createClientWithTracing() 2
2022-05-08 21:46:36
769
原创 git cherry-pick的使用
最近在开发一个紧急项目的时候,同事遇到一个很尴尬的问题:一些很重要的代码提交到不是项目的分支上,由于代码数量比较多,所以想通过复制文件重新提交到这个项目分支上有点麻烦。他问我,第一时间没想到git cherry-up命令。在网上搜索后,发现git cherry-up命令真香!解决了同事的问题。 git cherry-pick命令的作用,就是将
2022-05-01 21:53:33
2058
原创 解决 printf missing ... in args forwarded to printf-like function (go vet)的报错问题
如下的一段代码func (t *BaseTable) DebugLogf(format string, v ...interface{}) { g.Log().Warningf("%s", fmt.Sprintf(format, v))}执行golangci-lint run的提示,提示 printf missing … in args forwarded to printf-like function (go vet);如下所示发现是Sprintf方法里面,没有把接受到的可变参数传递进去,导
2021-12-14 23:10:47
993
原创 PHP 8.1 新的特性
PHP8.1新的特性有:1 增加Enums(枚举功能)2 增加fsync() 函数,作用是:帮助确保操作系统把改变的数据或者原数据成功写入到底层存储;新的fdatasync() 函数,仅作用于数据同步,而不针对原数据;在Windows / non-POSIX 环境下,它的作用于fsync函数相同3 继续在性能方面进行改进;其中的一个方面是在PHP8.1中增加inheritance cache(继承缓存),有助于减少在类继承中的开销4 新增对"Fibers"的支持,增加对PHP的异步功能的支持5 P
2021-12-12 21:37:59
1241
原创 Golangci-lint 安装
GolangCi-Lint 是Go的静态代码检查工具,最近需要用到它来检测我们项目组的代码质量,于是研究了下如何安装。其实很简单,直接从官网上看如何下载,官网地址两种方法:go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.43.0 或者curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -
2021-11-21 11:41:33
3244
原创 docker 1045 - Access denied for user ‘root‘@‘172.23.0.1‘ (using password: YES)
本地用docker搭建了一套完成的开发环境,由于数据库的默认配置是123456(测试环境),因此想把本地的环境的MySQL数据库链接密码修改成123456,修改后如下:修改后,用MySQL客户端登录数据库,结果提示如下docker 1045 - Access denied for user 'root'@'172.23.0.1' (using password: YES)出现这个错误,要是就是账号密码错误,要不就是说我的账号权限有问题(一般情况下就是这两个);前面一种情况可以排除,因为我确实已经修
2021-10-25 23:00:00
2365
原创 Failed to execute script docker-compose
执行 docker-compose compose-local.yml时,出现一堆提示:Traceback (most recent call last): File "docker-compose", line 6, in <module> File "compose/cli/main.py", line 71, in main File "compose/cli/main.py", line 124, in perform_command File "compose/cli
2021-10-24 20:00:02
8350
1
原创 终端界面,Linux服务器与mac之间文件的上传和下载
首先需要说明的是,我链接Linux服务器的软件是ZenTermLite的终端界面使用终端最主要的理由是,简单,快捷。上传命令是:rz,下载命名是sz一 上传进入linux服务器界面后,直接输入:rz,这个时候就会有弹窗出现,提示你上传文件:在对应的目录下,找到自己需要的文件,直接上传即可二 上传下载的话,直接输入sz+对应的文件即可,比如我想下载对应的文件名是dd.php,直接sz dd.php 即可...
2021-09-20 21:54:30
1340
原创 Phalcon介绍
一 Phalcon是什么Phalcon 是开源、全功能栈、使用 C 扩展编写、针对高性能优化的 PHP 5 框架。 开发者不需要学习和使用 C 语言的功能, 因为所有的功能都以 PHP 类的方式暴露出来,可以直接使用。 Phalcon 也是松耦合的,可以根据项目的需要任意使用其他对象。Phalcon 不只是为了卓越的性能, 我们的目标是让它更加健壮,拥有更加丰富的功能以及更加简单易于使用!来源二 Phalcon的特性1 低开销原因是:类和方法已经被编译好,能直接使用,不需要重新去加载。Phalco
2021-09-12 17:08:00
1603
原创 PHP array_merge 与 +理解不同引起的线上bug
最近上线,遇到一个问题:根据语言区域不同,获取的数据信息一直只有某一个区域的,其他区域的数据都没了。吓了我一大跳,赶紧开启debug模式。最终发现是没有搞清array_merge 与 + 的区别导致的bug。首先需要说明的是,array_merge 与 + 号都可以合并数组,但二者是有所不同的:对于+,当key相同时,不管key是字符还是数组,都是舍弃后面的结果;array_merge ,当key相同时,key是字符,则后面的覆盖前面的;key是数字,则不发生覆盖,会重新建立数组索引。<?php
2021-09-04 20:54:58
239
原创 mac exit 退出zsh
在mac的zsh上,运行exit,不能直接退出;可以设置如下:选择终端,选择偏好设置,设置如下:这样就可达到,在linux执行exit命令一样的效果了!
2021-06-29 23:01:28
4519
原创 macbook golang zsh: exec format error
mac电脑上,编译golang的代码,编译成功后,执行,报错提示:exec format error排查了好久,终于发现问题的所在:我的电脑关于golang的配置,有两项是这样的:GOOS="linux"而我编译完成后,是运行在macos上的,所以就报错了。知道问题的所在了,解决起来也很简单,编译的时候 ,执行如下:GOOS=darwin GOARCH=amd64 go build -o http -v ./main.go...
2021-06-29 22:54:45
15866
原创 Linux查看端口以及进程
本篇记录下自己经常使用查看端口以及进程命令:查看端口一 lsoflsof -i:端口号 用于查看某一端口的占用情况,比如查看8080端口使用情况,lsof -i:8080二 netstatlnetstat -tunlp |grep 端口号,用于查看指定的端口号的进程情况,比如查看8080端口使用情况,netstat -tunlp |grep 8000查看进程一 lsoflsof -p PID 用于查看某一进程情况,比如查看进程13704, lsof -p 13704二 top三 进
2021-05-23 12:59:21
12345
原创 docker下安装pcntl扩展
用docker搭建好workman环境后,使用curl -Ss http://www.workerman.net/check.php | php查看有无扩展依赖,发现需要安装pcntl扩展。以前没有在docker下安装php的扩展,所以在网上找了好半天,终于找到了对应的解决命令:docker-php-ext-install这个命令,是docker里面,用来安装并启动PHP扩展的它的基本格式是:docker-php-ext-install 扩展名例如这次我需要安装pcntl扩展,因此,我直
2021-04-18 17:10:22
1927
原创 如何解决.gitignore无法忽略文件
最近提交代码时候,发现总把一些本地的配置文件携带到git提交里面去了。于是在gitignore文件里面,添加了这些配置文件,以为能有效!结果发现还是不行!于是对.gitignore无法忽略文件的问题进行了研究!经过折腾,发现,如果一个文件是untrack时,添加到gitignore是可以及时生效的。但是对于已经加入版本库的文件是无效的。它需要执行:git update-index --assume-unchanged 文件(夹)A然后在.gitignore文件里添加要忽略的文件A或文件夹A就行了
2021-04-18 17:00:50
1623
原创 Nginx与PHP-FPM的通信方式
前面两篇文章,分别介绍了《PHP-FPM的原理及使用》和《PHP-FPM的配置,参数详解以及性能优化》。PHP-FPM主要是和Nginx进行交互,它们交互(通信)的方式有两种:一种是TCP的方式,一种是Unix Socke方式。两种方式的特点如下:TCP是使用TCP端口连接,在nginx配置为: 127.0.0.1:9000Socket是使用Unix Domain Socket连接套接字,一般以文件形式:/tmp/php-cgi.sock在实际的环境中,配置如下一 TCP配置.
2021-03-21 18:43:17
663
原创 PHP-FPM的配置,参数详解以及性能优化
上一篇《PHP-FPM的原理及使用》,介绍了关于php-fpm的今生前世以及如何与nginx交互的全过程。这一篇主要是说明php-fpm在服务器上是如何配置,对应的参数说明以及该怎么去优化一 参数配置以及说明这个配置是我们一个团队设置在测试环境里面的,主要参数说明如下:pm = dynamic; 这个配置有两个参数:1 dynamic; 2 static;dynamic表示php-fpm进程数是动态的,最开始是pm.start_servers指定的数量,如.
2021-03-21 18:39:31
731
原创 PHP-FPM的原理及使用
最近有人问我,一个Api请求的整个运行周期,在解答这个问题的过程中,发现自己对php-fpm相关的知识点不熟,以下是自己的相关总结。一 为什么要使用php-fpm出现的原因很简单,早期的Web Server只能处理HTML等静态文件,随着动态语音,比如PHP的出现,Web Server无法处理这种请求。于是CGI协议出现了,它的全称是Common Gateway Interface(公共网关接口),它 解决不同语言解释器与Web Server的通信问题。开发者可以按照CGI协议的要求使用任何语言编写程
2021-03-21 17:55:47
723
4
原创 Laravel-Admin Cannot Declare Class XXXX,Because The Name Is Already In Use
感悟-来源网站个人感悟–来源公众号如果觉得对你有所帮助,欢迎点在看和关注!
2021-01-21 22:25:36
1391
原创 Error: Run After Build Is Not Possible Main File Has Non-Main Package Or Doesn’t Contain Main Functi
Error: Run After Build Is Not Possible Main File Has Non-Main Package Or Doesn’t Contain Main Functio
2020-11-21 10:47:32
1270
原创 ubuntu20.04 安装swoole
前言首先需要说明的是,自己之所以要写这篇文章,主要是网上坑爹文章太多了,按照有的文章来安装,完全安装不了,坑的一比。所以才有了这篇文章。其次,我的Ubuntu版本是20.04,并且已经安装好了nmp环境(这个就不多说),显示如下:所以,最终的一步,就是如何安装swoole了。需要说明的是,本人已安装成功,最终的结果显示如下:安装过程如下先下载swoole源码:wget https://codeload.github.com/swoole/swoole-src/tar.gz/v4.5.
2020-10-26 23:12:59
1559
原创 ubuntu20.04 命令行终端字体颜色和大小
发现命令行默认终端字体的颜色和大小不符合我的使用习惯,想调整下,搜了下网上的各种使用说明,没找到对应的位置;后来经过摸索,终于找到了正确设置的地方。首先需要说明的是,我的ubuntu版本是20.04,默认字体颜色如下:对于我而言,字体太小了,并且颜色之类的也并不好看,想替换下,设置步骤如下:主页面如上,选择左上方的“终端” =>首选项 =》 未命名:是一种应用在非唯一普通索引页(non-unique secondary index page)不在缓冲池中,对页进行了写操作,并不会立刻将磁盘页加载到缓冲池,而仅仅记录缓冲变更(buffer changes),等未来数据被读取时,再将数据合并(merge)恢复到缓冲池中的技术。它的目的是降低写操作的磁盘IO,提升数据库性能。二 为什么需要change buffer假设没有change buffer ,在缓冲池中没有对应数据页时
2020-10-12 22:44:13
1041
原创 composer.json 解决依赖冲突
Problem 1- hedeqiang/umeng 1.0.4 requires guzzlehttp/guzzle ^6.3 -> satisfiable by guzzlehttp/guzzle[6.3.0, 6.3.1, 6.3.2, 6.3.3, 6.4.0, 6.4.1, 6.5.0, 6.5.1, 6.5.2, 6.5.3, 6.5.4, 6.5.5, 6.5.x-dev] but these conflict with your requirements or minimum-sta
2020-09-16 14:56:44
4313
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅