Viper viper我们将使用 Viper 包来作为yaml 和 config 信息的基础库。 Viper 是 Go 生态圈里一个很知名的项目,在 GitHub 上有接近 1.8 万个 star。 它支持以下特性: 设置默认值(存入时设置) 支持格式配置信息的格式包括 JSON、TOML、YAML、HCL、envfile 和 Java properties 实时监控和重新读取配置文件(可选) 从环境变量中 2023-01-17 go
04-增删查改数据表 04-增删查改数据表添加数据1insert into 表名 [(字段名 [,字段名] ...)] values (值的列表) 插入数据1234567891011121314151617insert into demo.goodsmaster2( itemnumber, barcode, goodsname, specification, uint, price)values( 4, & 2023-01-16 MySQL
02 | Mutex:庖丁解牛看实现 02 | Mutex:庖丁解牛看实现Mutex架构演进分为四个阶段: 初版:flag标记锁是否被持有 给新人机会:新的goroutine有机会参与竞争锁 多给些机会:新来的和被唤醒的goroutine,但带来饥饿问题 解决饥饿:解决竞争问题,不让goroutine长久等待 初版互斥锁通过flag变量,标记当前的锁是否被某个goroutine持有,1为已经被持有,其他goroutine只能等待 2023-01-10 Concurrency
01 | Mutex:如何解决资源并发访问问题? 01-Mutex:如何解决资源并发访问问题互斥锁的实现机制临界区在并发编程中,如果程序中的一部分会被并发访问或修改,那么,为了避免并发访问导致的意想不到的结果,这部分程序需要被保护起来,这部分被保护起来的程序,就叫做临界区。 临界区就是一个被共享的资源,或者说是一个整体的一组共享资源,比如对数据库的访问、对某一个共享数据结构的操作、对一个 I/O 设备的使用、对一个连接池中的连接的调用,等等。 多 2023-01-10 Concurrency
03 创建和修改数据 03-创建和修改数据表创建数据表1234567CREATE TABLE <表名> ( 字段名1 数据类型 [字段级别约束] [默认值], 字段名2 数据类型 [字段级别约束] [默认值], ...... [表级别约束] ); “约束”限定 了表中数据应该满足的条件。MySQL 会根据这些限定条件,对表的操作进行监控,阻止破坏约束条件的操作执行,并提示错误,从而确保表中数据的 2023-01-09 MySQL
02 定义字段类型 02-定义字段类型整型类型包括TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)和BIGINT 商品编号一般采用INT 浮点数类型和定点数类型浮点数类型分为FLOAT、DOUBLE、REAL FLOAT表示单精度浮点数 DOUBLE表示双精度浮点数 REAL默认是DOUBLE,如果把SQL模式设定为REAL_AS_FLOAT,那么REAL就是FLOAT类型 1SE 2023-01-09 MySQL
01 完整的数据存储过程 01-完整的数据存储过程数据存储分为4个步骤: 创建数据库 确认字段 创建数据表 插入数据 创建Mysql数据库从系统架构层次上看,Mysql数据库系统从小大大依次为: 数据库服务器 数据库 数据表 数据表的行与列 数据库是Mysql的最大存储单元 1.创建数据库1CREATE DATABASE demo; 2.查看数据库1SHOW DATABASES; 创建数据表123456CRE 2023-01-09 MySQL
链表 链表 链表由一个个数据节点组成,是一个递归结构,要么为空,要么存在就是只想另一个数据节点的引用 123456789101112131415161718192021222324252627282930313233343536package mainimport( "fmt")type LinkNode struct { Data int64 NextNode 2022-12-26 Data Structure
Go项目包管理方法 企业级Go项目包管理方法Go包管理困境 没有统一的包管理方式 包之间的依赖关系很难维护 如果同时需要一个包的不同版本,很麻烦 尝试解决 godep、govendor、glide 未彻底解决GOPATH问题 使用起来麻烦 Go Modules 本质上Go包就是一个项目的源码 go mod作用:将Go包和Git项目关联起来 Go包的版本就是git项目的Tag go mod解决:需要哪个git项目的 2022-12-18 go
Go程序如何运行 Go程序如何运行?Go程序的入口第一行代码在runtime包中 runtime/rt0_XXX.s 读取命令行参数 复制参数数量argc和参数值argv到栈上 初始化g0执行栈 g0是为了调度协程而产生的协程 g0是每个go语言的第一个协程 运行时检测 检查各类型的长度 检查指针操作 检查结构体字段的偏移量 检查atomic原子操作 检查CAS操作 检查栈大小是否是2的幂次 参数初始化 2022-12-17 go