摘要:Golang开发 1.GO语言基础 [日常] 搭建golang开发环境 [日常] Go语言圣经前言 [日常] Go语言圣经-声明,变量,赋值,类型,包和文件习题 [日常] Go语言圣经--作用域,基础数据类型,整型 [日常] Go语言圣经--浮点数习题 [日常] Go语言圣经--复数,布尔值,字符串 阅读全文
posted @ 2020-12-17 11:29 陶士涵 阅读(119) 评论(0) 推荐(0) 编辑
摘要:默认情况下PHP对象是引用传递 , 这不是完全正确的 , 原因是: 效果上和引用的效果差不多 , 默认情况下是对同一个标识符的拷贝 PHP 的引用是别名,就是两个不同的变量名字指向相同的内容。 在 PHP 5,一个对象变量已经不再保存整个对象的值。只是保存一个标识符来访问真正的对象内容。 当对象作为 阅读全文
posted @ 2021-06-03 10:45 陶士涵 阅读(7) 评论(0) 推荐(0) 编辑
摘要:(?:pattern) ()表示捕获分组,()会把每个分组里的匹配的值保存起来,从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推 (?:)表示非捕获分组,和捕获分组唯一的区别在于,非捕获分组匹配的值不会保存起来 import re a = "123abc456ww" 阅读全文
posted @ 2021-06-02 14:30 陶士涵 阅读(9) 评论(0) 推荐(0) 编辑
摘要:正常的传递key value的post数据时候 , 设置的content-type是 application/x-www-form-urlencoded 内容是 key=value&key2=value2 如果是multipart/form-data 这种一般需要在content-type的时候指定 阅读全文
posted @ 2021-05-28 16:41 陶士涵 阅读(13) 评论(0) 推荐(0) 编辑
摘要:ubuntu系统下,先安装ngx_http_image_filter_module这个模块 先看看自己的源 cat /etc/apt/sources.list.d/nginx-stable.list deb http://nginx.org/packages/ubuntu/ xenial nginx 阅读全文
posted @ 2021-05-23 18:11 陶士涵 阅读(7) 评论(0) 推荐(0) 编辑
摘要:我的在线客服系统 go gin服务出现了大量的 too many open files 错误 , 这时候服务也是连不上的 前端接口的显示就是504 , 超出了nginx设置的超时时间 通过lsof -p 进程id 可以看到打开的文件数量已经1031个了 , 说明了超出了单进程打开文件的限制默认102 阅读全文
posted @ 2021-05-19 16:10 陶士涵 阅读(22) 评论(0) 推荐(0) 编辑
摘要:我开发的某个服务出现这个状态 , 出现了大量的close_wait , 占满了单进程的连接数1024 tcp连接关闭的时候 , 会有几种状态转移 close_wait的大量出现 , 这个是说明我们是被动关闭 , 并且被动关闭后 , 我们的程序没有把连接关闭掉 , 造成连接泄露了 我在做gofly在线 阅读全文
posted @ 2021-05-19 15:45 陶士涵 阅读(16) 评论(0) 推荐(0) 编辑
摘要:当在nginx里面使用变量的时候 可能会有变量拼接的需求 , 不管是多个变量还是一个变量和其他字符串 都可以这样来实现 set $allUrl "${host}${request_uri}"; $host和 $request_uri 都是内置变量 拼接在一起的话 , 使用这个set指令 当需要使用i 阅读全文
posted @ 2021-05-19 11:20 陶士涵 阅读(48) 评论(0) 推荐(0) 编辑
摘要:常用内置变量 , 有时候在使用nginx排查问题 , 或者进行各种操作的时候 , 都有用处 以下仅列出一些常用变量,更多变量请到nginx官网查阅 http://nginx.org/en/docs/varindex.html 1. 从请求行中解析的变量 以访问http://localhost:80/ 阅读全文
posted @ 2021-05-19 11:00 陶士涵 阅读(15) 评论(0) 推荐(0) 编辑
摘要:tshark是wireshark包的linux命令行版 有时候我们想看看具体的协议细节 , 如果是使用的tcpdump 那么还需要把数据下载到本地 , 用wireshark看 这个时候就可以使用tshark apt install tshark centos下直接安装wirekshark , yum 阅读全文
posted @ 2021-05-17 14:16 陶士涵 阅读(24) 评论(0) 推荐(0) 编辑
摘要:首先有github仓库 , 仓库的结构可以是这样 composer.json文件可以类似这样 { "name": "taoshihan/php-router", "license": "Apache-2.0", "description": "php simple router", "type": 阅读全文
posted @ 2021-05-14 18:15 陶士涵 阅读(11) 评论(0) 推荐(0) 编辑
摘要:当初始化一个github项目的时候 按照github提示执行到 git branch -M main 返回错误: error: refname refs/heads/master not found 解决: 先 git add . git commit -m "init" 然后在执行 git bra 阅读全文
posted @ 2021-05-14 17:41 陶士涵 阅读(61) 评论(0) 推荐(0) 编辑
摘要:当想要初始化一个php项目的时候 , 或者想要开发一个类库给别人使用的时候 都需要一个composer.json文件 直接在项目目录输入 composer init 按照引导就可以生成了 , 详细的引导解释如下 This command will guide you through creating 阅读全文
posted @ 2021-05-14 17:35 陶士涵 阅读(40) 评论(0) 推荐(0) 编辑
摘要:websocket在连接的时候 , 受网络影响 或者长时间没有通信被服务端关闭 , 都需要断线重连机制 自己写断线重连比较麻烦 , 可以使用这个js库 ReconnectingWebSocket.js https://github.com/joewalnes/reconnecting-websock 阅读全文
posted @ 2021-05-14 16:57 陶士涵 阅读(23) 评论(0) 推荐(0) 编辑
摘要:判断浏览器是否支持localStorge 判断浏览器是否为无痕模式 简单的json 编码 //存储localStorge function setLocalStorage(key,obj){ if(!navigator.cookieEnabled||typeof window.localStorag 阅读全文
posted @ 2021-05-14 11:14 陶士涵 阅读(17) 评论(0) 推荐(0) 编辑
摘要:用户体系是这样的 , 企业 > 用户 企业 ,验证总开关 , 企业开启了验证 , 用户必须验证 企业没有开启验证 , 用户有个人开关 , 用户可以自己决定是否开启 流程时序: 1. 前端调用接口 /addSetting 2. 后端验证开关 , 未开直接通过 3. 后端验证是否已经验证通过了 , 已验 阅读全文
posted @ 2021-05-14 10:23 陶士涵 阅读(11) 评论(0) 推荐(0) 编辑
摘要:测试发现 , 如果设置了left 或right , 如果想要居中那么 left:0px; right:0px; margin:0 auto; 如果没有设置过 , 只有bottom或top 那么它就是跟着父元素来的 , 如果父元素居中 , 它也居中 阅读全文
posted @ 2021-05-13 23:57 陶士涵 阅读(19) 评论(0) 推荐(0) 编辑
摘要:当想要在一个输入框上实现回车就发送的功能的时候 , 需要给输入框增加回车事件 当想要在输入框实现点击或者当前焦点,失去焦点,调用某些函数,实现某些功能时 可以按这样 <el-input @focus="textareaFocus" @blur="textareaBlur" v-model="mess 阅读全文
posted @ 2021-05-13 23:30 陶士涵 阅读(40) 评论(0) 推荐(0) 编辑
摘要:主要是通过把url中?后半部分取出,&分割为数组 调用数组的map函数 , map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。 function getQuery(key) { var query = window.location.search.substring(1) 阅读全文
posted @ 2021-05-13 23:07 陶士涵 阅读(16) 评论(0) 推荐(0) 编辑
摘要:有时候需要看下进程的内存占了多少了 可以使用我这句shell , 能查看每个想看的进程以及 , 内存总和 红色部分是我的进程 , 这里可以根据自己的需求来 while true;do clear;date;ps aux|grep go-fly-pro|grep -v grep|awk 'BEGAIN 阅读全文
posted @ 2021-05-13 17:23 陶士涵 阅读(22) 评论(0) 推荐(0) 编辑
摘要:如果有将xml转成数组或对象的功能 , 可以使用这个函数比较简单 $obj=simplexml_load_string($xml,'SimpleXMLElement', LIBXML_NOCDATA | LIBXML_NOBLANKS); $json=json_decode(json_encode( 阅读全文
posted @ 2021-05-13 16:52 陶士涵 阅读(17) 评论(0) 推荐(0) 编辑
摘要:当条件里有and 或者 or 这俩字段都有单独的索引 , 可以进行单独的搜索 , 然后索引合并结果 , 再去聚簇索引查找 MySQL5.0之前,一个表一次只能使用一个索引,无法同时使用多个索引分别进行条件扫描。但是从5.1开始,引入了 index merge 优化技术,对同一个表可以使用多个索引分别 阅读全文
posted @ 2021-05-13 16:47 陶士涵 阅读(12) 评论(0) 推荐(0) 编辑
摘要:在RR可重复读隔离级别下 , InnoDB存储引擎 当用范围条件而不是相等条件检索数据 , 并执行update或者delete操作 会把符合条件的范围 , 包括条件里面不存在的记录加上间隙锁 当其他事务往这个范围内插入记录时 , 会把阻塞 例子: 事务A set autocommit=0; //关闭 阅读全文
posted @ 2021-05-13 10:19 陶士涵 阅读(21) 评论(0) 推荐(0) 编辑
摘要:比如某个点击事件 , 两秒才能点一次 var ms= 1000*2; var lastClick = Date.now() - ms; $("a,div,p,li").click(function(){ if (Date.now() - lastClick >= ms) { lastClick = 阅读全文
posted @ 2021-05-12 23:11 陶士涵 阅读(12) 评论(0) 推荐(0) 编辑
摘要:当使用apt install php 安装完新版php以后 直接输入 php -v 结果显示仍然为旧版 是因为安装的时候 , 默认把新版php8安装到了 /usr/bin/php8.0 直接输入 /usr/bin/php8.0 -v是可以找到的 首先使用whereis php 查看旧版的是哪个 然后 阅读全文
posted @ 2021-05-12 17:16 陶士涵 阅读(24) 评论(0) 推荐(0) 编辑
摘要:好长时间没有用过composer , 现在都已经到了2.几了 , 如果用旧版的就会报错 windows下尽量用那个exe的安装器 , 这样就不需要设置环境变量了 , 而且winddows下需要bat的那几个脚本 , 用这个就更方便了 https://getcomposer.org/download/ 阅读全文
posted @ 2021-05-12 15:59 陶士涵 阅读(17) 评论(0) 推荐(0) 编辑
摘要:现在有这样两种赋值方式 a := (*interface{})(nil) var c interface{} c = (*interface{})(nil) a现在是啥 ? (*interface{})(nil) 意思是把nil 类型转换为 *interface{}类型 a相当于 var a *in 阅读全文
posted @ 2021-05-11 13:20 陶士涵 阅读(30) 评论(0) 推荐(0) 编辑
摘要:CPU是有高速缓存的 , 三级缓存分别是 L1 , L2 , L3 L1缓存最贴近CPU , 所以速度也最快 数据在缓存中是一行一行存储的 , L1缓存一般的一行缓存64字节 一行能缓存64个字节 , 因为一个变量可能没有64字节大小 , 所以可能会缓存好几个变量 缓存需要保证一致性, 也就是当变量 阅读全文
posted @ 2021-05-11 10:07 陶士涵 阅读(12) 评论(0) 推荐(0) 编辑
摘要:当对同一个资源进行并发操作时 , 非常需要保证并发安全 , 常见的并发控制手段演进如下 锁 : 操作数据前锁定 , 操作后释放 , 但是这样就相当于串行化了 , 并发度不高 读写锁 : 读数据的时候加读锁 , 不妨碍其他读 , 只有修改的时候加写锁 , 这时会妨碍其他的读和写操作 数据多版本 : 操 阅读全文
posted @ 2021-05-11 09:47 陶士涵 阅读(12) 评论(0) 推荐(0) 编辑
摘要:计算机在表示数的时候 , 是二进制 , 如果是4位 对于正整数, 很简单就是 , 所有的位都是1表示最大的正整数15 但是对于负数 , 需要最高位用来表示正负符号 , 1是负数 , 0 是正数 所以4位的有符号整数最大是7 8位的是整数最大是 127 最小是-128 原始的二进制是原码 , 除了符号 阅读全文
posted @ 2021-05-10 16:49 陶士涵 阅读(44) 评论(0) 推荐(0) 编辑
摘要:当使用PProf不是太详细的时候就可以使用 trace来查看跟踪了 这个命令可以配合PProf 先把trace文件下载下来 curl http://域名/debug/pprof/trace?seconds=20 > trace.out 使用 go tool trace C:\Users\shihan 阅读全文
posted @ 2021-05-10 11:12 陶士涵 阅读(63) 评论(0) 推荐(0) 编辑
摘要:PProf 是以 profile.proto来分析数据 可以采集程序执行时候的命令分析 可以采集HTTP服务时的运行时数据分析 可以通过go test 测试用例分析 有下面这些监控分析功能: CPU 分析 , 内存分析 , 阻塞分析 , 互斥锁分析 , Groutine分析 如果是http服务 , 阅读全文
posted @ 2021-05-10 10:44 陶士涵 阅读(25) 评论(0) 推荐(0) 编辑
摘要:切片有个长度和容量两个参数 , 当长度超过容量的时候 , 容量会扩容2倍 当容量大于1024个的时候,容量会扩容为原来的1.25倍 从下面的代码中可以看得到 当增加新的元素的时候,超过了容量,但是容量大小小于1024的时候 , 是2倍扩容 当新增元素 , 超过了容量 , 并且容量大于1024 , 是 阅读全文
posted @ 2021-05-08 18:19 陶士涵 阅读(38) 评论(0) 推荐(0) 编辑
摘要:如果在一个页面上引入了多个jquery , 并且不能去掉的时候 , 或者$函数和自己的函数冲突的时候 可以使用这样的方式来解决 在引入jquery的后面加入 , 类似下面这样 <script src="https://cdn.jsdelivr.net/npm/jquery/dist/jquery.m 阅读全文
posted @ 2021-05-08 15:56 陶士涵 阅读(15) 评论(0) 推荐(0) 编辑
摘要:为了提升网络的处理能力 , 出现了I/O多路复用技术 比如常见的 select poll epoll Reactor 模型就是对上面I/O多路复用的封装 一般常使用如下几个组合使用方式: 单Reactor 单进程/线程 单Reactor 多进程/线程 多Reactor 多进程/线程 单Reactor 阅读全文
posted @ 2021-05-08 11:47 陶士涵 阅读(25) 评论(0) 推荐(0) 编辑
摘要:网络模型从最简单到后面的演进是这样的: 1. 普通socket模型 2. 多进程模型 3. 多线程模型 4. I/O多路复用 select poll 5. I/O多路复用 epoll 普通socket模型: 1对1的同步阻塞通信 , 一个进程只能处理一个连接 , 其他连接无法处理 多进程模型: 主进 阅读全文
posted @ 2021-05-08 11:15 陶士涵 阅读(21) 评论(0) 推荐(0) 编辑
摘要:当在代码中使用了第三方库 ,但是go.mod中并没有跟着更新的时候 如果直接run或者build就会报这个错误 missing go.sum entry for module providing package <package_name> 可以使用go mod tidy 来整理依赖 这个命令会: 阅读全文
posted @ 2021-05-07 22:58 陶士涵 阅读(722) 评论(0) 推荐(0) 编辑
摘要:我们使用空接口 interface{} 可以接收任何类型的值 拿到以后我们还需要类型断言把类型转换回原始类型 ,空接口可以存储指针变量 , 也可以存储具体类型 断言回原始类型后有这样区别 如果是具体类型 , 直接赋值会报错 " cannot assign to xxxxx" 因为这时候是一个拷贝后的 阅读全文
posted @ 2021-05-07 15:51 陶士涵 阅读(16) 评论(0) 推荐(0) 编辑
摘要:go 1.16开始提供了embed指令 , 可以将静态资源嵌入到编译包里面 这样就可以把网页模板等文件直接打包了,就不需要每次还要拷贝静态文件 常规用法: import _ "embed" //go:embed hello.txt var s string func main() { print(s 阅读全文
posted @ 2021-05-07 11:43 陶士涵 阅读(62) 评论(0) 推荐(0) 编辑
摘要:Golang中的Map是一个键值对的数据结构 底层是一个哈希表,核心数据结构是数组+链表 哈希表自然会有哈希函数,通过一个哈希函数将key映射到哈希表的一个位置, 有哈希函数就会有哈希冲突 Golang是使用数组+链地址法解决哈希冲突,当多个key映射到同一位置的时候,会把冲突的key链接起来 形成 阅读全文
posted @ 2021-05-06 20:00 陶士涵 阅读(15) 评论(0) 推荐(0) 编辑
摘要:比如批量群发邮件的功能 因为发送邮件是个比较耗时的操作, 如果是传统的一个个执行 , 总体耗时比较长 可以使用golang实现一个协程池 , 并行发送邮件 pool包下的pool.go文件 package pool import "log" //具体任务,可以传参可以自定义操作 type Task 阅读全文
posted @ 2021-04-30 15:06 陶士涵 阅读(53) 评论(0) 推荐(0) 编辑