You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Go语言中生成符合规范的11位Youtube ID?

问题原因分析

你的两个问题本质都是对标准Base64的编码对齐规则理解有偏差:

  • 标准Base64是按3字节(24bit)为一个编码块设计的,每个块会编码为4个Base64字符,输入长度不是3的倍数时,末尾会用=做填充补齐块长度。
  • 你输入的是8字节(64bit)的数据,8除以3余2,所以标准编码后总长度为12个字符,末尾带1个=填充符,和你计算的11位不符。
  • 你之前的64/6≈11是纯比特对齐的理论值,只有用无块对齐、无填充的Base64变种才能匹配这个计算结果。
修复方案

你可以直接用Go标准库内置的base64.RawURLEncoding,它本身就符合Youtube使用的URL安全Base64规范:自动把+映射为-、/映射为_,同时默认省略填充符=,完全不需要手动做字符替换。
另外你当前生成的是63位有符号随机数,少了1位熵,建议直接生成64位无符号数来充分利用11位Base64的容量。

修改后代码示例
package main

import (
	"crypto/rand"
	"encoding/base64"
	"encoding/binary"
	"fmt"
)

func main() {
	// 生成64位无符号随机数
	b := make([]byte, 8)
	_, err := rand.Read(b)
	if err != nil {
		panic(err)
	}
	val := binary.LittleEndian.Uint64(b)
	fmt.Println("随机数值:", val)

	// 用RawURLEncoding直接生成符合要求的11位ID
	ytid := base64.RawURLEncoding.EncodeToString(b)
	fmt.Println("生成的Youtube格式ID:", ytid, "长度:", len(ytid))
}

内容的提问来源于stack exchange,提问作者hendry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 09:54:01