Go Core - Array + Slice
|Word Count:0|Reading Time:1mins
Author: zhongmingmao
Copyright Notice: All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
Related Articles

2022-05-15
Go Core - List + Ring

2022-05-15
Go Core - Entity

2022-12-19
Go - Go Module
添加依赖 github.com/google/uuid main.go1234567891011package mainimport ( "github.com/google/uuid" "github.com/sirupsen/logrus")func main() { logrus.Println("hello, gomodule mode") logrus.Println(uuid.NewString())} go.mod 里的 require 字段中,没有任何 Module 提供了包 github.com/google/uuid 123$ go buildmain.go:4:2: no required module provides package github.com/google/uuid; to add it: go get github.com/google/uuid 手动 go get,下载依赖到本地 Module 缓存...

2023-04-01
Go Concurrency - Mutex Basic
基本概念临界区 临界区 - 共享资源 使用互斥锁,限定临界区只能同时由一个线程持有 当临界区被一个线程持有时,其它线程想进入,只能失败或者等待 直到持有的线程退出临界区后,其它等待的线程才有机会去竞争该临界区 在 Go 标准库中,使用 Mutex 来实现互斥锁 - 使用最为广泛的同步原语 同步原语:解决并发问题的基础数据结构 同步原语适用场景 共享资源 - Mutex / RWMutex 任务编排 - WaitGroup / Channel 消息传递 - Channel 基本用法Locker Locker 接口定义了锁同步原语的方法集 1234567package sync// A Locker represents an object that can be locked and unlocked.type Locker interface { Lock() Unlock()} Mutex12func (m *Mutex) Lock()func (m *Mutex) Unlock() 当一个 goroutine 通过 Lock...

2022-05-01
Go Engineering - Foundation - Log - Design
功能需求基础功能 支持基本的日志信息:时间戳、文件名、行号、日志级别、日志内容 支持不同的日志级别:Trace(可选)、Debug、Info、Warn、Error、Panic(可选)、Fatal 期望级别:glog.Info("This is info message") 开关级别:glog -v=4,只有日志级别高于等于 4 的日志才会被打印 支持自定义配置:不同的运行环境,需要不同的日志输出配置,在不重新编译代码的情况下,改变记录日志的行为 支持输出到标准输出(实时读取)和本地文件(采集索引) 高级功能 支持多种日志格式:TEXT、JSON 按日志级别分类输出:至少 Error 级别的日志输出到独立的文件中 支持结构化日志:使用 JSON 或者其它编码方式使日志结构化 支持日志轮转:借助 Linux Logrotate 来完成,不在日志包中实现 具备 Hook 能力 例如:当 Error 级别的日志产生时,发送邮件或者调用告警接口进行告警 日志告警的最佳方案:通过旁路功能,将日志采集到第三方组件(如 ES),日志包功能应尽量内聚 1234567891011121...

2022-12-22
Go - Variable
内存边界 在编程语言中,为了方便操作内存特定位置的数据,使用变量与特定位置的内存绑定 编译器或者解析器需要知道变量所能引用的内存区域边界 动态语言 解析器可以在运行时通过对变量赋值的分析,自动确定变量的边界 一个变量可以在运行时被赋予大小不同的边界 静态语言 编译器必须明确知道一个变量的边界才允许使用该变量 但编译器无法自动分析,因此边界信息必须由开发者提供 - 变量声明 在具体实现层面,边界信息由变量的类型属性赋予 变量声明 Go 是静态语言,所有变量在使用前必须先进行声明声明:告诉编译器该变量可以操作的内存的边界信息(由变量类型信息提供) 通用 变量声明形式与主流静态语言的差异 - 将变量名放在了类型前面(方便语法糖移除 type) 如果没有显式为变量赋予初值,Go 编译器会为变量赋予类型零值 1var a int // a 的初值为 int 类型的零值 0 Go 的每种原生类型都有其默认值,即类型零值复合类型(array、struct)变量的类型零值为组成元素都为零值的结果 原生类型 类型零值 整型 0 浮点 0.0 布尔 FALSE 字符...
Announcement
Things are always unexpected!






