上一页 1 ··· 25 26 27 28 29 30 31 32 33 ··· 54 下一页
摘要: 动态地为类的实例添加功能,一层一层的套功能 先定义好接口 interface Booking{ public function getDescription(): string; } 这个就是装饰器实现了Booking,通过构造函数传递Booking对象进来 abstract class Booki 阅读全文
posted @ 2020-10-18 19:04 唯一客服系统开发笔记 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 如果函数的最后一个参数是采用 ...type 的形式,那么这个函数就可以处理一个变长的参数,这个长度可以为 0,这样的函数称为变参函数。 示例函数和调用: func myFunc(a, b, arg ...int) {} func Greeting(prefix string, who ...str 阅读全文
posted @ 2020-10-16 14:54 唯一客服系统开发笔记 阅读(643) 评论(0) 推荐(0) 编辑
摘要: 数据映射器是一个数据访问层,用于将数据在持久性数据存储(通常是一个关系数据库)和内存中的数据表示(领域层)之间进行相互转换。其目的是为了将数据的内存表示、持久存储、数据访问进行分离。该层由一个或者多个映射器组成(或者数据访问对象),并且进行数据的转换。映射器的实现在范围上有所不同。通用映射器将处理许 阅读全文
posted @ 2020-10-15 14:40 唯一客服系统开发笔记 阅读(298) 评论(0) 推荐(0) 编辑
摘要: 在一些客服系统中,当有新消息出现时,会有提示声音响,使用到的是html5的新标签 <audio id="chatMessageAudio"> <source id="chatMessageAudioSource" src="/static/images/alert.mp3" type="audio/ 阅读全文
posted @ 2020-10-15 13:57 唯一客服系统开发笔记 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 以单个对象的方式来对待一组对象 有一个接口类,有一个需实现的方法,其他所有类都实现它,在一个组合类的实现方法中循环调用另外其他类的方法 有一个公共的接口类 interface Renderable { public function render(): string; } 组合类,也实现了接口 cl 阅读全文
posted @ 2020-10-15 11:50 唯一客服系统开发笔记 阅读(237) 评论(0) 推荐(0) 编辑
摘要: 解耦一个对象的实现与抽象,这样两者可以独立地变化。对一个功能进行拆分成两个具体对象,通过构造函数或者方法传递桥接起来两个对象 通过传递另外对象来实现功能,本身保留抽象方法给子类去独立实现 abstract class Service { protected Formatter $implementa 阅读全文
posted @ 2020-10-14 19:12 唯一客服系统开发笔记 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 在项目中使用到了curl扩展进行PUT传递数据到另一个接口,但是看到的现象是有时候偶发数据是空的 . 这个时候就使用了tcpdump命令来查看连接情况 具体命令是下面 , 另一个接口的端口号是8025 : tcpdump -i any port 8025 -l -s 0 可以看到在我请求对方时出现下 阅读全文
posted @ 2020-10-14 17:26 唯一客服系统开发笔记 阅读(716) 评论(0) 推荐(0) 编辑
摘要: SYN表示建立连接, FIN表示关闭连接, ACK表示响应, PSH表示有 DATA数据传输, RST表示连接重置 F : FIN - 结束; 结束会话 S : SYN - 同步; 表示开始会话请求 R : RST - 复位;中断一个连接 P : PUSH - 推送; 数据包立即发送 A : ACK 阅读全文
posted @ 2020-10-14 17:16 唯一客服系统开发笔记 阅读(2785) 评论(0) 推荐(0) 编辑
摘要: CURLOPT_CONNECTTIMEOUT 连接超时 用来告诉PHP脚本在成功连接服务器前等待多久(连接成功之后就会开始缓冲输出),这个参数是为了应对目标服务器的过载,下线,或者崩溃等可能状况; CURLOPT_TIMEOUT 传输超时 用来告诉成功PHP脚本,从服务器接收缓冲完成前需要等待多长时 阅读全文
posted @ 2020-10-14 17:12 唯一客服系统开发笔记 阅读(355) 评论(0) 推荐(0) 编辑
摘要: 将某个类的接口转换成与另一个接口兼容。适配器通过将原始接口进行转换,给用户提供一个兼容接口,使得原来因为接口不同而无法一起使用的类可以得到兼容。 下面这个例子Book 和EBook这是两个类型,方法都不一样,通过一个EBookAdapter类转换EBook方法成为Book的方法 两个类型的接口 in 阅读全文
posted @ 2020-10-13 18:59 唯一客服系统开发笔记 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 和抽象工厂类似,静态工厂模式用来创建一系列互相关联或依赖的对象和抽象工厂模式不同的是静态工厂模式只用一个静态方法就解决了所有类型的对象创建 工厂里提供一个静态方法来创建不同的对象实例 final class StaticFactory { public static function factory 阅读全文
posted @ 2020-10-13 18:48 唯一客服系统开发笔记 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 使应用中只存在一个对象的实例,并且使这个单实例负责所有对该对象的调用 final class Singleton{ private static ?Singleton $instance = null; public static function getInstance(): Singleton 阅读全文
posted @ 2020-10-13 18:42 唯一客服系统开发笔记 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 简单的创建对象型工厂模式,目的是当有很多的初始化动作的时候,可以直接在工厂里搞,不用每次new都写一遍 工厂生成自行车 class SimpleFactory { public function createBicycle(): Bicycle { return new Bicycle(); } } 阅读全文
posted @ 2020-10-13 17:47 唯一客服系统开发笔记 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 通过创建一个原型对象,然后复制原型对象来避免通过标准的方式创建大量的对象产生的开销(new Foo())。 大量的数据对象(比如通过ORM获取1,000,000行数据库记录然后创建每一条记录对应的对象实体)带构造方法、属性的类,clone的性能要比new带上构造参数的性能高不少 这个就是原型,子类继 阅读全文
posted @ 2020-10-13 17:34 唯一客服系统开发笔记 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 最重要的特征是,有两个数组存对象,忙的数组和闲的数组.当使用对象后,不是立即销毁对象,而是放回池子闲的数组里面,下次使用直接拿,拿到后放到忙的数组里.当拿不到的时候就再创建新 class WorkerPool { /** * @var 忙的数组 */ private array $occupiedW 阅读全文
posted @ 2020-10-13 16:43 唯一客服系统开发笔记 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 简化就是工厂生成产品,工厂和产品都是接口,分别都有对应的具体实现类 工厂方法和抽象工厂的样子非常的像,只有一点小区别,工厂方法处理一个产品族,抽象工厂处理多个产品族,一个处理的产品少一个处理的多。 有一个工厂接口LoggerFactory , 日志器工厂 有两个工厂的实现类,标准输出日志器工厂 和 阅读全文
posted @ 2020-10-13 16:28 唯一客服系统开发笔记 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 目的:生成器的目的是将复杂对象的创建过程(流程)进行抽象,生成器表现为接口的形式。 如果对象有复杂的继承树,理论上创建对象的生成器也同样具有复杂的继承树。 传进来一个生成器, 我调用这个生成器来生成我所需要的汽车,这就是生成器模式的核心.这个生成器Builder是个接口,把复杂对象的创建过程进行抽象 阅读全文
posted @ 2020-10-13 15:59 唯一客服系统开发笔记 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 支付宝小程序的开发管理里 > 服务器域名白名单添加 自己的主域名 , 所有二级域不需要都加上 js文件里直接使用网络API my.request({ url: 'https://gofly.sopans.com/visitors_online', method: 'GET', success: fu 阅读全文
posted @ 2020-10-13 14:26 唯一客服系统开发笔记 阅读(295) 评论(0) 推荐(0) 编辑
摘要: 抽象工厂:在不指定具体类的情况下创建一系列相关或从属对象。最重要的特征就是抽象类的组合.通常,创建的类都实现相同的接口。抽象工厂的客户端并不关心这些对象的创建方式,只是知道它们如何组合在一起。 三个抽象类 interface WriterFactory{ public function create 阅读全文
posted @ 2020-10-13 13:24 唯一客服系统开发笔记 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 作为一个平台型服务,提供给用户管理自己的个人设置,以及可以管理邮箱的webmail系统 , 登录验证部分是要求比较多的 1. 第一个难点是安全性 , 验证密码后 , 如果企业开启了高安全等级 , 那么用户必须验证手机号 。没有绑定手机号的需要先绑定后验证。 当用户开启了密码失效功能后,如果当前密码过 阅读全文
posted @ 2020-10-09 17:35 唯一客服系统开发笔记 阅读(311) 评论(0) 推荐(0) 编辑
摘要: 使用这个GoAdminGroup/go-admin框架的最简单的例子就可以把项目运行起来 , go-admin 是以扩展库的形式使用的. 建一个main.go package main import ( "io/ioutil" "log" "os" "os/signal" _ "github.com 阅读全文
posted @ 2020-09-29 13:50 唯一客服系统开发笔记 阅读(1322) 评论(1) 推荐(0) 编辑
摘要: 在开启了go module情况下 , 也就是执行了 go env -w GO111MODULE=on 再执行go get xxxxx 文件会存放在$GOPATH/pkg/mod 下 并且目录名里的大写字母会转成小写字母 , 前面加一个! 例如: go get github.com/GoAdminGr 阅读全文
posted @ 2020-09-29 11:55 唯一客服系统开发笔记 阅读(1839) 评论(0) 推荐(0) 编辑
摘要: 当我执行go install github.com/xxxxx 时候 , 报错: can't load package: cannot find module providing package github.com/xxx: working directory is not part of a m 阅读全文
posted @ 2020-09-29 11:27 唯一客服系统开发笔记 阅读(6501) 评论(0) 推荐(0) 编辑
摘要: go-fly 基于GO语言实现的web客服即时通讯与客服管理系统。非常适合给自己的网站增加在线客服功能,代码简单也适合学习。 Github地址:https://github.com/taoshihan1991/go-fly 后台管理地址: https://gofly.sopans.com/login 阅读全文
posted @ 2020-09-26 03:37 唯一客服系统开发笔记 阅读(2358) 评论(0) 推荐(0) 编辑
摘要: 在这个目录下建立shell文件 /home/ubuntu/shell_script/backup_db_gofly.sh #!/bin/base #定义备份文件路径 backupFilePath="/home/ubuntu/database/"; #定义备份文件名称 currentDate=`dat 阅读全文
posted @ 2020-09-24 19:08 唯一客服系统开发笔记 阅读(282) 评论(0) 推荐(0) 编辑
摘要: 获取到当前用户的IP以后想把它转换成中国的城市 , 可以使用下面这个库 ipdb-go gin的入口代码 func PostVisitorLogin(c *gin.Context) { ipcity:=tools.ParseIp(c.ClientIP()) ipcity.CountryName+ip 阅读全文
posted @ 2020-09-23 23:09 唯一客服系统开发笔记 阅读(377) 评论(0) 推荐(0) 编辑
摘要: 监听事件 mounted() { document.addEventListener('paste', this.onPasteUpload) } 粘贴的时候组装formData , 下面代码中的文件域name属性是 imagefile ,,然后调用jquery的ajax方法传过去 , 后端和普通文 阅读全文
posted @ 2020-09-22 21:10 唯一客服系统开发笔记 阅读(1610) 评论(0) 推荐(0) 编辑
摘要: 突然多了很多访客 , 有个访客告诉我被公众号推荐了 , 我才看到了 , 本来一个简单的练习项目 ,得到大家的认可也是开心的 大家也可以关注下"转角遇到GitHub " 原文地址: https://mp.weixin.qq.com/s/QhOsBV2y5DXeC7yCCxH-uA 阅读全文
posted @ 2020-09-21 13:28 唯一客服系统开发笔记 阅读(225) 评论(0) 推荐(0) 编辑
摘要: 案例大部分都是用npm模式的,现在这个是使用cdn模式的更符合后端开发 html部分 , 注意template标签 ,定义上的id <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script src="ht 阅读全文
posted @ 2020-09-17 16:33 唯一客服系统开发笔记 阅读(1988) 评论(0) 推荐(0) 编辑
摘要: 使用标准库http来实现 package tools import ( "io/ioutil" "net/http" ) func Get(url string)string{ res, err :=http.Get(url) if err != nil { return "" } robots, 阅读全文
posted @ 2020-09-15 19:13 唯一客服系统开发笔记 阅读(5669) 评论(0) 推荐(0) 编辑
摘要: 字段类型是: `enterpriseId` int(10) unsigned DEFAULT NULL, `email` char(255) NOT NULL DEFAULT '',表的索引是: UNIQUE KEY `emailent` (`email`,`enterpriseId`), KEY 阅读全文
posted @ 2020-09-14 17:27 唯一客服系统开发笔记 阅读(716) 评论(0) 推荐(0) 编辑
摘要: 在开发GO小程序或者公众号接口的时候,需要对接微信消息的token签名验证 , 这时候需要开发者验证来自微信 , 并返回指定的字符串 微信文档里给的是PHP版本的代码 , 下面这个是go版本的代码 , 使用的gin框架 这个是入口的路由 ,根据自己的代码来写就可以 , 注意发来的是GET请求 pac 阅读全文
posted @ 2020-09-14 13:59 唯一客服系统开发笔记 阅读(1339) 评论(0) 推荐(0) 编辑
摘要: 分页功能几乎是每个项目里都会使用的功能,在使用gorm的前提下,下面这样实现分页. 前端使用的是elementui , 只需要返回两个参数就可以前端分页了 , 总页数和每页的条数 后端需要知道两个参数, 当前第几页和每页的条数 比如下面的代码: 里面的page是前端传过来的 , pagesize是配 阅读全文
posted @ 2020-09-11 11:55 唯一客服系统开发笔记 阅读(740) 评论(0) 推荐(0) 编辑
摘要: 表单中的某个表单域被设定为disabled,则该表单域的值就不会被提交。 但是我们需要提交这个里面的默认值,这个时候需要使用readonly 但是readonly的样式不好看,会不像禁用状态,需要增加下面两个样式就很像了 style="background: #ebebe4;cursor: not- 阅读全文
posted @ 2020-09-10 17:35 唯一客服系统开发笔记 阅读(383) 评论(0) 推荐(0) 编辑
摘要: 当初始化项目的时候,之前需要手动导入数据库sql文件,现在可以直接在命令行参数里输入go-fly install ,就可以把数据库文件导进去了 实现方式就是使用gorm执行sql文件里面的每行sql语句 读入sql文件后把字符串按照分号分隔,转成[]string ,然后再循环执行 实例代码是(自行更 阅读全文
posted @ 2020-09-08 21:56 唯一客服系统开发笔记 阅读(873) 评论(0) 推荐(0) 编辑
摘要: 最开始的解析命令行参数是使用的标准库里面的flag包,后来想增加新的参数的时候比较复杂和困难,因此使用cobra更加简单一些 比如执行go-fly server port 8081是运行项目 执行go-fly install是导入数据库 目录结构: 增加cmd目录,作为cmd包,代码中直接定义全局变 阅读全文
posted @ 2020-09-08 21:40 唯一客服系统开发笔记 阅读(369) 评论(0) 推荐(0) 编辑
摘要: 实现gofly客服的过程中遇到的问题 gorm在插入完成数据后,想要获取插入的自增id ,可以使用Create()方法执行插入,在结构体里直接就能获取到ID 例如下面这个User type User struct { Model Name string `json:"name"` Password 阅读全文
posted @ 2020-09-04 18:08 唯一客服系统开发笔记 阅读(6305) 评论(0) 推荐(1) 编辑
摘要: 整体的流程图如下: 访客首次访问是通过websocket ,注册成一个新的用户 ,websocket的连接存储在全局变量clientList这个map里面 , key就是访客id ,value是连接 客服登陆也是通过websocket,把连接存储在全局变量kefuList这个map里 , key是客 阅读全文
posted @ 2020-09-02 14:18 唯一客服系统开发笔记 阅读(666) 评论(0) 推荐(0) 编辑
摘要: 在做gofly客服的上传图片部分时,需要在gin框架中实现上传图片,并且限制文件的后缀 上传文件在gin中比较简单,就是在http处理函数里面调用c.SaveUploadedFile()就可以了 需要实现限制文件后缀,自动创建按照月份的上传目录,生成新的文件名字避免冲突被覆盖 完整代码如下 ,上传目 阅读全文
posted @ 2020-08-26 14:58 唯一客服系统开发笔记 阅读(3640) 评论(0) 推荐(0) 编辑
摘要: 简单原理: 选择一个值作为最小值,在后面的元素中找比它还小的值进行交换 //选择一个最小值,再寻找比它还小的进行交换 func SelectionSort(arr *[]int){ for i:=0;i<len(*arr);i++{ minIndex:=i for j:=i+1;j<len(*arr 阅读全文
posted @ 2020-08-25 21:56 唯一客服系统开发笔记 阅读(248) 评论(0) 推荐(0) 编辑
上一页 1 ··· 25 26 27 28 29 30 31 32 33 ··· 54 下一页