Go问答技术文章
-
从 BitsSequence、BitsMachineID 和 TimeUnit 三个参数出发,计算 Go sonyflake 的单窗口容量、理论发号速率与生命周期,给出配置示例和参数取舍方法。351 收藏 -
说明 sonyflake 的时间、序列号和机器编号如何共同组成唯一 ID,解释默认私有 IP 低位的部署风险,并给出 MachineID 与 CheckMachineID 的启动检查思路。320 收藏 -
Go ksuid 的 KSUID 时间部分适合做按生成时间的大致排序线索,但只有秒级粒度且依赖生成机时钟,不能直接替代业务事件的精确发生时间。本文说明 Time 与 Timestamp 的区别,并给出事件时间单独落库的建模方式。191 收藏 -
KSUID默认生成方式使用秒级时间戳,同秒排序由随机载荷决定。本文用确定性构造解释比较结果,给出独立业务序号的排序示例,并说明游标兼容、时钟与Sequence的适用边界。200 收藏 -
KSUID由大端时间戳和随机载荷组成,27字符Base62文本保留了固定二进制值的字典序。本文用Go示例说明文本排序、字节排序与大致生成时间的关系,并解释时钟偏差、同一时间戳和游标截断的边界。426 收藏 -
Go oggvorbis.Reader.Read 返回的是按声道交错排列的 float32 样本值。本文用双声道示例说明如何按 L0、R0、L1、R1 拆分左右声道,并处理短读、EOF、声道数和完整帧边界。438 收藏 -
Go oggvorbis 可以从任意 io.Reader 解码,但 Length、Position 和 SetPosition 依赖底层 io.Seeker。本文对比流式输入与可定位输入,解释 Read 返回值、样本单位和 ReadAll 的内存边界。200 收藏 -
oggvorbis的Length和Position以采样帧计数,Read返回值则是交错float32元素数量。本文给出多声道单位换算、进度快照示例,以及未知长度、缓冲区和定位的边界处理。476 收藏 -
Go flac 的 StreamInfo.NSamples 表示每个声道的时间轴样本数,不是所有声道采样值的总和。本文区分 NSamples、NChannels、BlockSize 与 Subframe.NSamples,说明统计时长、展开缓冲区和逐帧计数的正确口径。240 收藏 -
Go flac 的Num在固定块与可变块模式下分别表示帧序号和首样本编号。本文说明名义块长换算、多声道时间轴与v1.0.14短尾帧边界。416 收藏 -
Go flac 读取 FLAC 时,StreamInfo 和其它元数据块属于流描述信息,音频帧才承载连续采样数据。本文按 Parse/ParseFile、New/Open、Next/ParseNext 的职责拆开说明选择方法。389 收藏 -
Go go-audio/wav 的 Encoder.Close 会回写 RIFF 与 PCM data 长度,因此输出必须支持 io.WriteSeeker。本文用 os.File 示例说明 Write、Close 和底层文件关闭的正确顺序,并比较内存与管道输出的边界。282 收藏 -
Go go-wav 中,WAV 每帧字节数由每通道采样字节数和声道数共同决定。本文用公式解释位深、Block Align、Byte Rate 的关系,并给出读取 Decoder 字段的示例。316 收藏 -
go-audio/wav 的 PCMBuffer 和 FullPCMBuffer 都能读取 WAV 样本,但前者由调用方控制批次和内存,后者一次性聚合全部 PCM。本文从内存上涨的故障症状出发,说明两种方法的触发条件、循环写法和选择清单。264 收藏 -
go-mp3 是纯 Go 的 MP3 解码器,负责把输入源解码为 16 位小端双声道 PCM 数据,并不直接打开声卡或播放设备。本文用职责边界、读取示例和排障清单说明如何把解码结果交给独立播放后端。447 收藏