Go 编程模式:错误处理
错误处理一直以一是编程必需要面对的问题,错误处理如果做的好的话,代码的稳定性会很好。不同的语言有不同的出现处理的方式。Go语言也一样,在本篇文章中,我们来讨论一下Go语言的出错出处,尤其是那令人抓狂的 if err != nil 。 在正式讨论Go代码里满屏的 if err != nil 怎么办这个事之前,我想先说一说编程中的错误处理。这样可以让大家在更高的层面理解编程中的错误处理。 C...
错误处理一直以一是编程必需要面对的问题,错误处理如果做的好的话,代码的稳定性会很好。不同的语言有不同的出现处理的方式。Go语言也一样,在本篇文章中,我们来讨论一下Go语言的出错出处,尤其是那令人抓狂的 if err != nil 。 在正式讨论Go代码里满屏的 if err != nil 怎么办这个事之前,我想先说一说编程中的错误处理。这样可以让大家在更高的层面理解编程中的错误处理。 C...
在本篇文章中,我会对Go语言编程模式的一些基本技术和要点,这样可以让你更容易掌握Go语言编程。其中,主要包括,数组切片的一些小坑,还有接口编程,以及时间和程序运行性能相关的话题。 Slice 首先,我们先来讨论一下Slice,中文翻译叫“切片”,这个东西在Go语言中不是数组,而是一个结构体,其定义如下: type slice struct { array unsafe.Point...
当单体数据库的读写能力成为系统瓶颈时,搭建数据库的主-从模式是一个很好的选择,通过实现读写分离,可以大幅度提升数据库的读写能力。 环境准备 使用docker安装两个mysql容器,分别映射到宿主机的3306、3307端口。 参考如下安装命令: docker run -d --restart=always --name mysql --privileged=true -v /da...
数据库产品有很多种:Redis,MySQL,Oracle,MongoDB,HBase等等。面对众多的存储技术,我们该如何进行技术选型呢? Redis 首先,Redis的使用场景最明确,作为高速缓存或key-value数据库使用,当作为key-value数据库使用时,一般会开启持久化存储,但它的持久化是以快照的形式存在的,所以在重启导致内存数据失效,尝试用本地持久化数据恢复时,可能...
依赖注入是一种消除类之间依赖关系的设计模式,它使客户端不在需要new依赖的对象,而是依靠Ioc容器将客户端的依赖通过构造函数或者属性的方式注入。 使用依赖注入的优点 遵循了控制反转的设计原则,上层不依赖于底层,而是依赖于抽象。减少了项目之间的耦合。 项目灵活性更高,应对业务变更可以快速修改。 减少代码量。 简易代码实现 public static class IocU...
为什么要使用消息队列 系统解耦,减少服务间的依赖。 异步性 流量的削峰填谷,可以让后端服务更加从容的应对流量压力 在使用消息队列的过程中,可能遇到哪些问题 降低了系统的可用性,mq挂掉,可能会导致系统不可用,所以需要搭建集群保证消息队列的高可用。 增加了系统的复杂度,需要考虑消息重复/丢失等问题。 数据一致性问题。如何保证数据的最终一致性。 消息队列中...
Linux用户管理 用户相关文件 /etc/passwd 用户信息文件 jason:x:500:500::/home/jason:/bin/bash 第一列:用户名 第二列:密码位。这里的密码仅仅做个占位,存放的并不是真正的密码。 第三列:用户 id,UID 为 0 表示是超级管理员账号。1-499 系统用户UID 。其中 1-99 是系统保留的账号,系统自动...
计算机硬件系统 计算机硬件系统主要由 运算器、控制器、存储器、输入设备与输出设备 五大部件组成。 运算器:CPU的核心组件之一,主要负责数据的加工处理,能够完成算术运算、逻辑运算等操作。它由 算术逻辑单元ALU、累加寄存器AC、数据缓冲寄存器DR、状态条件寄存器PSW等组成。 控制器:CPU的核心组件之一,主要由 程序计数器PC、指令寄存器IR、地址寄存器AR、指令译码...
什么是Http HTTP(超文本传输协议)是一个基于TCP/IP实现的,请求-响应的,无状态的,应用层协议。标准的客户端-服务器模型。HTTP协议定义了客户端和服务器之间交互的消息内容和步骤,首先,客户端会向服务器发送请求消息,请求消息包含的内容是“对什么”和“进行怎样的操作”两个部分。其中相当于“对什么”的部分称为URI(统一资源标识符),一般来说,URI的内容是一个存放网页数据的文件名...
tar 打包并压缩 tar -zcf a.tar.gz a.txt 解压 tar -zxvf a.tar.gz zip/unzip 安装zip/unzip yum install zip unzip -y zip压缩 zip -r a.zip a.txt unzip解压 unzip a.zip
ifcfg-ens33 是 CentOS/RHEL 系统中网卡配置文件的命名约定。在该文件中,您可以配置与特定网卡(例如 ens33)相关的网络参数。 操作步骤 打开ifcfg-ens33文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33 将BOOTPROTO配置修改为static BOOTPROTO="static"...
面向对象编程中,依赖、关联、聚合和组合是描述对象之间关系的常用概念。它们具有不同的含义和强度,以下是对它们的详细说明以及示例说明: 依赖(Dependency) 依赖表示一个对象(或类)在执行过程中需要另一个对象(或类)的支持或协助。它描述了一个对象(或类)对另一个对象(或类)的依赖关系。 依赖关系通常体现在一个对象(或类)通过参数、方法调用、接口实现等方式使用另一个对象(或类...
架构就是业务的正交分解。每个模块都有它自己的业务。 这里我们说的模块是一种泛指,它包括:函数、类、接口、包、子系统、网络服务程序、桌面程序等等。架构行为的三步曲:“需求分析”、“概要设计”、模块的 “详细设计”,背后都直指业务的正交分解,只是逐步递进,一步步从模糊到越来越强的确定性,直至最终形成业务设计的完整的、精确无歧义的解决方案。 框架体现需求泛化的能力,就是架构可以适应需求的变化。需...
系统的扩展性和弹性是两个关键的概念,用于描述系统在面对不同需求和负载时的能力和特性。虽然它们有一些相似之处,但在意义和应用上存在一些区别。 扩展性(Scalability): 扩展性是指系统能够有效地处理增加的负载或需求,而不会降低性能或功能。它关注系统在适应不同规模的增长时的能力。通常,扩展性是通过增加资源(如计算资源、存储容量、网络带宽等)来实现...
Docker是什么 Docker 是一个开源的应用容器引擎,其中包括镜像、容器、仓库等功能,目的就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的程序及其环境能够做到“一次封装,到处运行”。Docker实际上就相当于一个集装箱,它可以把不同的应用全都放在它的集装箱里面,并且以后有需要的时候,可以直接把集装箱搬到其他平台或者服务器上。残酷的是相比于容器本身,更有价值的是容器编...