随笔分类 - golang
初学者的探索
摘要:1 属性 模式名 LDAP注入 模式ID 参考 关键词 注入,分级目录结构,数据查询 STRIDE 信息泄露,篡改,权限提升 分类 Web攻击方法 [ 回目录 ]2 概述 攻击模式介绍 LDAP(Lightweight Directory Access Protocol):轻量级目录访问协议,是一种
阅读全文
摘要:package main import ( "fmt" "strconv" "strings" "testing" ) type testStruct1 = struct { testId int inputStr inputStruct want string } type inputStruct
阅读全文
摘要:1 sync.Pool 的使用场景 一句话总结:保存和复用临时对象,减少内存分配,降低 GC 压力。 举个简单的例子: type Student struct { Name string Age int32 Remark [1024]byte } var buf, _ = json.Marshal(
阅读全文
摘要:1. 背景 类型别名(type aliases)原本是要在 Go 1.8 发布时推出的。但是由于一些争议和实现上的问题,Go 团队把它推迟到了 Go 1.9。 2.目的 这一特性其实是为开发者们的代码库重构准备的。代码重构是对代码的重新组织,以及这种重组与代码包之间的关系的重新思考和修改过程。代码重
阅读全文
摘要:1 是否有反序列化漏洞? 1.1 先看java的反序列化漏洞 来源: https://xz.aliyun.com/t/2041 简单的反序列化漏洞demo 在Java反序列化中,会调用被反序列化的readObject方法,当readObject方法书写不当时就会引发漏洞。 PS:有时也会使用read
阅读全文
摘要:1.1.序列化反序列化是什么(what) 序列化:对象序列化的最主要的用处就是在传递和保存对象的时候,保证对象的完整性和可传递性。序列化是把对象转换成有序字节流,以便在网络上传输或者保存在本地文件中。核心作用是对象状态的保存与重建。 反序列化:客户端从文件中或网络上获得序列化后的对象字节流,根据字节
阅读全文
摘要:摘要:go结构体方法未使用指针,结构体实例的锁失效 【问题描述】 go结构体方法未使用指针,结构体实例的锁失效 【错误代码片段】 给结构体定义一把锁 在函数中调用锁 实测锁失效,仍存在资源竞争,导致请求失败的情况 【原因分析及推荐写法】 结构体方法中未使用指针,参数传入方式是拷贝一个新实例c,因此,
阅读全文
摘要:在第一篇文章中提到过,为了让代码可测,需要用依赖注入的方式来构建我们的对象,而通常我们会在main.go做依赖注入,这就导致main.go会越来越臃肿。为了让单元测试得以顺利进行,main.go牺牲了它本应该纤细苗条的身材。太胖的main.go可不是什么好的信号,本篇将介绍依赖注入框架(wire),
阅读全文
摘要:在上一篇,介绍了表格驱动测试方法和gomock测试框架,大大提升了测试效率与质量。本篇将介绍在测试中引入断言(assertion),进一步提升测试效率与质量。 为什么需要断言库 我们先来看看Go标准包中为什么没有断言,官方在FAQ里面回答了这个问题。 golang.org/doc/faq#ass…
阅读全文
摘要:通过阅读上一篇文章,相信你对怎么做单元测试已经有了初步的概念,可以着手对现有的项目进行改造并开展测试了。学会了走路,我们尝试跑起来,本篇主要介绍gomock测试框架,让我们的单元测试更加有效率。 表格驱动测试方法(Table Driven Tests) 当针对某方法进行单元测试的时候,通常不止写一个
阅读全文
摘要:单元测试是代码质量的保证。本系列文章将一步步由浅入深展示如何在Go中做单元测试。 Go对单元测试的支持相当友好,标准包中就支持单元测试,在开始本系阅读之前,需要对标准测试包的基本用法有所了解。 现在,我们从单元测试的基本思想和原理入手,一起来看看如何基于Go提供的标准测试包来进行单元测试。 单元测试
阅读全文
摘要:阅读用时:4分钟 导语 “成熟的工具,要学会自己写代码”。本文介绍了 Go 依赖注入工具 [[Wire]] 及其使用方法,以及在实践中积累的各种运用技巧。当代码达到一定规模后,[[Wire]] 在组件解耦、开发效率、可维护性上都能发挥很大的作用,尤其在大仓场景。 依赖注入 当项目变得越来越大,代码中
阅读全文
摘要:1.go 采用c 的err方法,但是容易产生大量的外部判断。 package killer import "fmt" type Book struct { Name string Price int Store int Member int } func clientExample() { book
阅读全文
摘要:1. Golang里面没有构造函数,但是Golang却可以像C++一样实现类似继承、构造函数一样等面向对象编程的思想和方法 Golang里面要实现相关的构造函数定义可以通过通过new来创建构造函数, 通过new一个对象,或者利用Golang本身的&方式来生成一个对象并返回一个对象指针 package
阅读全文
摘要:在 Go 中,可以使用类型为 map[T]bool 的映射来判断切片中是否包含某个元素。 例如,假设你想要判断整型切片 s 中是否包含元素 x。你可以这样做: // 声明一个名为 m 的映射,其中键的类型为 int,值的类型为 bool。 m := make(map[int]bool) // 将 s
阅读全文
摘要:本文译自:How To Close Channels in Golang Elegantly。几天前,我写了一篇文章来说明golang中channel的使用规范。在reddit和HN,那篇文章收到了很多赞同,但是我也收到了下面几个关于Go channel设计和规范的批评: 在不能更改channel状
阅读全文
摘要:原始依赖管理方式 1.Go语言可以利用本身的能力做基础依赖管理,几个重要的组件包括GOPATH工作目录,Go命令工具(get install build)等,通过go get下载依赖包的最新版本到GOPATH指定目录。 Go语言有个重要的环境变量 GOPATH,保存工作目录路径(working sp
阅读全文
摘要:close函数是用于关闭通道的。官方解释(摘自close函数源代码注释): The close built-in function closes a channel, which must be eitherbidirectional or send-only. It should be execu
阅读全文
摘要:排除应用程序故障是比较复杂的,特别是处理像 Go 这样的高并发语言。它更容易在具体位置使用 print 打印语句来确定程序状态,但是 这个方法 很难根据条件发展去动态响应 你的代码 。 调试器提供了一个强大得令人难以置信的故障排除机制。添加排除故障的代码可以巧妙地影响到应用程序该如何运行。调试器可以
阅读全文