Skip to content

Latest commit

 

History

History
54 lines (33 loc) · 2.58 KB

周元元-20180703.md

File metadata and controls

54 lines (33 loc) · 2.58 KB

LeetCode

题目: Peak Index in a Mountain Array

解题: Peak Index in a Mountain Array

英文技术文章

文章: How to access deeply nested JSON data using Go (lang)?

Go 是一个强类型语言,官方在解析 json 的时候都是定义 struct,然后用官方的 json 包去解析。但是对于比较复杂的 json 来说,定义 struct 确实有点累,不像 php 或者 perl 这样简单方便。

所以类似 json 的解析的工具应运而生,为了方便大家对复杂 json 的解析。

本篇文章主要介绍了 gojsonq 这个工具的使用,对于利弊和性能方面没有解释。而每一件事情必然有两面性,既然它可以带给你方便,必然要损失其他的一些东西换取。

学习新的技术技巧

Go 中 json 包中 omitempty 的作用:当 json 其中一个 field 为空的时候,在序列化 json 的时候就忽略这个 field

但是这个特性在某些情况下也会有坑

下面例子来自 网络博客

假设我们有一个社交类App,通过Restful API形式从服务端获取当前登录用户基本信息及粉丝数量。如果服务端对Response中User对象的定义如下:

type User struct {
    ID        int `json:"id"`                  // 用户id
    // 其它field
    FansCount int `json:"fansCount,omitempty"` // 粉丝数
}

如果正在使用App时一个还没有粉丝的用户,访问Restful API的得到Response如下:

{
    "id": 1000386,
    ...
}

这时候你会发现Response的User对象中没有fansCount,因为fansCount是个int类型且值为0,序列化的时候会被忽略。语义上,User对象中没有fansCount应该理解为粉丝数量未知,而不是没有粉丝。

如果我们希望做到能够区分粉丝数未知和没有粉丝两种情况,需要修改User的定义:

type User struct {
    ID        int  `json:"id"`                  // 用户id
    // 其它field
    FansCount *int `json:"fansCount,omitempty"` // 粉丝数
}

将FansCount修改为指针类型,如果为nil,表示粉丝数未知;如果为整数(包括0),表示粉丝数。

分享文章

微服务的反模式和陷阱