摘要: Golang开发 1.GO语言基础 [日常] 搭建golang开发环境 [日常] Go语言圣经前言 [日常] Go语言圣经-声明,变量,赋值,类型,包和文件习题 [日常] Go语言圣经--作用域,基础数据类型,整型 [日常] Go语言圣经--浮点数习题 [日常] Go语言圣经--复数,布尔值,字符串 阅读全文
posted @ 2020-12-17 11:29 陶士涵 阅读(193) 评论(0) 推荐(0) 编辑
摘要: gin框架实现websocket服务非常简单,只需要升级一下http请求,就可以实现了 比如下面的控制器部分代码 //包级变量,升级器 var upgrader = websocket.Upgrader{} func init() { //初始化 upgrader = websocket.Upgra 阅读全文
posted @ 2021-10-28 18:24 陶士涵 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 当有验证需求是,传递的多个字段,必须有一个有值 这时候就可以使用required_without_all 来实现 $rules = [ 'student_id' => 'required_without_all:student_id,ucid|integer', 'ucid' => 'require 阅读全文
posted @ 2021-10-28 16:06 陶士涵 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 项目为了提升性能 需要select查询的时候,读取从库mysql数据 插入修改的时候,操作主库mysql数据 在laravel中只需要配置一下就可以实现 read就是从库的连接信息,write就是主库的连接信息,在.env里可以进行配置 'mysql' => [ 'driver' => 'mysql 阅读全文
posted @ 2021-10-28 15:28 陶士涵 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 还是因为上一个join优化的问题,项目使用laravel框架 但是框架自身的join()方法并不能使用 STRAIGHT_JOIN stackoverflow 同名问题,查到的方法 mysql - Is there a way to create a STRAIGHT_JOIN using Lara 阅读全文
posted @ 2021-10-27 17:31 陶士涵 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 在优化join查询的过程中 需要理解MySQL对多表连接的处理方式,首先MySQL优化器要确定以谁为驱动表,也就是说以哪个表为基准,在处理此类问题时,MySQL优化器采用了简单粗暴的解决方法:哪个表的结果集小,就以哪个表为驱动表,当然MySQL优化器实际的处理方式会复杂许多。 MySQL优化器选择小 阅读全文
posted @ 2021-10-27 16:48 陶士涵 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 项目里有条sql语句使用inner join 语句 但是在增加了order by 左表.字段 desc 后效率非常慢 查询explain 如下: 左表字段last_follow_time是有索引的,排序时但是并没有走索引,出现了Using temporary; Using filesort 这是因为 阅读全文
posted @ 2021-10-27 11:34 陶士涵 阅读(1) 评论(0) 推荐(0) 编辑
摘要: go中使用大括号{} 包起来的就是一个代码块,这里面定义的局部变量只在这个代码块中起作用 所有Go源文本的整体块,是全域代码块。 任何一个package都是一个所有package源文件包含的包块,也被称为package代码块。比如package model。 每一个源文件都是一个代码块,也被称为源码 阅读全文
posted @ 2021-10-27 10:13 陶士涵 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 当项目里面使用paginate()函数进行分页,并且使用了distinct函数进行去重 这个时候自动查询的count语句并没有增加distinct语句 需要指定好字段,这样就可以解决这个问题了 例如 ->distinct("xxxx.id"); 阅读全文
posted @ 2021-10-26 19:21 陶士涵 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 有时候我们需要记录下请求和响应的全部参数 这样可以方便排查问题 现在通过中间件的形式增加一个AccessLog的记录功能 app\Http\Middleware目录下增加AccessLog.php 文件 <?php namespace App\Http\Middleware; use Closure 阅读全文
posted @ 2021-10-26 18:11 陶士涵 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 当出现这种异常的时候 一般都是访问路由写错了 或者get/post访问方法错了 可以列出所有路由检查一下 php artisan route:list 阅读全文
posted @ 2021-10-26 11:04 陶士涵 阅读(5) 评论(0) 推荐(0) 编辑
摘要: 在开发在线客服代码GOFLY的时候,有用到很多全局变量 GO语言中全局变量的基本概念是这样的 在golang中,全局变量的生命周期属于整个包,这个和C不同,因为C语言没有包的概念。 在golang的main包中,main包定义的全局变量无法被其他包引用。 如果想使用全局变量,建议在其他包中定义并进行 阅读全文
posted @ 2021-10-26 10:06 陶士涵 阅读(5) 评论(0) 推荐(0) 编辑
摘要: 当进行布局的时候,有时候需要div元素根据屏幕的宽度和高度进行自适应,而不是根据内容 除了使用js方法之外,还可以使用css3的新单位 vh wh 1vh=视窗高度的1%,height: 100vh;就是屏幕高度的100% 1vw=视窗宽度的1%,width: 100vw;就是屏幕宽度的100% v 阅读全文
posted @ 2021-10-24 15:02 陶士涵 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 在开发GOFLY客服前端界面的过程中,实现下面这个效果主要是使用了css的 overflow-y属性 核心代码如下面的代码,设定高度,然后增加overflow-y: auto; <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" 阅读全文
posted @ 2021-10-24 14:24 陶士涵 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 开发websocket应用,最难处理的就是断线后的自动重连 现在GOFLY在线客服使用reconnect-websocket.js就可以非常简单轻松的实现断线重连 reconnect-websocket.js的机制是,当连接websocket服务的过程中,如果连不上,会自动进行指定次数的重试 如果连 阅读全文
posted @ 2021-10-23 17:47 陶士涵 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 当使用websocket服务实现在线客服系统GOFLY的时候 如果前端不发送心跳包,在go代码里读取websocket内容时会隔60秒断线一次 并且能看到日志里出现websocket 1006 (abnormal closure) 这个是因为nginx反代后端ws服务的时候,没有设置读取超时时间pr 阅读全文
posted @ 2021-10-23 16:03 陶士涵 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 在js代码里如果是使用的console.debug调试信息 那么需要在打开开发者工具后,选择输出级别,才会展示debug的信息 默认下面详细没勾,所以不会展示console.debug的信息 阅读全文
posted @ 2021-10-23 14:22 陶士涵 阅读(3) 评论(0) 推荐(0) 编辑
摘要: vue中的模板分隔符是{{ }} 两个大括号 但是在很多后端语言或者模板中,这个符号有可能被占用了,因此需要修改下 在vue2中可以使用 new Vue({ el: '#app', delimiters:["<{","}>"], 在vue3中需要使用这种方式 const App = { compil 阅读全文
posted @ 2021-10-23 13:56 陶士涵 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 当在实现在线客服系统的过程中,需要在初始化函数里进行一些初始操作 比如需要初始一些属性值,这个时候在created中进行的比较多 但是当使用一些组件的时候,需要html模板渲染完成后才能操作的,这个时候在mounted中进行操作 阅读全文
posted @ 2021-10-23 13:20 陶士涵 阅读(4) 评论(0) 推荐(0) 编辑
摘要: GOFLY在线客服的对话框样式是类似微信那样的有个小尖角的样式 可以:before :after 以及border-right-color等边框样式实现 demo如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <ti 阅读全文
posted @ 2021-10-22 10:18 陶士涵 阅读(6) 评论(0) 推荐(0) 编辑
摘要: 当有复杂sql语句的时候,我们需要执行原生sql语句,这样更加方便 比如下面的这条sql语句 //查询每天条数 type EveryDayNum struct { Day string `json:"day"` Num int64 `json:"num"` } func CountVisitorsE 阅读全文
posted @ 2021-10-17 15:30 陶士涵 阅读(53) 评论(0) 推荐(0) 编辑
摘要: 当有统计每天的数据条数的时候,可以直接一句sql语句实现 比如字段updated_at是时间日期格式,那么DATE_FORMAT(updated_at,'%Y-%m-%d') as day 配合group by day 就能实现 select DATE_FORMAT(updated_at,'%Y-% 阅读全文
posted @ 2021-10-17 15:25 陶士涵 阅读(9) 评论(0) 推荐(0) 编辑
摘要: 当使用mysql的时候 我们有时候需要进行特定的in查询,这个时候可能需要先把想要in的数据,拼接成一条逗号分割的数据 类似这样 select * from admin where id in (1,2,3) 这个时候可以通过sql语句操作一下,取出拼接好的1,2,3 select GROUP_CO 阅读全文
posted @ 2021-10-16 16:15 陶士涵 阅读(5) 评论(0) 推荐(0) 编辑
摘要: 当有数据导出需求的时候 我们直接写sql语句就能实现 但是有时候mysql中存储的数值太大了,在excel里面会变成科学计数法,如果超过了64位的话,那么还会丢失精度 需要在sql语句中concat 拼接一个\t 例如这样的sql里的 concat('\t',a.ding_userid), sele 阅读全文
posted @ 2021-10-16 11:49 陶士涵 阅读(8) 评论(0) 推荐(0) 编辑
摘要: 不需要安装输入法 直接按 win 键+ .点 或者 win键+ ;分号 你get了吗✔ 阅读全文
posted @ 2021-10-14 10:05 陶士涵 阅读(48) 评论(0) 推荐(0) 编辑
摘要: 在好几个月之前申请了下GOFLY在线客服系统的软件著作权 现在正式发证书了😎✌ 阅读全文
posted @ 2021-10-13 13:11 陶士涵 阅读(20) 评论(0) 推荐(0) 编辑
摘要: 经常在代码中我们需要实现数组排序,或者数组过滤,或者数组查找类似查找数据库一样的用法 可以使用collect $items=[ ["num"=>17,"status"=>0,"grade"=>5], ["num"=>17,"status"=>2,"grade"=>4], ["num"=>7,"sta 阅读全文
posted @ 2021-10-13 09:57 陶士涵 阅读(17) 评论(0) 推荐(0) 编辑
摘要: 这是因为数据库的超时时间比较短,连接被mysql服务关闭了 程序还在使用旧连接查询数据库 比如gorm 我们程序里设置下时间旧可以了,时间比超时时间短一些 DB.DB().SetConnMaxLifetime(59 * time.Second) DB, err = gorm.Open("mysql" 阅读全文
posted @ 2021-10-10 12:18 陶士涵 阅读(43) 评论(0) 推荐(0) 编辑
摘要: 有时候我项目里需要把时间格式化为xx秒前、xx分钟前、xx小时前等形式 可以使用下面这个函数 /** * 人性化时间 * @param {Object} timestamp */ function beautifyTime(timestamp){ var mistiming = Math.round 阅读全文
posted @ 2021-10-05 16:58 陶士涵 阅读(27) 评论(0) 推荐(0) 编辑
摘要: 在观察网站的访问者ua信息的时候 看到有很多AhrefsBot Mozilla/5.0 (compatible; AhrefsBot/7.0; +http://ahrefs.com/robot/) 官方网站的介绍总结就是一个对于我们国内用户无用的蜘蛛 什么是AhrefsBot? AhrefsBot 阅读全文
posted @ 2021-10-04 17:52 陶士涵 阅读(28) 评论(0) 推荐(0) 编辑
摘要: 公司多个项目公用一个redis 我这边死活获取不到数据 $selfInfo = Redis::connection('ucs')->hget( 'EMPL_BASEINFO', "5580120537497600" ); var_dump($selfInfo); 使用tcpdump查看端口的数据,才 阅读全文
posted @ 2021-09-28 17:55 陶士涵 阅读(19) 评论(0) 推荐(0) 编辑
摘要: os.Getwd返回的是当前路径 os.Executable返回的是临时文件的绝对路径 package tools import ( "log" "os" "testing" ) func TestOs(t *testing.T) { log.Println(os.Getwd()) log.Prin 阅读全文
posted @ 2021-09-28 10:16 陶士涵 阅读(39) 评论(0) 推荐(0) 编辑
摘要: 框架自身会给我们维护create_at和update_at字段 如果不存在这俩字段,更新数据库会报错 现在可以这样取消掉框架的维护 在model里面 public $timestamps = false; 阅读全文
posted @ 2021-09-27 19:26 陶士涵 阅读(18) 评论(0) 推荐(0) 编辑
摘要: 在go.mod文件里,有时候会出现// indirect ,这个意思是间接依赖 出现这个有两个原因 1.直接依赖为开启Module A的go.mod require ( B vx.x.x B1 vx.x.x // indirect B2 vx.x.x // indirect ) 2.直接依赖的go. 阅读全文
posted @ 2021-09-25 10:12 陶士涵 阅读(28) 评论(0) 推荐(0) 编辑
摘要: 这句话的意思是 从隐式的引入模块导入的 比如我使用某个第三方包,这个第三方包里面包含了validator 包 我在代码里直接使用了这个验证包,但是在go.mod里没有引入,代码里ide是不会报错的,因为能找到代码库,但是运行的时候会报错 这个时候只需要显示的引入一下就可以了 比如提示的go get 阅读全文
posted @ 2021-09-25 10:04 陶士涵 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 这是因为字段是int类型的,但是传递的默认值是'' 空字符串 应该传递个数字的默认值 解决 SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 阅读全文
posted @ 2021-09-24 11:32 陶士涵 阅读(81) 评论(0) 推荐(0) 编辑
摘要: 扩展下载地址:http://pecl.php.net/package/rdkafka 根据自己的版本选择,比如我是php7.4.3nts ,windows系统 一定要注意 把librdkafka.dll 放入php.exe所在的目录 把php_rdkafka.dll 放入ext目录 就可以按照php 阅读全文
posted @ 2021-09-18 18:29 陶士涵 阅读(17) 评论(0) 推荐(0) 编辑
摘要: 当连接数据库报,too many connection的时候 大概是数据库的连接数被占满了 检查哪些服务在长连接占满数据库的连接数,关掉应该就可以了 查看数据库的最大连接数 show variables like '%max_connection%'; 查看所有用户的当前连接 show full p 阅读全文
posted @ 2021-09-16 20:02 陶士涵 阅读(21) 评论(0) 推荐(0) 编辑
摘要: laravel 验证请求参数,有自带的规则,如果有特殊的规则,可以自己写正则验证逻辑 比如验证手机号 在控制器文件中可以直接这样编写 默认情况下,如果验证通过,你的代码会继续正常运行。如果验证失败,则会抛出异常,并自动将对应的错误响应返回给用户。 在传统 HTTP 请求下,会生成一个重定向响应, 而 阅读全文
posted @ 2021-09-16 16:27 陶士涵 阅读(17) 评论(0) 推荐(0) 编辑
摘要: kafka官方介绍是分布式的流处理平台,理解上比较难。先简单理解为一种分布式的支持发布订阅的高可用消息队列 kafka通过topic(主题) 对数据分类,每条记录包含:一个key,一个value,一个时间戳 核心概念:一串流的记录topic,一个topic可以有一个或者多个消费者来订阅 topic数 阅读全文
posted @ 2021-09-16 10:28 陶士涵 阅读(12) 评论(0) 推荐(0) 编辑
摘要: 优质奶源地: 南北纬40-50度是优质奶源地,欧洲,新西兰,荷兰,爱尔兰,瑞士,德国,法国,阿根廷,中国黑龙江,中国内蒙古 DHA,ARA含量,高 乳铁蛋白含量,高 含有OPO配方,高 奶粉成分: 三大营养素,蛋白质,脂肪,碳水化合物,必须的维生素和矿物质 高端奶粉和低端奶粉的最主要的区别是:是否有 阅读全文
posted @ 2021-09-15 10:37 陶士涵 阅读(10) 评论(0) 推荐(0) 编辑