摘要:Golang开发 1.GO语言基础 [日常] 搭建golang开发环境 [日常] Go语言圣经前言 [日常] Go语言圣经-声明,变量,赋值,类型,包和文件习题 [日常] Go语言圣经--作用域,基础数据类型,整型 [日常] Go语言圣经--浮点数习题 [日常] Go语言圣经--复数,布尔值,字符串 阅读全文
posted @ 2020-12-17 11:29 陶士涵 阅读(102) 评论(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 陶士涵 阅读(5) 评论(0) 推荐(0) 编辑
摘要:我们使用空接口 interface{} 可以接收任何类型的值 拿到以后我们还需要类型断言把类型转换回原始类型 ,空接口可以存储指针变量 , 也可以存储具体类型 断言回原始类型后有这样区别 如果是具体类型 , 直接赋值会报错 " cannot assign to xxxxx" 因为这时候是一个拷贝后的 阅读全文
posted @ 2021-05-07 15:51 陶士涵 阅读(4) 评论(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 陶士涵 阅读(5) 评论(0) 推荐(0) 编辑
摘要:Golang中的Map是一个键值对的数据结构 底层是一个哈希表,核心数据结构是数组+链表 哈希表自然会有哈希函数,通过一个哈希函数将key映射到哈希表的一个位置, 有哈希函数就会有哈希冲突 Golang是使用数组+链地址法解决哈希冲突,当多个key映射到同一位置的时候,会把冲突的key链接起来 形成 阅读全文
posted @ 2021-05-06 20:00 陶士涵 阅读(1) 评论(0) 推荐(0) 编辑
摘要:比如批量群发邮件的功能 因为发送邮件是个比较耗时的操作, 如果是传统的一个个执行 , 总体耗时比较长 可以使用golang实现一个协程池 , 并行发送邮件 pool包下的pool.go文件 package pool import "log" //具体任务,可以传参可以自定义操作 type Task 阅读全文
posted @ 2021-04-30 15:06 陶士涵 阅读(18) 评论(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 陶士涵 阅读(8) 评论(0) 推荐(0) 编辑
摘要:grep可以在排查日志时获取关键字那一行 有时候想要看到前后几行的信息 获取前后10行信息 grep -C 10 xxxx 获取后10行信息 grep -A 10 xxxx 获取前10行信息 grep -B 10 xxxx 阅读全文
posted @ 2021-04-29 14:22 陶士涵 阅读(12) 评论(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 陶士涵 阅读(10) 评论(0) 推荐(0) 编辑
摘要:同一个struct的2个实例能不能比较 == !=答案:可以能、也可以不能 两个不同的struct的实例能不能比较 == !=答案:可以能、也可以不能 如果结构体的所有成员变量都是可比较的,那么结构体就可比较如果结构体中存在不可比较的成员变量,那么结构体就不能比较 type s2 struct { 阅读全文
posted @ 2021-04-29 10:39 陶士涵 阅读(3) 评论(0) 推荐(0) 编辑
摘要:空接口 interface{} 可以存储任何类型的数据 但是在和slice以及map配合时 ,要注意 []interface{} 或者 map[string]interface{} 可能会犯这样的错误 cannot use (type []string) as type []interface {} 阅读全文
posted @ 2021-04-28 19:21 陶士涵 阅读(16) 评论(0) 推荐(0) 编辑
摘要:在很多启动脚本里开头看到有 set -e 这个的作用是当有命令错误时 , 直接停止执行下面的命令 例如: /ssss命令不存在报错后 , 这样会继续往下执行到 输出2222 加上后就不会执行下面的了 阅读全文
posted @ 2021-04-28 18:21 陶士涵 阅读(8) 评论(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 陶士涵 阅读(3) 评论(0) 推荐(0) 编辑
摘要:go for range循环map是无序的 , 这个是go team团队 有意为之 在进行循环遍历的时候 , 生成了一个随机数作为遍历开始的位置 可以for range循环map取出所有的key , sort.Strings(keys) , 排序所有的keys 再循环所有的keys , 按这个循环取 阅读全文
posted @ 2021-04-28 14:29 陶士涵 阅读(5) 评论(0) 推荐(0) 编辑
摘要:因为docker官方不支持 32位的系统 , 只支持amd64等 64位的系统 所以可以使用ubuntu 官方维护的版本 , 安装更简单 apt install docker.io 这个就是git上有人问的问题 阅读全文
posted @ 2021-04-27 16:33 陶士涵 阅读(8) 评论(0) 推荐(0) 编辑
摘要:使用git的时候 , 如果我们在自己的工作区中修改了代码 , 既没有git add , 更没有git checkout , 想要恢复成修改之前的样子 用 git checkout git checkout 文件 , 恢复某个文件 阅读全文
posted @ 2021-04-27 14:18 陶士涵 阅读(6) 评论(0) 推荐(0) 编辑
摘要:DEPENDENT SUBQUERY:子查询中的第一个SELECT,取决于外面的查询 , 注意如果外部查询的结果集数量比较大, 比如几十万上百万,就会执行几十万上百万次子查询,必然造成慢查。 很多使用子查询的人 想当然的认为 子查询会由内到外,先完成子查询的结果, 然后在用子查询来驱动外查询的表,完 阅读全文
posted @ 2021-04-26 14:45 陶士涵 阅读(8) 评论(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 陶士涵 阅读(13) 评论(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 陶士涵 阅读(11) 评论(0) 推荐(0) 编辑
摘要:在go语言中查看所有执行的init函数 , 可以使用这个环境变量 linux下可以直接执行 GODEBUG=inittrace=1 具体命令 winddows下 set GODEBUG=inittrace=1 在执行命令 阅读全文
posted @ 2021-04-25 17:35 陶士涵 阅读(9) 评论(0) 推荐(0) 编辑
摘要:只要导入了包 , 那么该包的init函数就会执行 , 执行的顺序和优先级为下面这种图 有点类似函数栈 , 先执行最后导入包的init函数 阅读全文
posted @ 2021-04-25 16:58 陶士涵 阅读(6) 评论(0) 推荐(0) 编辑
摘要:os.Args是个[]string 里面存着路径和全部参数 直接拼接一下就获取到完整路径了 func GetAllExecutePath()string{ allPath:="" for _,arg:=range os.Args{ allPath+=" "+arg } return allPath 阅读全文
posted @ 2021-04-23 19:02 陶士涵 阅读(7) 评论(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 陶士涵 阅读(40) 评论(0) 推荐(0) 编辑
摘要:linux下可以使用 kill 进程id 来杀死一个运行中的进程 windows下可以使用 taskkill.exe /f /pid 进程id 平常可能我们不会使用这样的命令来杀死进程 但是在写代码的过程中如果想在代码里kill进程 就可以使用这个方式了 比如下面的go代码 var command 阅读全文
posted @ 2021-04-23 16:31 陶士涵 阅读(6) 评论(0) 推荐(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 陶士涵 阅读(12) 评论(0) 推荐(0) 编辑
摘要:在项目里很多时候需要用icon , 如果不想用图片 , 可以用一下这个图标库 https://github.com/saeedalipoor/icono 使用很简单 <link rel="stylesheet" href="icono.min.css"> 引入后直接加class就ok了 例如我项目中 阅读全文
posted @ 2021-04-22 16:54 陶士涵 阅读(8) 评论(0) 推荐(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 陶士涵 阅读(9) 评论(0) 推荐(0) 编辑
摘要:双击要编辑的页眉或页脚,或选择"页眉"或"页脚",然后选择"编辑页眉"或"编辑页脚"。 为页眉或页脚添加或更改文本,或执行下列任一操作: 删除首页页眉或页脚 选择“首页不同”。 添加页码 单击或点击需要编号的地方,选择" 页 码"并选择样式。 可能需要进行编辑,以更好地设置格式。 有关详细信息,请参 阅读全文
posted @ 2021-04-22 14:33 陶士涵 阅读(14) 评论(0) 推荐(0) 编辑
摘要:基础看的很多次,但是在实际的运用过程中 , 还是不能准确的理解变量和指针的细节 , 容易把自己搞晕 变量在运行的时候都有一个地址 , 这个地址代表了变量在内存中的位置 &变量 这就是"取地址" 操作 , 这样就可以取到这个变量的指针 a:=10 b:=&a b现在就是指针 对指针进行 * 操作 , 阅读全文
posted @ 2021-04-22 10:07 陶士涵 阅读(6) 评论(0) 推荐(0) 编辑
摘要:golang main包下推荐只有一个main.go的入口文件 当有其他的go文件 , 并且在其他go文件中定义了函数 在main.go入口文件中调用了该函数 , 执行go run main.go , 会提示undefined 如果非得这样做那么go run 的时候把所有文件都得加上 , 否则默认只 阅读全文
posted @ 2021-04-21 23:52 陶士涵 阅读(9) 评论(0) 推荐(0) 编辑
摘要:当nginx里没有配置支持webocket时 , 但是已经配置了域名 比如:ws://gofly.sopans.com/ws_visitor 直接js连会返回400的错误 需要在nginx location 块下增加这三个header头 , 把http连接升级为websocket连接 proxy_h 阅读全文
posted @ 2021-04-20 13:27 陶士涵 阅读(9) 评论(0) 推荐(0) 编辑
摘要:php5.3之前的版本 , 只有引用计数 , 如果遇到循环引用的情况 , 会出现内存泄露 比如这样的代码: <?php $arr=array("tao"); $arr[]=$a; unset($arr) 虽然unset了$arr , 但是内存并不能回收 , 因为有引用自身这样的行为 php5.3 之 阅读全文
posted @ 2021-04-20 10:30 陶士涵 阅读(42) 评论(0) 推荐(0) 编辑
摘要:多次include同一个文件的需要注意 , 函数或者类会出现重复定义的错误 使用include_once 就可以避免出现这个错误,只会载入一次 include的路径问题: 被包含文件先按参数给出的路径寻找,如果没有给出目录(只有文件名)时则按照 include_path 指定的目录寻找。如果在 in 阅读全文
posted @ 2021-04-19 12:04 陶士涵 阅读(7) 评论(0) 推荐(0) 编辑
摘要:当tcp进行三次握手的时候 , 第一步是客户端发送syn请求 , 服务端返回syn+sck , 客户端响应sck 当syn请求超时的时候,tcp会进行超时重传 , 重传次数在这里查看 cat /proc/sys/net/ipv4/tcp_syn_retries 可以看到重传次数是6次 每次超时的时间 阅读全文
posted @ 2021-04-19 10:38 陶士涵 阅读(36) 评论(0) 推荐(0) 编辑
摘要:一般我们在windows获取mac开发代码 , 编译的时候如果要编译成指定系统的二进制文件 , 这时就需要使用交叉编译 1. 在Windows下编译Mac, Linux编译成 MacSET CGO_ENABLED=0SET GOOS=darwinSET GOARCH=amd64go build xx 阅读全文
posted @ 2021-04-16 18:16 陶士涵 阅读(11) 评论(0) 推荐(0) 编辑
摘要:当本地分支和远程修改了同一个文件代码,pull远程分支的代码的时候会出现文件冲突 出现这个错误 Please commit your changes or stash them before you merge. 可以先将当前的内容存储起来,git stash就可以把当前内容存储在栈内 git st 阅读全文
posted @ 2021-04-15 22:00 陶士涵 阅读(9) 评论(0) 推荐(0) 编辑
摘要:当在nil上调用一个属性或者方法的时候 , 会报空指针 尤其是结构体指针 , 非常容易出现这个问题 , 下面是测试代码 package tools import "fmt" func MyTest() { type MConn struct { Name string } var conn *MCo 阅读全文
posted @ 2021-04-14 10:20 陶士涵 阅读(88) 评论(0) 推荐(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 陶士涵 阅读(32) 评论(0) 推荐(0) 编辑
摘要:我们的开发环境大部分还是在windows下,所以也要能够在windows下安装最新版go1.16.3 在这个地址下载go zip包 , https://studygolang.com/dl 64位操作系统,下载 go1.16.3.windows-amd64.zip 32位操作系统,下载 go1.16 阅读全文
posted @ 2021-04-13 10:34 陶士涵 阅读(77) 评论(0) 推荐(0) 编辑
摘要:使用github.com/emersion/go-smtp , 通过smtp发送通知邮件内容 加上html代码的内容后 , 在一些邮箱里会被原样展示 , 并没有展示成html , 原因是没有加Content-Type , 加上之后就可以了 tools/smtp.go package tools im 阅读全文
posted @ 2021-04-12 17:09 陶士涵 阅读(8) 评论(0) 推荐(0) 编辑