摘要:Golang开发 1.GO语言基础 [日常] 搭建golang开发环境 [日常] Go语言圣经前言 [日常] Go语言圣经-声明,变量,赋值,类型,包和文件习题 [日常] Go语言圣经--作用域,基础数据类型,整型 [日常] Go语言圣经--浮点数习题 [日常] Go语言圣经--复数,布尔值,字符串 阅读全文
posted @ 2020-12-17 11:29 陶士涵 阅读(105) 评论(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 陶士涵 阅读(0) 评论(0) 推荐(0) 编辑
摘要:如果有将xml转成数组或对象的功能 , 可以使用这个函数比较简单 $obj=simplexml_load_string($xml,'SimpleXMLElement', LIBXML_NOCDATA | LIBXML_NOBLANKS); $json=json_decode(json_encode( 阅读全文
posted @ 2021-05-13 16:52 陶士涵 阅读(3) 评论(0) 推荐(0) 编辑
摘要:当条件里有and 或者 or 这俩字段都有单独的索引 , 可以进行单独的搜索 , 然后索引合并结果 , 再去聚簇索引查找 MySQL5.0之前,一个表一次只能使用一个索引,无法同时使用多个索引分别进行条件扫描。但是从5.1开始,引入了 index merge 优化技术,对同一个表可以使用多个索引分别 阅读全文
posted @ 2021-05-13 16:47 陶士涵 阅读(3) 评论(0) 推荐(0) 编辑
摘要:在RR可重复读隔离级别下 , InnoDB存储引擎 当用范围条件而不是相等条件检索数据 , 并执行update或者delete操作 会把符合条件的范围 , 包括条件里面不存在的记录加上间隙锁 当其他事务往这个范围内插入记录时 , 会把阻塞 例子: 事务A set autocommit=0; //关闭 阅读全文
posted @ 2021-05-13 10:19 陶士涵 阅读(4) 评论(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 陶士涵 阅读(5) 评论(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 陶士涵 阅读(4) 评论(0) 推荐(0) 编辑
摘要:好长时间没有用过composer , 现在都已经到了2.几了 , 如果用旧版的就会报错 windows下尽量用那个exe的安装器 , 这样就不需要设置环境变量了 , 而且winddows下需要bat的那几个脚本 , 用这个就更方便了 https://getcomposer.org/download/ 阅读全文
posted @ 2021-05-12 15:59 陶士涵 阅读(5) 评论(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 陶士涵 阅读(6) 评论(0) 推荐(0) 编辑
摘要:CPU是有高速缓存的 , 三级缓存分别是 L1 , L2 , L3 L1缓存最贴近CPU , 所以速度也最快 数据在缓存中是一行一行存储的 , L1缓存一般的一行缓存64字节 一行能缓存64个字节 , 因为一个变量可能没有64字节大小 , 所以可能会缓存好几个变量 缓存需要保证一致性, 也就是当变量 阅读全文
posted @ 2021-05-11 10:07 陶士涵 阅读(1) 评论(0) 推荐(0) 编辑
摘要:当对同一个资源进行并发操作时 , 非常需要保证并发安全 , 常见的并发控制手段演进如下 锁 : 操作数据前锁定 , 操作后释放 , 但是这样就相当于串行化了 , 并发度不高 读写锁 : 读数据的时候加读锁 , 不妨碍其他读 , 只有修改的时候加写锁 , 这时会妨碍其他的读和写操作 数据多版本 : 操 阅读全文
posted @ 2021-05-11 09:47 陶士涵 阅读(5) 评论(0) 推荐(0) 编辑
摘要:计算机在表示数的时候 , 是二进制 , 如果是4位 对于正整数, 很简单就是 , 所有的位都是1表示最大的正整数15 但是对于负数 , 需要最高位用来表示正负符号 , 1是负数 , 0 是正数 所以4位的有符号整数最大是7 8位的是整数最大是 127 最小是-128 原始的二进制是原码 , 除了符号 阅读全文
posted @ 2021-05-10 16:49 陶士涵 阅读(11) 评论(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 陶士涵 阅读(10) 评论(0) 推荐(0) 编辑
摘要:PProf 是以 profile.proto来分析数据 可以采集程序执行时候的命令分析 可以采集HTTP服务时的运行时数据分析 可以通过go test 测试用例分析 有下面这些监控分析功能: CPU 分析 , 内存分析 , 阻塞分析 , 互斥锁分析 , Groutine分析 如果是http服务 , 阅读全文
posted @ 2021-05-10 10:44 陶士涵 阅读(5) 评论(0) 推荐(0) 编辑
摘要:切片有个长度和容量两个参数 , 当长度超过容量的时候 , 容量会扩容2倍 当容量大于1024个的时候,容量会扩容为原来的1.25倍 从下面的代码中可以看得到 当增加新的元素的时候,超过了容量,但是容量大小小于1024的时候 , 是2倍扩容 当新增元素 , 超过了容量 , 并且容量大于1024 , 是 阅读全文
posted @ 2021-05-08 18:19 陶士涵 阅读(6) 评论(0) 推荐(0) 编辑
摘要:如果在一个页面上引入了多个jquery , 并且不能去掉的时候 , 或者$函数和自己的函数冲突的时候 可以使用这样的方式来解决 在引入jquery的后面加入 , 类似下面这样 <script src="https://cdn.jsdelivr.net/npm/jquery/dist/jquery.m 阅读全文
posted @ 2021-05-08 15:56 陶士涵 阅读(5) 评论(0) 推荐(0) 编辑
摘要:为了提升网络的处理能力 , 出现了I/O多路复用技术 比如常见的 select poll epoll Reactor 模型就是对上面I/O多路复用的封装 一般常使用如下几个组合使用方式: 单Reactor 单进程/线程 单Reactor 多进程/线程 多Reactor 多进程/线程 单Reactor 阅读全文
posted @ 2021-05-08 11:47 陶士涵 阅读(5) 评论(0) 推荐(0) 编辑
摘要:网络模型从最简单到后面的演进是这样的: 1. 普通socket模型 2. 多进程模型 3. 多线程模型 4. I/O多路复用 select poll 5. I/O多路复用 epoll 普通socket模型: 1对1的同步阻塞通信 , 一个进程只能处理一个连接 , 其他连接无法处理 多进程模型: 主进 阅读全文
posted @ 2021-05-08 11:15 陶士涵 阅读(6) 评论(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 陶士涵 阅读(62) 评论(0) 推荐(0) 编辑
摘要:我们使用空接口 interface{} 可以接收任何类型的值 拿到以后我们还需要类型断言把类型转换回原始类型 ,空接口可以存储指针变量 , 也可以存储具体类型 断言回原始类型后有这样区别 如果是具体类型 , 直接赋值会报错 " cannot assign to xxxxx" 因为这时候是一个拷贝后的 阅读全文
posted @ 2021-05-07 15:51 陶士涵 阅读(6) 评论(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 陶士涵 阅读(7) 评论(0) 推荐(0) 编辑
摘要:Golang中的Map是一个键值对的数据结构 底层是一个哈希表,核心数据结构是数组+链表 哈希表自然会有哈希函数,通过一个哈希函数将key映射到哈希表的一个位置, 有哈希函数就会有哈希冲突 Golang是使用数组+链地址法解决哈希冲突,当多个key映射到同一位置的时候,会把冲突的key链接起来 形成 阅读全文
posted @ 2021-05-06 20:00 陶士涵 阅读(2) 评论(0) 推荐(0) 编辑
摘要:比如批量群发邮件的功能 因为发送邮件是个比较耗时的操作, 如果是传统的一个个执行 , 总体耗时比较长 可以使用golang实现一个协程池 , 并行发送邮件 pool包下的pool.go文件 package pool import "log" //具体任务,可以传参可以自定义操作 type Task 阅读全文
posted @ 2021-04-30 15:06 陶士涵 阅读(28) 评论(0) 推荐(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 陶士涵 阅读(25) 评论(0) 推荐(0) 编辑
摘要:grep可以在排查日志时获取关键字那一行 有时候想要看到前后几行的信息 获取前后10行信息 grep -C 10 xxxx 获取后10行信息 grep -A 10 xxxx 获取前10行信息 grep -B 10 xxxx 阅读全文
posted @ 2021-04-29 14:22 陶士涵 阅读(27) 评论(0) 推荐(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 陶士涵 阅读(18) 评论(0) 推荐(0) 编辑
摘要:同一个struct的2个实例能不能比较 == !=答案:可以能、也可以不能 两个不同的struct的实例能不能比较 == !=答案:可以能、也可以不能 如果结构体的所有成员变量都是可比较的,那么结构体就可比较如果结构体中存在不可比较的成员变量,那么结构体就不能比较 type s2 struct { 阅读全文
posted @ 2021-04-29 10:39 陶士涵 阅读(12) 评论(0) 推荐(0) 编辑
摘要:空接口 interface{} 可以存储任何类型的数据 但是在和slice以及map配合时 ,要注意 []interface{} 或者 map[string]interface{} 可能会犯这样的错误 cannot use (type []string) as type []interface {} 阅读全文
posted @ 2021-04-28 19:21 陶士涵 阅读(47) 评论(0) 推荐(0) 编辑
摘要:在很多启动脚本里开头看到有 set -e 这个的作用是当有命令错误时 , 直接停止执行下面的命令 例如: /ssss命令不存在报错后 , 这样会继续往下执行到 输出2222 加上后就不会执行下面的了 阅读全文
posted @ 2021-04-28 18:21 陶士涵 阅读(10) 评论(0) 推荐(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 陶士涵 阅读(15) 评论(0) 推荐(0) 编辑
摘要:go for range循环map是无序的 , 这个是go team团队 有意为之 在进行循环遍历的时候 , 生成了一个随机数作为遍历开始的位置 可以for range循环map取出所有的key , sort.Strings(keys) , 排序所有的keys 再循环所有的keys , 按这个循环取 阅读全文
posted @ 2021-04-28 14:29 陶士涵 阅读(18) 评论(0) 推荐(0) 编辑
摘要:因为docker官方不支持 32位的系统 , 只支持amd64等 64位的系统 所以可以使用ubuntu 官方维护的版本 , 安装更简单 apt install docker.io 这个就是git上有人问的问题 阅读全文
posted @ 2021-04-27 16:33 陶士涵 阅读(21) 评论(0) 推荐(0) 编辑
摘要:使用git的时候 , 如果我们在自己的工作区中修改了代码 , 既没有git add , 更没有git checkout , 想要恢复成修改之前的样子 用 git checkout git checkout 文件 , 恢复某个文件 阅读全文
posted @ 2021-04-27 14:18 陶士涵 阅读(12) 评论(0) 推荐(0) 编辑
摘要:DEPENDENT SUBQUERY:子查询中的第一个SELECT,取决于外面的查询 , 注意如果外部查询的结果集数量比较大, 比如几十万上百万,就会执行几十万上百万次子查询,必然造成慢查。 很多使用子查询的人 想当然的认为 子查询会由内到外,先完成子查询的结果, 然后在用子查询来驱动外查询的表,完 阅读全文
posted @ 2021-04-26 14:45 陶士涵 阅读(13) 评论(0) 推荐(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 陶士涵 阅读(19) 评论(0) 推荐(0) 编辑
摘要:mysql 5.7及以上版本 , 在进行group by时 , 查询到的所有的列都要在group by字段里 , 这很明显不符合我们的目的 解决1: 没有参与分组的字段, 使用ANY_VALUE()函数包括 解决2: 临时取消ONLY_FULL_GROUP_BY 模式 select @@global 阅读全文
posted @ 2021-04-26 10:35 陶士涵 阅读(18) 评论(0) 推荐(0) 编辑
摘要:在go语言中查看所有执行的init函数 , 可以使用这个环境变量 linux下可以直接执行 GODEBUG=inittrace=1 具体命令 winddows下 set GODEBUG=inittrace=1 在执行命令 阅读全文
posted @ 2021-04-25 17:35 陶士涵 阅读(10) 评论(0) 推荐(0) 编辑
摘要:只要导入了包 , 那么该包的init函数就会执行 , 执行的顺序和优先级为下面这种图 有点类似函数栈 , 先执行最后导入包的init函数 阅读全文
posted @ 2021-04-25 16:58 陶士涵 阅读(11) 评论(0) 推荐(0) 编辑
摘要:os.Args是个[]string 里面存着路径和全部参数 直接拼接一下就获取到完整路径了 func GetAllExecutePath()string{ allPath:="" for _,arg:=range os.Args{ allPath+=" "+arg } return allPath 阅读全文
posted @ 2021-04-23 19:02 陶士涵 阅读(9) 评论(0) 推荐(0) 编辑
摘要:在自己的电脑修改了PATH环境变量 , 但是goland terminal不更新 goland只在开机启动的时候会去读取系统的PATH环境变量 1.可以重启电脑解决 2.手动在terminal中设置一下PATH 阅读全文
posted @ 2021-04-23 17:35 陶士涵 阅读(2) 评论(0) 推荐(0) 编辑
摘要:下载符合自己系统版本的压缩包 https://sourceforge.net/projects/mingw-w64/files/mingw-w64/ 我是64位 , 下载这个版本 直接解压以后 , 把bin目录放入 PATH环境变量就行了 如果是使用的goland ide 开发 要重启goland 阅读全文
posted @ 2021-04-23 17:27 陶士涵 阅读(74) 评论(0) 推荐(0) 编辑