Go实战抢红包系统(四) - 基础实施层coding(上)

简介: Go实战抢红包系统(四) - 基础实施层coding(上)

1 Go的枚举

1.1 定义常数实现枚举

◆ 类型别名的形式来声明类型

◆ iota来自增和自动赋值

1.png

显然输出为2

1.png

这样亦可.

1.2 何时可用iota ,何时又不可用iota呢?

◆ 无状态且非持久化,可以使用iota

◆ 有状态或者需要持久化,不能使用iota

1.3 显式iota定义

image.png

定义好之后,值不可再改变!

2 在Go中如何使用JSON

2.1 标准库内建的JSON包

image.png

默认使用的JSON字段名称是它的Field名称


2.2 并非任何类型都可序列化

◆ 支持string、 bool、 数字类型、数组和切片、结构体、map

◆ Channel、complex、 function 类型无法进行json序列化

◆ 结构体中的循环数据结构,序列化时不会被处理

2.3 结构体中自定义字段名称

◆ JSON tag key : name,[omitempty,-]

◆ [string]标记 , 定义bool,浮点,整数类型使用字符串编码

◆ 临时添加字段:内嵌结构体,合并多个结构体

2.3.1 序列化演示

  • demo代码-json.go

1.png

运行结果

image.png

对name进行自定义

1.png

可以发现age无法实现序列化导出,将其改为大写即可

1.png

其中的omitempty可以过滤空值(包括0),于是结果中不再包含age信息

1.png

有-不会序列化

1.png

去除-即可

image.png

整型加上string会以字符串形式序列化

image.png

2.3.2 反序列化演示

image.png

无法序列化id,所以要求json一定要与结构体中数据类型保持一致

image.png

2.4 高性能JSON库 - jsoniter [json-iterator]

◆ 快,并且更快

◆ 支持java和go

◆ 百分百兼容JSON标准库, 一行代码迁移到jsoniter

◆ 安装: go get github.com/json-iterator/go

3 config 配置

3.1 分类标准

内容

静态和动态

环境

开发、测试、灰度、生产

形式

本地文件和分布式服务

格式

ini > properties > yaml > toml > xml > json(推荐度排序)

用途 - 程序/应用级别

◆ 配置文件命名规范

前缀+[-_ ]+功能

◆ 程序级别

可以不分组,比如: boot.ini,config.ini

◆ 应用级别分组

比如app-mysql.properties

环境来变量化配置项

◆ 不同环境使用不同的配置文件

◆ 变量化因环境不同的可变配置项

3.2 统一配置工具库 - props 设计

◆ 各种配置源抽象或转换为key/value结构


◆ 支持prop,ini,zk,consul.etcd,nacos


◆ 支持unmarshal


◆ props配置客户端工具库加持+ INI格式


◆ INI文件由节、键、值组成


◆ INI格式三要素 :节、参数(key/value)、注释


◆ section :方括号包围,比如: [mysql]


◆ 参数: key=value ,有些工具支持冒号分割


◆ 注释,使用;,有些编辑器和工具支持#


◆ Section作为分组


◆ props配置客户端使用完整的key来解释


◆ 完整的key由Section和参数key组成 , .分割

image.png


目录
相关文章
|
1月前
|
运维 监控 Go
Go语言微服务实战与最佳实践
【2月更文挑战第14天】本文将深入探讨使用Go语言进行微服务实战中的最佳实践,包括服务拆分、API设计、并发处理、错误处理、服务治理与监控等方面。通过实际案例和详细步骤,我们将分享如何在Go语言环境中构建高效、稳定、可扩展的微服务系统。
|
23天前
|
存储 安全 编译器
掌握Go语言:精通Go语言范围(range),高级应用及进销存系统实战(25)
掌握Go语言:精通Go语言范围(range),高级应用及进销存系统实战(25)
|
1月前
|
设计模式 缓存 安全
一篇文章带你吃透Go语言的Atomic和Channel--实战方法
一篇文章带你吃透Go语言的Atomic和Channel--实战方法
29 0
|
1月前
|
SQL 机器学习/深度学习 缓存
Go语言Web应用实战与案例分析
【2月更文挑战第21天】本文将通过实战案例的方式,深入探讨Go语言在Web应用开发中的应用。我们将分析一个实际项目的开发过程,展示Go语言在构建高性能、可扩展Web应用方面的优势,并分享在开发过程中遇到的问题和解决方案,为读者提供宝贵的实战经验。
|
1月前
|
关系型数据库 MySQL 数据库连接
实战演练:使用Go语言和ORM框架与数据库进行交互
【2月更文挑战第13天】本文将通过一个实战演练,展示如何使用Go语言和ORM(对象关系映射)框架与数据库进行交互。我们将选择一个流行的ORM框架,如GORM,来完成这个任务。通过实际编码,我们将演示如何连接数据库、执行CRUD操作、处理错误和异常,并展示ORM框架如何简化数据库操作过程。
|
1月前
|
JSON Go API
Go语言网络编程:HTTP客户端开发实战
【2月更文挑战第12天】本文将深入探讨使用Go语言开发HTTP客户端的技术细节,包括发送GET和POST请求、处理响应、错误处理、设置请求头、使用Cookie等方面。通过实例演示和代码解析,帮助读者掌握构建高效、可靠的HTTP客户端的关键技术。
|
1月前
|
Java Go 调度
Go语言并发性能提升实战
【2月更文挑战第11天】Go语言以其出色的并发处理能力在高性能应用中占据了一席之地。然而,要想充分利用Go的并发优势,实现性能的最大化,还需要掌握一些关键的优化技巧。本文将深入探讨Go语言并发性能提升的关键技术,包括goroutine调度、channel使用、sync原语选择等方面,帮助开发者更好地理解和优化Go程序的并发性能。
|
1月前
|
设计模式 Java Go
Go语言高级面向对象编程技巧与实战案例
【2月更文挑战第10天】本文将深入探讨Go语言中的高级面向对象编程技巧,并通过实战案例展示如何应用这些技巧解决实际问题。我们将了解如何使用设计模式、测试与调试面向对象程序、性能优化与内存管理等高级话题,以提升Go语言编程的水平和代码质量。
|
2月前
|
存储 缓存 网络协议
Go语言并发编程实战:构建高性能Web服务器
【2月更文挑战第6天】本文将通过构建一个高性能的Web服务器实战案例,深入探讨如何在Go语言中运用并发编程技术。我们将利用goroutine和channel实现高效的请求处理、资源管理和并发控制,以提升Web服务器的性能和稳定性。通过这一实战,你将更好地理解和掌握Go语言在并发编程方面的优势和应用。
|
2月前
|
设计模式 测试技术 Go
Go 项目必备:Wire 依赖注入工具的深度解析与实战应用
在现代软件开发中,依赖注入(Dependency Injection,简称 DI)已经成为一种广泛采用的设计模式。它的核心思想是通过外部定义的方式,将组件之间的依赖关系解耦,从而提高代码的可维护性、可扩展性和可测试性。然而,随着项目规模的增长,手动管理复杂的依赖关系变得日益困难。这时,依赖注入代码生成工具就显得尤为重要。在众多工具中,Wire 以其简洁、强大和易用性脱颖而出,成为 Go 语言项目中的宠儿。本文将带你深入了解 Wire 的安装、基本使用、核心概念以及高级用法,并通过一个实际的 web 博客项目示例,展示如何利用 Wire 简化依赖注入的实现。准备好了吗?让我们开始这场代码解耦的奇