- 博客(165)
- 收藏
- 关注
原创 树莓派:使用frp搭建内网穿透及问题处理
目的:通过公网IP访问内网本地的树莓派服务器frp介绍文档:https://gofrp.org/docs/examples/ssh/github包地址:https://github.com/fatedier/frp/releases1 分别下载对应的frp二进制包到公网IP和内网IP的机器上公网IP:x.x.x.x x86机器 下载amd64二进制文件 (getconf LONG_BIT命令查看机器)树莓派本地IP:172.18.78.17 arm32机器 使用arm二进制文件2 更新
2021-10-20 18:50:29 968
原创 golang_切片排序:使用sort.Slice进行切片的排序
package mainimport ( "fmt" "sort")type MyStruct struct { ID int Name string Time string}func main() { my := []MyStruct{ {1, "eric", "2021-07-20T17:24:48.56383Z"}, {3, "lucy", "2021-07-10T17:24:48.56383Z"}, {2, "yoly", "2021-07-30T17:24:
2021-08-04 14:53:04 2243
原创 How grammar changes
If you think that grammar is an exact science, get ready for a shock. Grammar is a science, all right – but it is most inexact. There are no inflexible laws, no absolutely hard and fast rules, no unchanging principles. Correctness varies with the times and
2021-05-07 23:40:27 354
原创 How to talk about science and scientists - session 11
A true scientist lives up to the etymological meaning of this little “one who knows.” Anything scientific is based on facts — observable facts that can be recorded,tested,checked,and verified.Science, then, deals with human knowledge – as far as it has go
2021-05-06 23:49:39 178
原创 golang_protoc: protoc编译生成pb.go文件
protoc的go官方文档:https://developers.google.com/protocol-buffers/docs/gotutorial当前目录生成/proto/helloworld.proto文件syntax = "proto3";package helloworld;option go_package = "/proto";service Greeter { rpc SauHello (HelloRequest) returns (HelloReply) {}}
2021-04-04 18:34:40 9611 2
原创 golang_fmt包中Scanf和Sscanf的使用
func Scanffunc Scanf(format string, a ...interface{}) (n int, err error)Scanf从标准输入扫描文本,根据format 参数指定的格式将成功读取的空白分隔的值保存进成功传递给本函数的参数。返回成功扫描的条目个数和遇到的任何错误。demopackage mainimport "fmt"func main() { var name string fmt.Printf("请输入内容:") fmt.Scan(&n
2020-12-23 16:59:15 4695
原创 golang_for循环内外声明变量的基准测试
for循环内外声明常量对函数性能的影响:使用基准测试,发现影响不大,不用在意两种写法的影响。package mainimport ( "math/rand" "testing")var letterRunes = []rune("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_")func RandStringRunes1(n int) string { b := make([]rune, n) for
2020-12-07 13:58:04 440
原创 golang_算法: leetcode_207周周赛01-重新排列单词间的空格
package mainimport ( "fmt" "strings")/*给你一个字符串 text ,该字符串由若干被空格包围的单词组成。每个单词由一个或者多个小写英文字母组成,并且两个单词之间至少存在一个空格。题目测试用例保证 text 至少包含一个单词 。请你重新排列空格,使每对相邻单词之间的空格数目都 相等 ,并尽可能 最大化 该数目。如果不能重新平均分配所有空格,请 将多余的空格放置在字符串末尾 ,这也意味着返回的字符串应当与原 text 字符串的长度相等。返回 重新排列
2020-09-23 12:18:26 297
原创 golang_算法: leetcode_数组11-旋转图像
package mainimport "fmt"/*给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。作者:力扣 (LeetCode)链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnhhkv/来源:力扣(LeetCode)著作权归作者所有。商业转载请联系作者获得
2020-09-17 00:19:51 233
原创 golang_算法: leetcode_数组10-有效的数独
package mainimport "fmt"/*有效的数独判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。说明:一个有效的数独(部分已被填充)不一定是可解的。只需要根据以上规则,验证已经填入的数字是否有效即可。给定数独序列只包含数字 1-9 和字符 '.' 。给定数独永远是 9x9 形式的。作者
2020-09-16 23:22:28 320
原创 golang_excel: go处理excel相关数据
这里使用的包为:github.com/360EntSecGroup-Skylar/excelizeexcel文件为test_write.xlsx,其中数据如下:姓名 年龄狗子1 18狗子2 19狗子3 狗子4 狗子5 22狗子6 23狗子7 24狗子8 25狗子9 狗子10 27需求:输出错误记录的文件,其中年龄为空的记录留下,正确的那行记录删除。处理方法:因为读取数据为值传递的原因,使用goto命令进行处理package mainimport ( "fmt" "g
2020-08-18 22:49:45 914
原创 golang_strings:trim分割“/“出现的坑及解决办法
问题描述strings.Trim和strings.TrimLeft在分割带有“https://”的字符串时,会多分割一些字符,对分割结果造成影响。解决办法如果是删除前缀,使用strings.TrimPrefix替换strings.Trim和strings.TrimLeft;如果是删除后缀,使用strings.TrimSuffix。测试代码如下:package mainimport ( "fmt" "strings")func main() { test1() fmt.Print
2020-08-03 10:55:18 929
原创 golang_url: url的编码和解码
QueryEscapefunc QueryEscape(s string) stringQueryEscape函数对s进行转码使之可以安全的用在URL查询里。QueryUnescapefunc QueryUnescape(s string) (string, error)QueryUnescape函数用于将QueryEscape转码的字符串还原。它会把%AB改为字节0xAB,将’+‘改为’ '。如果有某个%后面未跟两个十六进制数字,本函数会返回错误。url的编码func main() {
2020-07-30 09:41:30 8960
原创 mysql_优化: ‘mysqladmin flush-hosts’问题的排查
问题1:mysqladmin flush-hostsHost is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts’;同一个ip在短时间内产生太多(超过mysql数据库max_connection_errors的最大值)中断的数据库连接而导致的阻塞;问题排查:被封的为公司内部ip,说明公司内有人请求数据库错误并且数量超出了数据库设置,造成该ip被封。解决办法1使用如下命令mysql&
2020-07-29 22:27:13 1078
原创 golang_切片:切片内指定元素的删除
package mainimport "fmt"func main() { sli := []int{0,0,0,1,2,3,4,5,6,7,8,9} n := 0 ints := RemoveParam(sli, n) fmt.Println(ints)}func RemoveParam(sli []int, n int) []int { for i := 0; i < len(sli); i++ { if sli[i] == n { if i == 0 {
2020-07-15 23:04:32 2206
原创 golang_算法:leetcode_字符串08-[38]外观数列
package mainimport ( "fmt" "os" "strconv")//给定一个正整数 n(1 ≤ n ≤ 30),输出外观数列的第 n 项。//// 注意:整数序列中的每一项将表示为一个字符串。//// 「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。前五项如下://// 1. 1//2. 11//3. 21//4. 1211//5. 111221////// 第一项是数字 1
2020-07-06 23:03:34 226
原创 MAC_homebrew安装、镜像更换及卸载
homebrew安装homebrew中文官网homebrew安装及卸载脚本第一步:执行install.sh安装脚本/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"可能出现的问题:curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused
2020-06-12 12:47:38 1308
原创 golang_微信头像过期失效
背景微信用户更新头像,原有的头像url会失效,这时需要对失效的头像做一个处理。方案一微信官方文档中 授权后接口调用有下列描述:请注意,在用户修改微信头像后,旧的微信头像 URL 将会失效,因此开发者应该自己在获取用户信息后,将头像图片保存下来,避免微信头像 URL 失效后的异常情况。这里的建议是在本地服务器存储一遍用户头像,这样就不会产生用户头像失效的情况。同时默认用户的头像为第一次绑定时的头像。方案二判断用户头像失效的状态,在调用微信授权时,更新头像为获取的最新用户头像。// url
2020-06-07 21:11:24 1042
原创 Redis_数据类型及命令详细介绍
数据库结构redis是key-value的数据结构,每条数据都是⼀个键值对键的类型是字符串注意:键不能重复数据类型分5种:string,hash,list,set,zset字符串(String)字符串类型是Redis中最为基础的数据存储类型,该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等。在Redis中字符串类型的Value最多可以容纳的数据长度是512M。 1. set key value // 设置键值 2. get key /
2020-05-31 20:17:03 348
原创 SQL_基础教程
课程1: Basic SQL(发音sei kuo)课程来源:https://classroom.udacity.com/courses/ud198ERD(Entry relationship diagram) 实体关系图这些图可帮助您可视化所分析的数据,包括:表的名称。每个表中的列。表一起工作的方式。SQL(Structured Query Language)企业使用数据库的原因:1 确保数据的完整性2 可以快速访问数据3 数据易于分享SQL的关键是理解语句。一些声明包括:
2020-05-24 12:51:03 340
原创 数据结构_03: go实现双向链路表
type Element struct { next, prev *Element list *List Value interface{}}// Next returns the next list element or nil.func (e *Element) Next() *Element { if p := e.next; e.list != nil && p != &e.list.root { return p } retur
2020-05-22 17:22:21 202
原创 golang_微信公众号网页授权
UnionID同一用户、同一微信平台下的不同应用unionid相同静默授权1. snsapi_base为scope的网页授权2. 已进入本公众号的网页授权页snsapi_userinfo网页授权4步:1. 用户同意授权,获取code2. 通过code换取网页授权access_token3. 刷新access_token(如有需要)4. scope为snsapi_userinfo时...
2020-04-28 16:29:12 2662 4
原创 golang_算法:字符串反转且转换大小写
package mainimport "fmt"func reverse(str string) string { if len(str) <= 1 { return str } sli := make([]byte, 0) for _, v := range str { sli = append(sli, byte(v)) } for i := 0; i &l...
2020-03-27 16:35:44 687
原创 golang_并发模式:work包实现无缓存的工作池
使用无缓冲的通道来创建一个goroutine池,这些goroutine执行并控制一组动作,让其并发执行。使用无缓冲的通道不会有工作在队列里丢失或者卡住,所有工作都会被处理。1.知道什么时候goroutine池正在执行工作2.如果池里的所有goroutine都忙,无法接受心得工作,可及时通过通道来通知调用者work.gotype Worker interface { Task()}...
2020-03-09 23:40:51 687
原创 golang_条件变量:sync.Cond作为条件变量的使用
场景:生产者消费者模型中(比如一个有缓存的channel中),生产者进行生产之前去抢锁,如果缓存已满,生产者抢锁无效;消费者进行消费之前去抢锁,如果缓存为空,消费者抢锁无效。所有在抢锁之前需要进行一个判断,称之为条件变量。sync.Cond的结构:type Cond struct { noCopy noCopy // L is held while observing or chang...
2020-03-09 16:24:15 757
原创 HTTP_03_HTTP报文中的HTTP信息
1.HTTP报文分为3部分:【报文首部】服务器端或客户端需处理的请求或响应的内容及属性【空行(CR+LF)】CR(Carriage Return,回车符)和LF(Line Feed,换行符)【报文主体】应被发送的数据其中报文首部又分为:请求/响应行请求/响应首部字段通用首部字段实体首部字段其他2.编码提升传输速率HTTP协议中内容编码指明应用在实体内容上的编码格式,并保持实...
2020-02-26 16:27:59 179
原创 HTTP_02_HTTP协议(请求和响应)
1 请求和响应请求从客户端发出,最后服务器端响应该请求并返回。1.1 请求报文GET /index.html HTTP/1.1Host: example.com第1行:请求方法(method)、请求URI(request-URI)、协议版本第2行:请求首部字段(可选)第3行:内容实体(可选)1.2 响应报文接收到请求的服务器,会将请求内容的处理结构以响应的形式返回。HTTP...
2020-02-26 16:26:35 368
原创 HTTP_01_了解web及网络基础
TCP/IP协议族,是在IP协议的通信过程中,使用到的协议族的统称。HTTP属于其内部的一个子集。1 TCP/IP的分层管理依次分为一下4层:应用层、传输层、网络层、数据链路层。应用层应用层决定了向用户提供应用服务时通信的活动。FTP(File Transfer Protocol,文件传输协议)DNS(Domain Name System,域名系统)HTTP传输层传输层对上层...
2020-02-26 16:24:53 414
原创 HTTP_06_HTTP首部
HTTP首部字段使用首部字段是为了给浏览器和服务器提供报文主体大小、所使用的语言、认证信息等。HTTP报文分类描述(请求报文/响应报文)详细描述报文首部请求行/状态行方法、URI、HTTP版本请求首部字段/响应首部字段HTTP首部字段通用首部字段HTTP首部字段实体首部字段HTTP首部字段其他空行(CR+LF)报...
2020-02-26 16:22:16 235
原创 HTTP_05_与HTTP协作的Web服务器(代理、网关和缓存)
1 单台虚拟机实现多个域名一台HTTP服务器可使用虚拟机(Virtual Host)搭建多个Web站点。在互联网上,域名通过DNS服务映射到IP地址(域名解析)之后访问目标网站。当请求发送到服务器时,已经是以IP地址形式访问了。在相同的IP地址下,由于虚拟主机可以寄存多个不同主机名和域名的Web网站,因此发送HTTP请求时,必须在Host首部内完整指定主域名的URI。2 通讯数据转发程序...
2020-02-26 16:19:56 258
原创 HTTP_04_HTTP状态码
状态码告知从服务器端返回的请求结果。类别原因短语1XXInformational(信息性状态码)接收的请求正在处理2XXSuccess(成功状态码)请求正常处理完毕3XXRedirection(重定向状态码)需要进行附加操作以完成请求4XXClient Error(客户端错误状态码)服务器无法处理请求5XXServer Error(...
2020-02-26 16:16:18 424
原创 golang指针的一种用法
go中指针的一种用法:指针一般使用“*”,表示指向一个变量的值;取地址“&”表示去变量内存的地址。这里的testPointer函数返回值为一个指针bool类型,但真正返回时是一个bool的地址。在main中使用setup变量时,需要使用“*”进行取值操作package mainimport "fmt"func testPointer() *bool { setup := ...
2019-12-30 11:58:08 477
原创 ADAPTER(适配器)——go实现适配器方法模式
1. 意图将一个类的接口转换为客户希望的另外一个接口。2. 结构3. 4类参与者Target定义Client使用的与特定领域相关的接口。Client与符合Target接口的对象协同。Adaptee定义一个已经存在的接口,这个接口需要适配。Adapter对Adaptee的接口与Target接口进行适配。4. go代码实现package mainim...
2019-11-29 00:18:14 318
原创 工厂方法(FactoryMethod)——go实现工厂方法模式
1. 意图2. 结构3. 5种参与者抽象工厂类(AbstractFactory)声明一个创建抽象产品对象的操作接口具体工厂类(ConcreteFactory)实现创建具体产品对象的操作抽象产品类(AbstractPoduct)为一类产品声明一个接口具体产品类(ConcreteProduct)定义一个将被相应的具体工厂创建的产品对象实现AbstractPodu...
2019-11-26 13:12:27 286
原创 抽象工厂(AbstractFactory)——go实现抽象工厂模式
1. 意图提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。2. 别名Kit3. 结构4. 参与者(5种)抽象工厂类(AbstractFactory)声明一个创建抽象产品对象的操作接口具体工厂类(ConcreteFactory)实现创建具体产品对象的操作抽象产品类(AbstractPoduct)为一类产品声明一个接口具体产品类(Concr...
2019-11-24 09:57:59 304
原创 go-sqlite3 “database is locked”问题解决方案
1 背景rds创建集群后进行启动或者停止操作时,会造成sqlite的写入产生死锁,无法进行后续的写入。2 问题sqlite3数据库在写入操作时,如果多路同时写入可能会造成“database is locked”的死锁问题。3 测试进行单元测试,在测试文件创建一个db服务,起1000个goroutine向nerv.db中不停地写入数据,在写入数据的同时对数据库中进行查询操作,会出现2种情况...
2019-09-10 19:35:27 6666 1
原创 golang_map的值拷贝函数实现
函数:func (p *Reporter) cloneTags(tags map[string]string) map[string]string { cloneTags := make(map[string]string) for k, v := range tags { cloneTags[k] = v } return cloneTags}传入的是...
2019-08-23 15:49:26 11029
原创 go常见错误:结构体切片为零值的坑
遇到的坑的demo如下:type Cat struct {}//打印该切片,发现为[<nil>]func main() { cats := showCats() fmt.Printf("cats:%v, len(cats):%v\n", cats, len(cats))}//将值为nil的cat加入[]*cat切片中func showCats() []*Cat {...
2019-08-19 15:46:36 2215
原创 纵疎狂01_个人网站的大纲设计
纵疎狂网站大纲1 基本构架2 项目列表如何创建一个注脚注释也是必不可少的甘特图网站大纲纵疎狂——为 一个个人面向个人(C2C)展示的个性化页面,内容以个人感兴趣的东西为主,辅助以自己感兴趣的技术进行网站形式构架的更新。1 基本构架基本的夙求:兴趣+技术前期内容以比较熟悉的golang中的beego框架+mysql进行初级的搭建。中期稳定后,尝试用新的技术:使用gin框架+mango进...
2019-08-17 20:45:01 266
原创 ElasticSearch:logstash-output-http插件的使用(logstash的http输出)
相关网站:1 github上Http output plugin的相关介绍和用法input { file { path => ["/root/demo.log"] # 只使用绝对路径。若是多个文件,使用数组方式进行具体说明。 start_position => "beginning" ...
2019-08-16 19:02:19 4558 4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人