Skip to content

godicom

ReleaseCIGoDoc

godicom 用 Go 读取、修改和写入 DICOM 数据。组织里其余部分都建立在它之上。

bash
go get github.com/godicom-dev/godicom@latest

它是什么

一个通用 DICOM 框架,关心的是数据集 —— 磁盘上的字节、编码规则、数据字典,以及里面的 Pixel Data。它是 pydicom 的 Go 对照物,开发时对着 pydicom 的源码和测试夹具,而不是对着自己以为标准说了什么。

它有意不做什么

为了让项目规模可控,它不处理:

  • DICOM 网络通信 —— DIMSE、DICOMweb、与 PACS 交互。那是 gonetdicom 的事。
  • 具体 SOP Class 的细节 —— 没有按模态的 IOD 校验,没有 DICOMDIR / file-set 处理,没有结构化报告对象模型。

这些不是遗漏,而是明确记在 TODO.md 里的范围外或推迟项,并且有一条规则:没有真实使用者之前不开工。

内容
godicomDatasetFileDatasetDataElement、读写入口、ReadOptions / WriteOptionsDiagnostic
tag标签常量与关键字查询 —— tag.PatientNametag.Parsetag.Keyword
uidUID 常量、UID 字典,以及 GenerateUID
pixels原生与封装 Pixel Data 解码、LUT、色彩空间转换、显示打包
encaps封装 Pixel Data 的分帧 —— Basic Offset Table、fragment、Encapsulate / GenerateFrames
dicomjsonDICOM JSON Model,含 BulkDataURI 处理
cmd/godicom命令行工具

本站相关页面

  • 数据集 —— 读取、写入、getter 与 setter、序列,以及编码选项
  • 诊断 —— 一个被截断或畸形的文件会告诉你什么,以及写出时对应的钩子
  • Pixel Data —— 帧、原始与显示输出、LUT、压缩
  • DICOM JSON —— JSON Model,双向
  • 日志 —— log/slog,以及读取器发出的属性键
  • 命令行工具 —— godicom showreadreadcopy

传输语法支持

传输语法
Explicit / Implicit VR Little Endian
Explicit VR Big Endian
Deflated Explicit VR Little Endian
RLE Lossless
JPEG Baseline / Extended / Lossless
JPEG-LS
JPEG 2000 / HTJ2K

平台与二进制体积

Go 能编译的地方,godicom 都能编译、能运行。原生编解码器为六个平台提供预编译库 —— linux/amd64linux/arm64darwin/amd64darwin/arm64windows/amd64windows/arm64。表外的平台上,读写照常工作,只有那四种依赖原生 编解码器的传输语法会返回一个包装了 ErrUnsupportedPlatform 的 error。完整的降级 说明见生态页

一个二进制里只会带当前平台的那一对库,绝不会带全部十二个//go:embed 指令都 放在按平台区分的 build tag 后面,所以链接器只能看到当前目标平台对应的那一对:

cmd/godicomgo build体积内嵌的库
linux/amd6411.0 MB3.7 MB
linux/arm6410.4 MB3.4 MB
darwin/amd6410.4 MB2.7 MB
darwin/arm649.8 MB2.3 MB
windows/amd6410.5 MB2.6 MB
windows/arm649.8 MB2.4 MB
js/wasm8.3 MB
linux/3866.4 MB

十二个库加起来是 17.0 MB。如果无条件全部内嵌,每个二进制都要多出大约 13.3 MB —— linux/amd64 的构建会变成 24.3 MB,而不是 11.0 MB。想确认你自己的构建到底嵌了 什么:

bash
go list -f '{{.EmbedFiles}}' github.com/godicom-dev/golibjpeg/native

没有 cgo,也不需要装任何工具链;库是通过 purego 加载的,交叉编译一条普通的 go build 就够了。

CI 会为每个 release 交叉编译 windows/386linux/386linux/arm(含 GOARM=5)、linux/riscv64linux/ppc64lejs/wasmwasip1/wasm,并在 32 位上跑完整测试套件 —— DICOM 的值长度是无符号 32 位,所以 32 位目标正是宽度错误 会暴露出来的地方。linux/mipslinux/mipsle 目前编译不过,因为 purego 还不 支持它们。

仓库文档

生成的 API 参考是签名的权威;下面这些是意图的权威:

测试夹具

参考夹具是一个 git submodule,构建时可选,但跑完整测试套件需要它:

bash
git clone --recurse-submodules https://github.com/godicom-dev/godicom.git

基于 MIT 许可证发布。