Go语言实战技巧
文章平均质量分 59
JackMa_
每个优秀的人,都有一段沉默的时光,那段时光,是付出了很多努力,却得不到结果的日子,我们把它叫做扎根。
展开
-
Golang中的深拷贝与浅拷贝
一、概念1、深拷贝(Deep Copy)拷贝的是数据本身,创造一个样的新对象,新创建的对象与原对象不共享内存,新创建的对象在内存中开辟一个新的内存地址,新对象值修改时不会影响原对象值。既然内存地址不同,释放内存地址时,可分别释放。值类型的数据,默认全部都是深复制,Array、Int、String、Struct、Float,Bool。2、浅拷贝(Shallow Copy)拷贝的是数据地址,只复制指向的对象的指针,此时新对象和老对象指向的内存地址是一样的,新对象值修改时老对象也会变化。释放内转载 2022-05-22 22:35:53 · 10305 阅读 · 0 评论 -
Go使用标准库net/http发送Post请求
发送Post请求net/http发送Post请求很容易,下面的代码我们和Get请求一样,把响应的内容的信息打印出来了,细心的朋友可能会发现,在参数传递、和结果解析时用了三种不同的方式,我们将在后面进行解析。示例代码package mainimport ( "bytes" "fmt" "io/ioutil" "net/http" "reflect" "strings")func main() { resp, err := http.Post("http://httpbin转载 2022-04-10 15:37:53 · 2065 阅读 · 0 评论 -
Go使用标准库net/http发送Get请求
发送Get请求使用Golang发送get请求很容易,我们还是使用http://httpbin.org作为服务端来进行演示。package mainimport ( "bytes" "fmt" "log" "net/http" "net/url" "reflect")func main() { resp, err := http.Get("http://httpbin.org/get?name=Detector") if err != nil { log.Printl转载 2022-04-10 15:36:40 · 1438 阅读 · 0 评论 -
Go中struct转map的三种方式
struct转map使用json模块直接使用json.Marshal方法来强制转化struct。参考代码:func JSONMethod(content interface{}) map[string]interface{} { var name map[string]interface{} if marshalContent, err := json.Marshal(content); err != nil { fmt.Println(err) } else { d :=转载 2022-04-10 15:15:01 · 6219 阅读 · 0 评论 -
Go 语言里怎么正确实现枚举?答案藏着官方的源码里
在编程领域里,枚举是用来表示只包含有限数量的固定值的类型,在开发中一般用于标识错误码或者状态机。拿一个实体对象的状态机来说,它通常与这个对象在数据库里对应记录的标识状态的字段值相对应。在刚开始学编程的时候,你一定写过,至少见过直接使用魔术数字进行判断的代码。啥叫魔术数字呢,举个例子,要置顶一个文章的时候先判断文章是不是已发布状态。if (article.state == 2) { // state 2 代表文章已发布}假如我们的代码里没有注释,或者等我们项目的代码里充斥着这些魔术数字转载 2022-04-10 14:58:26 · 482 阅读 · 1 评论 -
Go编码JSON时忽略掉指定字段
并不是所有数据我们都期望编码到 JSON中暴露给外部接口的,所以针对一些敏感的字段我们往往希望将其从编码后的 JSON数据中忽略掉。那么上面也说了只有导出的结构体成员才会被编码,有的同学会问我直接用小写的字段名不行吗?可是为了未导出字段只能在包内访问,像这种携带内部敏感数据的往往都是应用的基础数据,由项目的公共包来提供的。那么怎么技能维持字段的导出性又能让其在 JSON数据中被忽略掉呢? 还是使用结构体的标签进行注解,比如下面定义的结构体,可以把身份证 IdCard字段在 JSON数据中去掉:type原创 2022-04-10 14:51:17 · 2619 阅读 · 0 评论 -
Go解决空切片在JSON里被编码成null
因为切片的零值为 nil,无指向内存的地址,所以当以这种形式定义 varf[]int初始化 slice后,在JSON中将其编码为 null,如果想在 JSON 中将空 slice 编码为 []则需用make初始化 slice为其分配内存地址:运行下面的例子可以看出两点的区别:var f1 []stringf2 := make([]string, 0)json1, _ := json.Marshal(Person{f1})json2, _ := json.Marshal(Person{f2}原创 2022-04-10 14:50:38 · 3414 阅读 · 0 评论 -
Go自定义JSON键名
我们先从最常见的一个问题说,首先在Go 程序中要将数据编码成JSON 格式时通常我们会先定义结构体类型,将数据存放到结构体变量中。 type Address struct { Type string City string Country string } type CreditCard struct { FirstName string LastName string Addres原创 2022-04-10 14:41:50 · 563 阅读 · 0 评论