上一页 1 2 3 4 5 6 ··· 26 下一页
摘要:字段类型是: `enterpriseId` int(10) unsigned DEFAULT NULL, `email` char(255) NOT NULL DEFAULT '',表的索引是: UNIQUE KEY `emailent` (`email`,`enterpriseId`), KEY 阅读全文
posted @ 2020-09-14 17:27 陶士涵 阅读(87) 评论(0) 推荐(0) 编辑
摘要:在开发GO小程序或者公众号接口的时候,需要对接微信消息的token签名验证 , 这时候需要开发者验证来自微信 , 并返回指定的字符串 微信文档里给的是PHP版本的代码 , 下面这个是go版本的代码 , 使用的gin框架 这个是入口的路由 ,根据自己的代码来写就可以 , 注意发来的是GET请求 pac 阅读全文
posted @ 2020-09-14 13:59 陶士涵 阅读(78) 评论(0) 推荐(0) 编辑
摘要:分页功能几乎是每个项目里都会使用的功能,在使用gorm的前提下,下面这样实现分页. 前端使用的是elementui , 只需要返回两个参数就可以前端分页了 , 总页数和每页的条数 后端需要知道两个参数, 当前第几页和每页的条数 比如下面的代码: 里面的page是前端传过来的 , pagesize是配 阅读全文
posted @ 2020-09-11 11:55 陶士涵 阅读(104) 评论(0) 推荐(0) 编辑
摘要:表单中的某个表单域被设定为disabled,则该表单域的值就不会被提交。 但是我们需要提交这个里面的默认值,这个时候需要使用readonly 但是readonly的样式不好看,会不像禁用状态,需要增加下面两个样式就很像了 style="background: #ebebe4;cursor: not- 阅读全文
posted @ 2020-09-10 17:35 陶士涵 阅读(58) 评论(0) 推荐(0) 编辑
摘要:当初始化项目的时候,之前需要手动导入数据库sql文件,现在可以直接在命令行参数里输入go-fly install ,就可以把数据库文件导进去了 实现方式就是使用gorm执行sql文件里面的每行sql语句 读入sql文件后把字符串按照分号分隔,转成[]string ,然后再循环执行 实例代码是(自行更 阅读全文
posted @ 2020-09-08 21:56 陶士涵 阅读(68) 评论(0) 推荐(0) 编辑
摘要:最开始的解析命令行参数是使用的标准库里面的flag包,后来想增加新的参数的时候比较复杂和困难,因此使用cobra更加简单一些 比如执行go-fly server port 8081是运行项目 执行go-fly install是导入数据库 目录结构: 增加cmd目录,作为cmd包,代码中直接定义全局变 阅读全文
posted @ 2020-09-08 21:40 陶士涵 阅读(42) 评论(0) 推荐(0) 编辑
摘要:实现gofly客服的过程中遇到的问题 gorm在插入完成数据后,想要获取插入的自增id ,可以使用Create()方法执行插入,在结构体里直接就能获取到ID 例如下面这个User type User struct { Model Name string `json:"name"` Password 阅读全文
posted @ 2020-09-04 18:08 陶士涵 阅读(210) 评论(0) 推荐(0) 编辑
摘要:整体的流程图如下: 访客首次访问是通过websocket ,注册成一个新的用户 ,websocket的连接存储在全局变量clientList这个map里面 , key就是访客id ,value是连接 客服登陆也是通过websocket,把连接存储在全局变量kefuList这个map里 , key是客 阅读全文
posted @ 2020-09-02 14:18 陶士涵 阅读(86) 评论(0) 推荐(0) 编辑
摘要:在做gofly客服的上传图片部分时,需要在gin框架中实现上传图片,并且限制文件的后缀 上传文件在gin中比较简单,就是在http处理函数里面调用c.SaveUploadedFile()就可以了 需要实现限制文件后缀,自动创建按照月份的上传目录,生成新的文件名字避免冲突被覆盖 完整代码如下 ,上传目 阅读全文
posted @ 2020-08-26 14:58 陶士涵 阅读(179) 评论(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 陶士涵 阅读(50) 评论(0) 推荐(0) 编辑
摘要:下面代码放在models包下的users.go中 表结构和struct字段是一致的,把表字段的下划线变成首字母大写的驼峰命名 创建,查找,删除,更新用户,见下面的具体方法 package models import ( _ "github.com/jinzhu/gorm/dialects/mysql 阅读全文
posted @ 2020-08-24 18:20 陶士涵 阅读(83) 评论(0) 推荐(0) 编辑
摘要:随着互联网社会的急速发展,人们通过互联网搜索获取资讯仍然是主要的网络获取信息的方式。 通过百度搜索指定的关键词条目,把咱家自己的店铺信息,产品信息,或者其他任何宣传信息展示出来,可以直接吸引客户来消费,极大的扩展了客户渠道 比如下面这条信息: 如果客户搜索“临清出租铲车” “临清出租挖掘机”, 可以 阅读全文
posted @ 2020-08-24 18:12 陶士涵 阅读(55) 评论(0) 推荐(0) 编辑
摘要:登录界面如果要实现响应式 , 需要注意宽度的设置和media query的使用 宽度一般都是按百分比设置,当页面中百分比也满足不了的时候,可以使用media query区分出当前屏幕的宽度 根据不同的屏幕宽度设置不同的css 例如下面gofly的这个登录页 , 访问地址 : https://gofl 阅读全文
posted @ 2020-08-24 16:29 陶士涵 阅读(86) 评论(0) 推荐(0) 编辑
摘要:核心思路: 将数组分成已排序和待排序两部分,将一个元素从待排序插入到有序数组的适当位置,直到所有待排序都插入完成 把第一个元素作为已排序数组,将后面的元素依次与已排序元素从后往前进行比较,如果当前元素小于有序数组元素,有序数组元素往后挪1位,直到大于了就插入到有序数组元素后面 //插入排序 func 阅读全文
posted @ 2020-08-22 13:06 陶士涵 阅读(35) 评论(0) 推荐(0) 编辑
摘要:核心原理: 比较相邻的两个元素,较大的一个交换移动到右边 优化: 已经排好序的元素不再进行比较,减少比较次数 下面函数的变量flag 用于判断后续元素有无发生交换,没有发生交换的直接停止遍历 变量lastSwapIndex ,记录最后一次发生交换的位置,后续元素不再进行比较 //冒泡排序 func 阅读全文
posted @ 2020-08-22 12:59 陶士涵 阅读(51) 评论(0) 推荐(0) 编辑
摘要:原理很简单,就是用php输出一个header头,可以直接让浏览器下载文件 单元格内容用英文逗号分隔, 其中为了防止乱码,汉字部分会进行一个转码操作,从utf8转为gbk 为了使单元格看起来直观一点,会增加个\t ,这样就不会看的时候出现######### 比如下面这个把moveusers数组作为cs 阅读全文
posted @ 2020-08-21 16:25 陶士涵 阅读(131) 评论(0) 推荐(0) 编辑
摘要:快速排序思路: 1. 第一个数作为基准数,找到所有比基准数小的放在左边 ,找所有比基准数大的放右边 2.两个指针 ,一个从前往后 i,一个从后往前 j,i找到比基准数大的停下 , j找到比基准数小的停下 , 两个数调换位置,直到两数相遇 3.调换基准数与i/j位置 4.递归 , 从0到基准数位置 , 阅读全文
posted @ 2020-08-20 21:51 陶士涵 阅读(52) 评论(0) 推荐(0) 编辑
摘要:在使用长连接的过程中,如果有的长连接一直连着,想要杀掉这条连接可以使用tcpkill命令 安装tcpkill , tcpkill使用dsniff的一个小工具 apt install dsniff 使用过程: 比如连接服务端8082端口的这条连接 杀掉连接, 过滤规则类似tcpdump tcpkill 阅读全文
posted @ 2020-08-20 19:08 陶士涵 阅读(404) 评论(0) 推荐(0) 编辑
摘要:结论:count(*)>count(1)>count(主键id)>count(字段) 原因:count(*)单独做过优化,只扫描普通索引树,并且不会取值,按行累加count(1)遍历表放一个数字“1”进去,判断是不可能为空的,按行累加count(主键id)遍历表,解析数据把id值取出来,按行累加co 阅读全文
posted @ 2020-08-19 16:16 陶士涵 阅读(113) 评论(0) 推荐(0) 编辑
摘要:在执行go test命令的时候,如果是测试同一个包中的函数,需要把所涉及的文件都写在参数部分 例如: 涉及的文件不多,可以把文件都写上一同编译 如果涉及的文件太多,直接在包下执行go test 阅读全文
posted @ 2020-08-17 22:39 陶士涵 阅读(124) 评论(0) 推荐(0) 编辑
摘要:快速排序首先选一个基准(你也可以认为是要放到排序后数组正确位置的元素)pivot,然后将数组按照选取的基准 pivot 进行划分。而选取 pivot 的方式又有很多种,所以快速排序具有很多版本。 总是选择第一个元素作为基准 pivot;总是选择最后一个元素作为基准;(本文后续的实现就是依次为例)随机 阅读全文
posted @ 2020-08-17 22:26 陶士涵 阅读(61) 评论(0) 推荐(0) 编辑
摘要:gofly最近准备完善对外的js引用功能,类似很多知名客服系统那样直接引入js就可以使用,现在只是简单的实现了下 代码在github,可以在页面上看到, gofly地址在这里 https://gofly.sopans.com/ , 开发和部署方式在github的readme.md 首先要申请js权限 阅读全文
posted @ 2020-08-13 14:23 陶士涵 阅读(111) 评论(0) 推荐(0) 编辑
摘要:当需要实现守护进程 , 以及自己开发的命令自动崩溃重启时,可以使用go版本的supervisord , 比python版本依赖少一些 git clone https://github.com/ochinchina/supervisord.gitenv GOOS=linux GOARCH=amd64 阅读全文
posted @ 2020-08-11 10:18 陶士涵 阅读(93) 评论(0) 推荐(0) 编辑
摘要:在实现客服系统的过程中,需要有新消息的时候标题栏闪烁提示 因为聊天框是被iframe框进去的页面,所以在聊天框中收到websocket消息以后要把消息发送给父集页面,在父页面中闪烁标题 测试页面地址: https://gofly.sopans.com/ 子页面发送到父页面的实现是,在父页面增加消息监 阅读全文
posted @ 2020-07-28 11:08 陶士涵 阅读(76) 评论(0) 推荐(0) 编辑
摘要:当我们使用了websocket技术实现了实时的推送访客来到消息,但是我们只能随时看着页面不离开才能知道有访客来到 现在增加浏览器的通知消息,就可以只要打开着界面,不用一直盯着,干别的事去就可以了,有新消息会从右下角弹出来 测试地址如下,当有访客点击咨询按钮时,客服后台会弹出提示: https://g 阅读全文
posted @ 2020-07-27 15:51 陶士涵 阅读(114) 评论(0) 推荐(0) 编辑
摘要:我的域名是在阿里云万网上购买的,服务器是部署在腾讯云上,可以按照下面的步骤配置https 首先登陆阿里云网站控制台,申请免费证书,免费证书只能单一域名。测试地址如:https://gofly.sopans.com/ 申请稍等几分钟就能通过 把证书下载到本地,然后上传到腾讯云的服务器上,配置nginx 阅读全文
posted @ 2020-07-26 12:19 陶士涵 阅读(85) 评论(0) 推荐(0) 编辑
摘要:如果项目中需要有多语言的展示,类似网站中英文切换,可以使用下面这个方法来实现 主要思路就是,页面html内容展示的时候,不能固定写死在页面上,需要从控制器部分分配过来变量,展示输出这个变量 这个变量的内容来自一个结构体的成员,该结构体在创建实例的时候,可以根据传递参数的不同,实例的成员内容不同 实际 阅读全文
posted @ 2020-07-25 15:33 陶士涵 阅读(140) 评论(0) 推荐(0) 编辑
摘要:各个进程之间是共享 CPU 资源的,在不同的时候进程之间需要切换,让不同的进程可以在 CPU 执行,那么这个一个进程切换到另一个进程运行,称为进程的上下文切换。 进程是由内核管理和调度的,所以进程的切换只能发生在内核态。所以,进程的上下文切换不仅包含了虚拟内存、栈、全局变量等用户空间的资源,还包括了 阅读全文
posted @ 2020-07-09 11:55 陶士涵 阅读(264) 评论(0) 推荐(0) 编辑
摘要:update语句是如何执行 , 如何将执行后的新数据持久化在磁盘中 可以假设两种情境: 1. 假设MySQL在更新之后只更新内存中的数据就返回,然后再某一时刻进行IO将数据页持久化。这样所有操作都是在内存中,可以想象此时的MySQL性能是特别高的。但是,如果在更新完内存又还没有进行持久化的这段时间, 阅读全文
posted @ 2020-07-07 11:45 陶士涵 阅读(79) 评论(0) 推荐(0) 编辑
摘要:转载自鸟哥博客 , 原文地址: https://www.laruence.com/2020/06/27/5963.html PHP8 alpha1已经在昨天发布,相信关于JIT是大家最关心的,它到底怎么用,有什么要注意的,以及性能提升到底咋样? 首先,我们来看一张图: 左图是PHP8之前的Opcac 阅读全文
posted @ 2020-07-02 10:25 陶士涵 阅读(355) 评论(0) 推荐(0) 编辑
摘要:memcache作为key-value的内存缓存数据库 , 使用简单 , 运行稳定 , 在redis之前一直大量使用 , 新浪企邮webmail中也大量使用 共享session 在有多台后端负载服务器的情况下,php默认的文件存储session就不适用了,因为用户在访问的时候会访问到后端不同机器 , 阅读全文
posted @ 2020-07-01 11:12 陶士涵 阅读(56) 评论(0) 推荐(0) 编辑
摘要:基于GO语言实现的web客服即时通讯与客服管理系统。 1.使用gin http框架实现restful风格的API 2.使用jwt-go配合gin中间件实现无状态的jwt登陆认证 3.使用casbin配合gin中间件实现权限控制 4.使用gin以及template包的模板语法进行展示界面 5.使用go 阅读全文
posted @ 2020-06-28 21:42 陶士涵 阅读(335) 评论(0) 推荐(2) 编辑
摘要:php8的jit需要在编译opcache扩展的时候进行手动开启 比如我php8源码目录在此: /home/ubuntu/myphp/php-8.0.0alpha1/ext/opcache 执行 ./configure --enable-opcache-jit --with-php-config=/u 阅读全文
posted @ 2020-06-28 14:51 陶士涵 阅读(122) 评论(0) 推荐(0) 编辑
摘要:上次编译完php8 , 发现opcache扩展没有安装,那么就进入到源码目录下的ext目录执行phpize 比如我解压缩后的源码目录是 /home/ubuntu/myphp/php-8.0.0alpha1/ 进入 /home/ubuntu/myphp/php-8.0.0alpha1/ext/opca 阅读全文
posted @ 2020-06-27 11:21 陶士涵 阅读(187) 评论(0) 推荐(0) 编辑
摘要:在配置php的过程中经常遇到不知道php.ini文件在哪,以及不知道哪一个php.ini在起作用,改动了配置后依然不生效 可以有下面的方法去查找 php -i|grep php.ini strace -e open php -m 在这个命令里去查看php命令打开了哪个php.ini文件,非常的精确 阅读全文
posted @ 2020-06-27 11:17 陶士涵 阅读(287) 评论(0) 推荐(0) 编辑
摘要:nginx配置http块中增加 client_max_body_size 200m; php-fpm的php.ini配置文件中增加: upload_max_filesize = 200M 如果不知道fpm下的php.ini在哪,可以直接grep upload_max_filesize -R /etc 阅读全文
posted @ 2020-06-26 23:12 陶士涵 阅读(99) 评论(0) 推荐(0) 编辑
摘要:(麻烦各位转载请注明出处和地址:陶士涵的菜地 , 谢谢 --2020年6月28日) 所有操作需要在root用户下本机测试案例系统信息:ubuntu安装路径:/usr/local/php8 解压缩: wget https://downloads.php.net/~pollita/php-8.0.0al 阅读全文
posted @ 2020-06-26 20:14 陶士涵 阅读(1107) 评论(2) 推荐(1) 编辑
摘要:编译安装php时,如果--enable-mbstring , 开启了mbstring扩展,需要这个正则处理库 centos yum install http://rpms.remirepo.net/enterprise/7/remi/x86_64//oniguruma5-6.9.4-1.el7.re 阅读全文
posted @ 2020-06-26 19:08 陶士涵 阅读(115) 评论(0) 推荐(0) 编辑
摘要:据PHP官网的消息: PHP 8.0.0 Alpha 1可用于测试 2020年6月25日 PHP团队很高兴宣布PHP 8.0.0的第一个测试版本Alpha1。这将启动PHP 8.0的发布周期,其粗略概述在PHP Wiki中进行了指定。 有关PHP 8.0.0 Alpha 1的源代码下载,请访问下载页 阅读全文
posted @ 2020-06-26 12:28 陶士涵 阅读(350) 评论(0) 推荐(0) 编辑
摘要:默认的wireshark是不能监听到127.0.0.1的网络通信的 , 需要安装一个软件就可以了 先安装这个npcap , 他会卸载本地原来的wincap等 , 不需要管. https://nmap.org/npcap/#download 然后重新打开wireshark , 就可以看到下面这个 这个 阅读全文
posted @ 2020-06-24 11:53 陶士涵 阅读(221) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 ··· 26 下一页