
golang
文章平均质量分 91
手抓粑粑
648731467@.com
展开
-
url参数中有+、空格、=、%、&、#等特殊符号的问题解决
url出现了有+,空格,/,?,%,#,&,=等特殊符号的时候,可能在服务器端无法获得正确的参数值,这时候可以将这些字符转化成服务器可以识别的字符,对应关系如下:URL字符转义URL 中+号表示空格 %2B空格 URL中的空格可以用+号或者编码 %20/ 分隔目录和子目录 %2F? 分隔实际的URL和参数 %3F% 指定特殊字符 %25#表示书签 %23& URL 中指定的参数间的分隔符 %26= URL 中指定参数的值 %3D...原创 2020-11-11 16:48:29 · 4887 阅读 · 1 评论 -
Go-Hyperledger Fabric新手程序员入职配置及注意事项
Goland,Idea等IDE需要使用旧版进行破解Git上拉取仓库,一定要拉取到GoPATH下,否则会出现各种报错。翻墙工具很有必要。不懂就问。查阅公司手册,查阅官网手册,查阅stackflow,查阅博客,查阅B站。...原创 2020-11-03 14:13:49 · 271 阅读 · 0 评论 -
布隆过滤器-如何判断一个元素是否存在一个集合中?
什么情况下需要布隆过滤器?先来看几个比较常见的例子字处理软件中,需要检查一个英语单词是否拼写正确在 FBI,一个嫌疑人的名字是否已经在嫌疑名单上在网络爬虫里,一个网址是否被访问过yahoo, gmail等邮箱垃圾邮件过滤功能这几个例子有一个共同的特点: 如何判断一个元素是否存在一个集合中?优点相比于其它的数据结构,布隆过滤器在空间和时间方面都有巨大的优势。布隆过滤器存储空间和插入/查询时间都是常数。另外, Hash 函数相互之间没有关系,方便由硬件并行实现。布隆过滤器不需要存储元素本身,在某原创 2020-10-13 16:54:08 · 693 阅读 · 0 评论 -
Golang编程-踩坑笔记(4)- 逃逸分析总结版
https://driverzhang.github.io/post/golang%E5%86%85%E5%AD%98%E5%88%86%E9%85%8D%E9%80%83%E9%80%B8%E5%88%86%E6%9E%90/总结版在函数中申请一个新的对象:如果分配在栈中,则函数执行结束可自动将内存回收,系统管理如果分配在堆中,则函数执行结束可交给GC(垃圾回收)处理,用户管理申请到 栈内存 好处:函数返回直接释放,不会引起垃圾回收,对性能没有影响。函数传递指针不一定比传值效率高。传递指针可原创 2020-10-07 15:08:05 · 265 阅读 · 0 评论 -
Golang编程-踩坑笔记(5)如何利用defer特性?- 抛异常和一些坑
defer执行时机Go官方文档中对defer的执行时机做了阐述,分别是包裹defer的函数返回时包裹defer的函数执行到末尾时所在的goroutine发生panic时利用defer抛异常如果巧妙的使用第三条特性,defer可以被用来当作golang版本的try-catch配合runtime库,能够追踪堆栈的内容/方法调用路径,和程序错误位置等。内置的 recover 函数可用于重新获得对异常程序的控制并恢复正常执行。调用 recover 将停止展开并返回传递给 panic 的参数。原创 2020-10-06 15:28:25 · 262 阅读 · 0 评论 -
堆与栈区别(OS层级)
堆栈空间分配① 栈 (操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。② 堆 (操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。堆栈缓存方式① 栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。② 堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。...原创 2020-10-05 20:48:49 · 375 阅读 · 0 评论 -
Golang 内存对齐视频
https://www.bilibili.com/video/BV1Ja4y1i7AF/简而言之就是注意写代码的时候要把相同类型的元素放在一起更进一步需要自己将结构体配对为32位或64位的整数倍有助于减少额外空间消耗原创 2020-09-29 15:27:51 · 123 阅读 · 0 评论 -
Golang web 踩坑笔记(4)- viper
viper是用来加载配置文件的框架,有了它就不用自己手写反射了。viper常用函数 viper.SetDefault("fileDir","./") viper.SetConfigFile("config.yaml") viper.AddConfigPath(".") viper.AddConfigPath("D:\\awesomeProject") err := viper.ReadInConfig() if err != nil{ panic(fmt.Errorf("Fatal e.原创 2020-09-28 20:04:50 · 2777 阅读 · 1 评论 -
Golang web 踩坑笔记(3)- gin
初学者需要对http协议有所了解,不然是搞不懂GET,POST这些方法在干什么的注册路由就是为url路径注册一个方法,使得浏览器每次访问这个路径,都直接运行这个方法。Web框架中常使用RESTful API,REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”或“表现层状态转化”。例如,我们现在要编写一个管理书籍的系统,我们可以查询对一本书进行查询、创建、更新和删除等操作,我们在编写程序的时候就要设.原创 2020-09-28 19:53:06 · 279 阅读 · 0 评论 -
Golang web 踩坑笔记(2)- Redis
var rdb *redis.Clientfunc getRedis() { rdb.Set("k1",1,0) res,err := rdb.Get("k1").Result() if(err == redis.Nil){ fmt.Println("name does not exist") }else if(err != nil){ fmt.Printf("%v \n",err) }else { fmt.Println(res) }}注意err需要判断两次在get()原创 2020-09-27 21:18:31 · 172 阅读 · 0 评论 -
Golang 字符串的连接方式
1.直接使用运算符加就完了,但是字符串属于不可变类型,复杂场景不要用,会导致频繁垃圾回收2.bytes.Buffer这种方法用于需要大量进行字符串拼接操作的场合,性能要大大优于第一种方法。// bytes.Buffer的0值可以直接使用var buff bytes.Buffer// 向buff中写入字符/字符串buff.Write([]byte("Hello"))buff.WriteByte(' ')buff.WriteString("World")// String() 方法获得拼原创 2020-09-27 17:21:46 · 313 阅读 · 0 评论 -
Golang初入编程-踩坑笔记(3)- 并发,优雅关闭
主函数也是线程,在不使用sync.WaitGroup的情况下,需要main等待goroutine完成,不然main完成就没了。主函数外只能放声明,不能赋值sync是synchronizing(使) 同步 的缩写wg.done()最好加deferchan需要makechan记得关闭多协程调度记得使用多路复用,select...原创 2020-09-23 21:42:34 · 222 阅读 · 0 评论 -
Golang初入编程-踩坑笔记(2)-函数式编程,反射
func可以当作关键字使用,比如在函数传入函数参数时,func和正常情况下的int形参是一个位置。传入函数参数时,由于函数参数也需要参数,那个参数也需要传入,或者新写一个也行构造函数尽量用指针,减少复制产生的内存消耗反射中 elem()函数用来解引用,如果要修改“反射类型对象”,其值必须是“可写的”(settable)结构体的字段都是首字母大写的(暴露到外部),因为struct中只有暴露到外部的字段才是“可写的”。反射的用法(每多加一层指针,就要多取一次地址)package mainimp.原创 2020-09-22 13:57:31 · 130 阅读 · 0 评论 -
Golang初入编程-踩坑笔记(1)
一定要自己动手写,不然使用的时候可能连等号的位置都搞不清楚该语言没有面向对象的概念,什么函数传什么参数返回什么值自己要多练习i++属于独立语句,不能和其他语句写到一起,自己占一行以下东东需要初始化(开辟空间),包括切片,指针,map(数组声明后,会填充默认值)函数可返回多个使用:=声明并赋值const常量(静态变量)关键字,内部可使用iota作为计数器赋值iota只能在常量的表达式中使用每次const出现都会使iota归零iota按行自增,所以同一行..原创 2020-09-20 21:55:36 · 1724 阅读 · 0 评论