go与c# 及nats和rabbitmq交互

1)c#中的

复制代码
DateTime.Now.ToBinary() 

go中实现

复制代码
// C# Time Tick = 100纳秒
const CSharpTickNanos int64 = 100

// C# 的时间起点:0001年1月1日 00:00:00 UTC
var CSharpEpoch time.Time = time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC)

// Unix Epoch (1970-01-01 00:00:00 UTC) 相对于 C# Epoch (0001-01-01 00:00:00 UTC) 的 Ticks 数量
// 这是一个精确的常量,用于修正 Go 语言 time.Time 内部表示的不足。
const UnixEpochToCSharpEpochTicks uint64 = 621355968000000000

// 标志位掩码
const (
	KindMask  uint64 = 0xC000000000000000 // 1100...
	KindLocal uint64 = 0x8000000000000000
	KindUtc   uint64 = 0x4000000000000000
)

// ToBinary 模拟 C# 的 DateTime.Now.ToBinary() 方法。
// 核心逻辑:将本地时间减去其时区偏移量,得到一个等效的 UTC 时间点,
// 然后计算该 UTC 时间点距离 C# Epoch 的刻度数,并编码 KindLocal。
func ToBinary(t time.Time) int64 {
	// 1. 确保时间点是 UTC,这是 C# ToBinary() 的核心步骤。
	//    t.In(time.UTC) 确保了时区转换的正确性,包括夏令时。
	utcTime := t.In(time.UTC)

	// 2. 获取时间点距离 Unix Epoch (1970) 的纳秒数
	nanosSinceUnixEpoch := utcTime.UnixNano()

	// 3. 将纳秒转换为 Ticks
	ticksSinceUnixEpoch := uint64(nanosSinceUnixEpoch / CSharpTickNanos)

	// 4. 加上 Unix Epoch 之前的 Ticks 偏移量,得到 Ticks Since C# Epoch
	ticksSinceCSharpEpoch := ticksSinceUnixEpoch + UnixEpochToCSharpEpochTicks

	// 5. 编码 Kind 信息 (Local)
	binaryValue := ticksSinceCSharpEpoch | KindLocal

	return int64(binaryValue)
}

主要问题

C# 的时间起点:0001年1月1日 00:00:00 UTC

go的计时起点:Unix Epoch (1970-01-01 00:00:00 UTC)

相对于 C# Epoch (0001-01-01 00:00:00 UTC) 的固定偏移量

const UnixEpochToCSharpEpochTicks uint64 = 621355968000000000

2)masstransit的exchange类型,publish和send到队列

c#中 send到队列 没有成功,但用publish到一个新的类型成功了;

相关推荐
花酒锄作田21 小时前
Go - 注册表工厂模式的简单实现
golang
椒颜皮皮虾྅1 天前
OpenVINO C# API 3.3.1:支持OpenVINO 2026.3及GenAI增强
人工智能·c#·openvino
半亩码田1 天前
C#转Python第3.1篇:Python 的 class 没有访问修饰符?面向对象的另一条路
开发语言·python·c#
圣殿骑士-Khtangc1 天前
Go-Map面试核心考点从哈希冲突到并发安全的完整解析
面试·golang·哈希算法
worxfr1 天前
Go 并发控制:从 Channel 方向约束到实战模式
开发语言·后端·golang
xcLeigh1 天前
Go入门:短变量声明的陷阱与最佳实践
java·redis·golang·教程·变量
JavaPub-rodert1 天前
我又把自己的 Go 后台管理系统升级了一遍:文件管理、2GB 上传、私有文件预览、Docker 镜像全安排上了
开发语言·docker·golang·shiyuadmin
名字还没想好☜1 天前
Go 的 sync.Cond 实战:用条件变量做等待/通知,比忙轮询省 CPU
开发语言·数据库·后端·golang·go
唐青枫1 天前
别再手写 args[0]:C#.NET CommandLineParser 命令行工具实战详解
c#·.net
LccKyI1 天前
C#学习day06(方法/函数及其关键字,附思维导图)
经验分享·学习·c#