摘要:
为了提升网络的处理能力 , 出现了I/O多路复用技术 比如常见的 select poll epoll Reactor 模型就是对上面I/O多路复用的封装 一般常使用如下几个组合使用方式: 单Reactor 单进程/线程 单Reactor 多进程/线程 多Reactor 多进程/线程 单Reactor
阅读全文
posted @ 2021-05-08 11:47
唯一客服系统开发笔记
阅读(245)
推荐(0)
摘要:
网络模型从最简单到后面的演进是这样的: 1. 普通socket模型 2. 多进程模型 3. 多线程模型 4. I/O多路复用 select poll 5. I/O多路复用 epoll 普通socket模型: 1对1的同步阻塞通信 , 一个进程只能处理一个连接 , 其他连接无法处理 多进程模型: 主进
阅读全文
posted @ 2021-05-08 11:15
唯一客服系统开发笔记
阅读(130)
推荐(0)
摘要:
当在代码中使用了第三方库 ,但是go.mod中并没有跟着更新的时候 如果直接run或者build就会报这个错误 missing go.sum entry for module providing package <package_name> 可以使用go mod tidy 来整理依赖 这个命令会:
阅读全文
posted @ 2021-05-07 22:58
唯一客服系统开发笔记
阅读(13749)
推荐(1)
摘要:
我们使用空接口 interface{} 可以接收任何类型的值 拿到以后我们还需要类型断言把类型转换回原始类型 ,空接口可以存储指针变量 , 也可以存储具体类型 断言回原始类型后有这样区别 如果是具体类型 , 直接赋值会报错 " cannot assign to xxxxx" 因为这时候是一个拷贝后的
阅读全文
posted @ 2021-05-07 15:51
唯一客服系统开发笔记
阅读(250)
推荐(0)
摘要:
go 1.16开始提供了embed指令 , 可以将静态资源嵌入到编译包里面 这样就可以把网页模板等文件直接打包了,就不需要每次还要拷贝静态文件 常规用法: import _ "embed" //go:embed hello.txt var s string func main() { print(s
阅读全文
posted @ 2021-05-07 11:43
唯一客服系统开发笔记
阅读(945)
推荐(0)
摘要:
Golang中的Map是一个键值对的数据结构 底层是一个哈希表,核心数据结构是数组+链表 哈希表自然会有哈希函数,通过一个哈希函数将key映射到哈希表的一个位置, 有哈希函数就会有哈希冲突 Golang是使用数组+链地址法解决哈希冲突,当多个key映射到同一位置的时候,会把冲突的key链接起来 形成
阅读全文
posted @ 2021-05-06 20:00
唯一客服系统开发笔记
阅读(346)
推荐(0)
摘要:
比如批量群发邮件的功能 因为发送邮件是个比较耗时的操作, 如果是传统的一个个执行 , 总体耗时比较长 可以使用golang实现一个协程池 , 并行发送邮件 pool包下的pool.go文件 package pool import "log" //具体任务,可以传参可以自定义操作 type Task
阅读全文
posted @ 2021-04-30 15:06
唯一客服系统开发笔记
阅读(319)
推荐(0)
摘要:
ps aux 可以看到进程的详细信息 配合grep 和 awk 命令 方便的查看内存 比如查看mysql使用的内存 ,占用246 M ps aux|grep mysql|awk '{print $6/1014 "M" "\t" $0}' 配合while循环实时查看内存情况 while true;do
阅读全文
posted @ 2021-04-29 22:19
唯一客服系统开发笔记
阅读(1773)
推荐(0)
摘要:
grep可以在排查日志时获取关键字那一行 有时候想要看到前后几行的信息 获取前后10行信息 grep -C 10 xxxx 获取后10行信息 grep -A 10 xxxx 获取前10行信息 grep -B 10 xxxx
阅读全文
posted @ 2021-04-29 14:22
唯一客服系统开发笔记
阅读(3234)
推荐(0)
摘要:
map不是并发安全的 , 当有多个并发的groutine读写同一个map时 会出现panic错误 concurrent map writes 例如下面的代码会出现这个错误: var mMap map[int]int func TestMyMap(t *testing.T) { mMap = make
阅读全文
posted @ 2021-04-29 13:54
唯一客服系统开发笔记
阅读(1491)
推荐(0)
摘要:
同一个struct的2个实例能不能比较 == !=答案:可以能、也可以不能 两个不同的struct的实例能不能比较 == !=答案:可以能、也可以不能 如果结构体的所有成员变量都是可比较的,那么结构体就可比较如果结构体中存在不可比较的成员变量,那么结构体就不能比较 type s2 struct {
阅读全文
posted @ 2021-04-29 10:39
唯一客服系统开发笔记
阅读(395)
推荐(0)
摘要:
空接口 interface{} 可以存储任何类型的数据 但是在和slice以及map配合时 ,要注意 []interface{} 或者 map[string]interface{} 可能会犯这样的错误 cannot use (type []string) as type []interface {}
阅读全文
posted @ 2021-04-28 19:21
唯一客服系统开发笔记
阅读(5711)
推荐(0)
摘要:
在很多启动脚本里开头看到有 set -e 这个的作用是当有命令错误时 , 直接停止执行下面的命令 例如: /ssss命令不存在报错后 , 这样会继续往下执行到 输出2222 加上后就不会执行下面的了
阅读全文
posted @ 2021-04-28 18:21
唯一客服系统开发笔记
阅读(326)
推荐(0)
摘要:
当执行go test某一个指定函数时报:testing: warning: no tests to run 例如 go test -v -run Mytest 测试文件名字必须是这个_test后缀 xxxx_test.go 如果不是指定函授运行 , 那么测试函数必须是Test开头 例如下面这个文件才
阅读全文
posted @ 2021-04-28 15:59
唯一客服系统开发笔记
阅读(1514)
推荐(0)
摘要:
go for range循环map是无序的 , 这个是go team团队 有意为之 在进行循环遍历的时候 , 生成了一个随机数作为遍历开始的位置 可以for range循环map取出所有的key , sort.Strings(keys) , 排序所有的keys 再循环所有的keys , 按这个循环取
阅读全文
posted @ 2021-04-28 14:29
唯一客服系统开发笔记
阅读(637)
推荐(0)
摘要:
因为docker官方不支持 32位的系统 , 只支持amd64等 64位的系统 所以可以使用ubuntu 官方维护的版本 , 安装更简单 apt install docker.io 这个就是git上有人问的问题
阅读全文
posted @ 2021-04-27 16:33
唯一客服系统开发笔记
阅读(852)
推荐(0)
摘要:
使用git的时候 , 如果我们在自己的工作区中修改了代码 , 既没有git add , 更没有git checkout , 想要恢复成修改之前的样子 用 git checkout git checkout 文件 , 恢复某个文件
阅读全文
posted @ 2021-04-27 14:18
唯一客服系统开发笔记
阅读(771)
推荐(0)
摘要:
DEPENDENT SUBQUERY:子查询中的第一个SELECT,取决于外面的查询 , 注意如果外部查询的结果集数量比较大, 比如几十万上百万,就会执行几十万上百万次子查询,必然造成慢查。 很多使用子查询的人 想当然的认为 子查询会由内到外,先完成子查询的结果, 然后在用子查询来驱动外查询的表,完
阅读全文
posted @ 2021-04-26 14:45
唯一客服系统开发笔记
阅读(983)
推荐(0)
摘要:
group by 的原理是 先把数据根据分组字段 , 分好组 , 然后再每个分组里面执行具体的聚合操作 ONLY_FULL_GROUP_BY模式的限制是: SELECT list is not in GROUP BY clause and contains nonaggregated column
阅读全文
posted @ 2021-04-26 11:24
唯一客服系统开发笔记
阅读(580)
推荐(0)
摘要:
mysql 5.7及以上版本 , 在进行group by时 , 查询到的所有的列都要在group by字段里 , 这很明显不符合我们的目的 解决1: 没有参与分组的字段, 使用ANY_VALUE()函数包括 解决2: 临时取消ONLY_FULL_GROUP_BY 模式 select @@global
阅读全文
posted @ 2021-04-26 10:35
唯一客服系统开发笔记
阅读(691)
推荐(1)
摘要:
在go语言中查看所有执行的init函数 , 可以使用这个环境变量 linux下可以直接执行 GODEBUG=inittrace=1 具体命令 winddows下 set GODEBUG=inittrace=1 在执行命令
阅读全文
posted @ 2021-04-25 17:35
唯一客服系统开发笔记
阅读(201)
推荐(0)
摘要:
只要导入了包 , 那么该包的init函数就会执行 , 执行的顺序和优先级为下面这种图 有点类似函数栈 , 先执行最后导入包的init函数
阅读全文
posted @ 2021-04-25 16:58
唯一客服系统开发笔记
阅读(685)
推荐(0)
摘要:
os.Args是个[]string 里面存着路径和全部参数 直接拼接一下就获取到完整路径了 func GetAllExecutePath()string{ allPath:="" for _,arg:=range os.Args{ allPath+=" "+arg } return allPath
阅读全文
posted @ 2021-04-23 19:02
唯一客服系统开发笔记
阅读(284)
推荐(0)
摘要:
在自己的电脑修改了PATH环境变量 , 但是goland terminal不更新 goland只在开机启动的时候会去读取系统的PATH环境变量 1.可以重启电脑解决 2.手动在terminal中设置一下PATH
阅读全文
posted @ 2021-04-23 17:35
唯一客服系统开发笔记
阅读(744)
推荐(0)
摘要:
下载符合自己系统版本的压缩包 https://sourceforge.net/projects/mingw-w64/files/mingw-w64/ 我是64位 , 下载这个版本 直接解压以后 , 把bin目录放入 PATH环境变量就行了 如果是使用的goland ide 开发 要重启goland
阅读全文
posted @ 2021-04-23 17:27
唯一客服系统开发笔记
阅读(3376)
推荐(1)
摘要:
linux下可以使用 kill 进程id 来杀死一个运行中的进程 windows下可以使用 taskkill.exe /f /pid 进程id 平常可能我们不会使用这样的命令来杀死进程 但是在写代码的过程中如果想在代码里kill进程 就可以使用这个方式了 比如下面的go代码 var command
阅读全文
posted @ 2021-04-23 16:31
唯一客服系统开发笔记
阅读(914)
推荐(0)
摘要:
go test 可以执行单元测试 , 一般把所有go文件测试单元都执行一遍 现在如果想要执行某一个指定的测试函数 , 可以像这样 go test -v -run 测试函数名字 例如: rpc_test.go package tools import ( "go-fly-muti/frpc" "tes
阅读全文
posted @ 2021-04-22 19:19
唯一客服系统开发笔记
阅读(3673)
推荐(0)
摘要:
在项目里很多时候需要用icon , 如果不想用图片 , 可以用一下这个图标库 https://github.com/saeedalipoor/icono 使用很简单 <link rel="stylesheet" href="icono.min.css"> 引入后直接加class就ok了 例如我项目中
阅读全文
posted @ 2021-04-22 16:54
唯一客服系统开发笔记
阅读(1902)
推荐(0)
摘要:
先上结论 , php的索引数组不是传统的从0开始的整数索引数组 , 而是一个关联数组 , 是一个有序的键值对 ,这个序就是定义时候的顺序 $arr=array('a','b') $arr[0] 这个的输出肯定是 a $arr=array(1=>'a',0=>'b') $arr[0] 输出b 说明ph
阅读全文
posted @ 2021-04-22 14:59
唯一客服系统开发笔记
阅读(230)
推荐(0)
摘要:
双击要编辑的页眉或页脚,或选择"页眉"或"页脚",然后选择"编辑页眉"或"编辑页脚"。 为页眉或页脚添加或更改文本,或执行下列任一操作: 删除首页页眉或页脚 选择“首页不同”。 添加页码 单击或点击需要编号的地方,选择" 页 码"并选择样式。 可能需要进行编辑,以更好地设置格式。 有关详细信息,请参
阅读全文
posted @ 2021-04-22 14:33
唯一客服系统开发笔记
阅读(3753)
推荐(0)
摘要:
基础看的很多次,但是在实际的运用过程中 , 还是不能准确的理解变量和指针的细节 , 容易把自己搞晕 变量在运行的时候都有一个地址 , 这个地址代表了变量在内存中的位置 &变量 这就是"取地址" 操作 , 这样就可以取到这个变量的指针 a:=10 b:=&a b现在就是指针 对指针进行 * 操作 ,
阅读全文
posted @ 2021-04-22 10:07
唯一客服系统开发笔记
阅读(241)
推荐(0)
摘要:
golang main包下推荐只有一个main.go的入口文件 当有其他的go文件 , 并且在其他go文件中定义了函数 在main.go入口文件中调用了该函数 , 执行go run main.go , 会提示undefined 如果非得这样做那么go run 的时候把所有文件都得加上 , 否则默认只
阅读全文
posted @ 2021-04-21 23:52
唯一客服系统开发笔记
阅读(2002)
推荐(0)
摘要:
当nginx里没有配置支持webocket时 , 但是已经配置了域名 比如:ws://gofly.sopans.com/ws_visitor 直接js连会返回400的错误 需要在nginx location 块下增加这三个header头 , 把http连接升级为websocket连接 proxy_h
阅读全文
posted @ 2021-04-20 13:27
唯一客服系统开发笔记
阅读(630)
推荐(0)
摘要:
php5.3之前的版本 , 只有引用计数 , 如果遇到循环引用的情况 , 会出现内存泄露 比如这样的代码: <?php $arr=array("tao"); $arr[]=$a; unset($arr) 虽然unset了$arr , 但是内存并不能回收 , 因为有引用自身这样的行为 php5.3 之
阅读全文
posted @ 2021-04-20 10:30
唯一客服系统开发笔记
阅读(232)
推荐(0)
摘要:
多次include同一个文件的需要注意 , 函数或者类会出现重复定义的错误 使用include_once 就可以避免出现这个错误,只会载入一次 include的路径问题: 被包含文件先按参数给出的路径寻找,如果没有给出目录(只有文件名)时则按照 include_path 指定的目录寻找。如果在 in
阅读全文
posted @ 2021-04-19 12:04
唯一客服系统开发笔记
阅读(141)
推荐(0)
摘要:
当tcp进行三次握手的时候 , 第一步是客户端发送syn请求 , 服务端返回syn+sck , 客户端响应sck 当syn请求超时的时候,tcp会进行超时重传 , 重传次数在这里查看 cat /proc/sys/net/ipv4/tcp_syn_retries 可以看到重传次数是6次 每次超时的时间
阅读全文
posted @ 2021-04-19 10:38
唯一客服系统开发笔记
阅读(2705)
推荐(0)
摘要:
一般我们在windows获取mac开发代码 , 编译的时候如果要编译成指定系统的二进制文件 , 这时就需要使用交叉编译 1. 在Windows下编译Mac, Linux编译成 MacSET CGO_ENABLED=0SET GOOS=darwinSET GOARCH=amd64go build xx
阅读全文
posted @ 2021-04-16 18:16
唯一客服系统开发笔记
阅读(663)
推荐(0)
摘要:
当本地分支和远程修改了同一个文件代码,pull远程分支的代码的时候会出现文件冲突 出现这个错误 Please commit your changes or stash them before you merge. 可以先将当前的内容存储起来,git stash就可以把当前内容存储在栈内 git st
阅读全文
posted @ 2021-04-15 22:00
唯一客服系统开发笔记
阅读(1641)
推荐(0)
摘要:
当在nil上调用一个属性或者方法的时候 , 会报空指针 尤其是结构体指针 , 非常容易出现这个问题 , 下面是测试代码 package tools import "fmt" func MyTest() { type MConn struct { Name string } var conn *MCo
阅读全文
posted @ 2021-04-14 10:20
唯一客服系统开发笔记
阅读(15218)
推荐(0)
摘要:
在代码中看到这也的正则[\w\-\.]+ 所以来总结下\w与\W \w匹配任何单词字符包含下划线 >等价于 [A-Z a-z 0-9_] \W匹配任何非单词字符 (与上面的相反) >等价于 [^A-Z a-z 0-9_] 所以代码中的[\w\-\.]+ 意思是 [A-Z a-z 0-9 _\-\.]
阅读全文
posted @ 2021-04-13 16:48
唯一客服系统开发笔记
阅读(2200)
推荐(0)