Go 语言历史与设计哲学

Go 是怎么来的? 第一次打开 .go 文件的 Java 程序员,通常会愣住。 type Handler struct { db *sql.DB } func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { users, err := h.queryUsers(r.Context()) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } json.NewEncoder(w).Encode(users) } 脑子里弹出一串问题:class 在哪?构造函数在哪?try-catch 在哪?implements 在哪?为什么 err 是个返回值? 这很正常。写了 5 年 Spring Boot,习惯了 @Autowired 、 @Transactional 、 try-catch-finally 之后,Go 看起来像删掉了 90% 语法的 Java。但这不是残缺,是刻意的——Go 的设计哲学就是 少即是多 。 诞生:三个大佬对 C++ 的"不满" 2007 年,Google 的三个工程师——Robert Griesemer(Google V8 引擎参与者)、 Rob Pike(Unix 元老,Plan 9 作者)、 Ken Thompson(Unix 之父,B 语言/C 语言设计者)——在等 C++ 编译的时候,决定搞点事情。 ...

一月 31, 2023 · 5 分钟 · 902 字 · yaomingye

Jackson vs Fastjson2 终极对比

Jackson vs Fastjson2 📖 前置阅读:本文假设读者已经阅读过前两篇——如果还不熟悉 Jackson 或 Fastjson2,建议先阅读 序列化本质与 Jackson 全操作指南 和 Fastjson 进化史:从 1.x 漏洞到 Fastjson2。 一、⚡ 同一个对象,两种写法 先在同一个 Order 类上对比两套注解——直观感受差异: // ===== Jackson 写法 ===== @JsonPropertyOrder({"order_id", "user_id", "product_name", "amount", "create_time"}) @JsonIgnoreProperties(ignoreUnknown = true) @JsonInclude(JsonInclude.Include.NON_NULL) public class Order { @JsonProperty("order_id") // Jackson: 改字段名 private Long orderId; @JsonProperty("user_id") private Long userId; @JsonProperty("product_name") private String productName; @JsonFormat(shape = JsonFormat.Shape.STRING) // Jackson: 金额用字符串 private BigDecimal amount; @JsonIgnore // Jackson: 忽略字段 private String internalNote; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") // Jackson: 日期格式 private LocalDateTime createTime; } // ===== Fastjson2 写法 ===== @JSONType(orders = {"order_id", "user_id", "product_name", "amount", "create_time"}) public class Order { @JSONField(name = "order_id") // Fastjson2: 改字段名 private Long orderId; @JSONField(name = "user_id") private Long userId; @JSONField(name = "product_name") private String productName; @JSONField(serializeFeatures = JSONWriter.Feature.WriteBigDecimalAsPlain) private BigDecimal amount; // Fastjson2: 金额不用科学计数法 @JSONField(serialize = false) // Fastjson2: 忽略字段 private String internalNote; @JSONField(format = "yyyy-MM-dd HH:mm:ss") // Fastjson2: 日期格式 private LocalDateTime createTime; } Facjson2 不需要 @JsonIgnoreProperties——它默认忽略未知字段。Jackson 必须在每个类上加这个注解或全局配置。对于有 50+ 个 DTO 类的项目来说,这少写不少样板。 ...

十一月 27, 2022 · 5 分钟 · 875 字 · yaomingye
Cat Radio