12.16 脚本网页 Golang标准库

功能,查看go标准库,

优点,单页面,便于集成APP

html 复制代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
    <title>Go 1.x 标准库全景速览</title>
    <script src="A.插件_字体缩放.js"></script>
    <style>
        :root {
            --primary-color: #ff6b6b;
            --secondary-color: #4ecdc4;
            --accent-color: #45b7d1;
            --text-color: #2c3e50;
            --text-secondary: #7f8c8d;
            --bg-color: #fffbf0;
            --border-color: #ffeaa7;
            --hover-bg: #fff5e6;
            --code-bg: #ffffff;
            --tree-line: #fab1a0;
            --view-button-bg: #f0f9ff;
            --view-button-hover: #e0f2fe;
            --view-button-active: #0ea5e9;
            --view-button-text: #0c4a6e;
        }

        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body {
            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Helvetica Neue', Arial, sans-serif;
            font-size: 15.6px; /* 13px × 1.2 */
            line-height: 1.5;
            color: var(--text-color);
            background: linear-gradient(135deg, #ff9a9e 0%, #fecfef 50%, #fecfef 100%);
            overflow: hidden;
            height: 100vh;
            width: 100vw;
            display: flex;
            flex-direction: column;
            -webkit-font-smoothing: antialiased;
            -moz-osx-font-smoothing: grayscale;
            text-rendering: optimizeLegibility;
        }

        .container {
            flex: 1;
            display: flex;
            flex-direction: column;
            background-color: rgba(255, 255, 255, 0.98);
            overflow: hidden;
            box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
            margin: 4px;
            border-radius: 12px;
            border: 1px solid rgba(255, 255, 255, 0.2);
        }

        header {
            background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
            color: #fff;
            padding: 6px 12px;
            border-bottom: 1px solid rgba(255, 255, 255, 0.2);
            flex-shrink: 0;
            position: relative;
            overflow: hidden;
            display: flex;
            align-items: center;
            justify-content: space-between;
        }

        header::after {
            content: '';
            position: absolute;
            top: 0;
            left: -100%;
            width: 100%;
            height: 100%;
            background: linear-gradient(90deg, transparent, rgba(255,255,255,0.1), transparent);
            animation: shimmer 3s infinite;
        }

        @keyframes shimmer {
            0% { left: -100%; }
            100% { left: 100%; }
        }

        .header-content {
            display: flex;
            flex-direction: column;
            justify-content: center;
            flex: 1;
        }

        header h1 {
            font-size: 16.8px; /* 14px × 1.2 */
            font-weight: 700;
            margin-bottom: 2px;
            position: relative;
        }

        header p {
            opacity: 0.9;
            font-size: 12px; /* 10px × 1.2 */
            position: relative;
        }

        .header-search {
            position: relative;
            z-index: 10;
        }

        #searchInput {
            padding: 4px 8px;
            border: 1px solid var(--border-color);
            border-radius: 6px;
            background-color: rgba(255, 255, 255, 0.9);
            color: var(--text-color);
            font-size: 13.2px; /* 11px × 1.2 */
            font-family: inherit;
            width: 120px;
            transition: all 0.3s;
        }

        #searchInput:focus {
            outline: none;
            border-color: var(--primary-color);
            background: rgba(255, 255, 255, 1);
            box-shadow: 0 0 0 3px rgba(255, 107, 107, 0.1);
        }

        .controls {
            padding: 6px 12px;
            background: linear-gradient(180deg, #ffffff 0%, #f9fafb 100%);
            border-bottom: 1px solid var(--border-color);
            display: flex;
            align-items: center;
            justify-content: space-between;
            flex-wrap: nowrap;
            gap: 8px;
            flex-shrink: 0;
        }

        .action-buttons {
            display: flex;
            gap: 4px;
        }

        .controls button {
            background: linear-gradient(135deg, var(--accent-color), var(--secondary-color));
            color: white;
            border: none;
            padding: 4px 8px;
            border-radius: 6px;
            cursor: pointer;
            transition: all 0.3s;
            font-size: 13.2px; /* 11px × 1.2 */
            font-family: inherit;
            font-weight: 500;
            box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
        }

        .controls button:hover {
            transform: translateY(-1px);
            box-shadow: 0 3px 8px rgba(0, 0, 0, 0.15);
        }

        .view-toggle {
            display: flex;
            gap: 4px;
            background: var(--view-button-bg);
            padding: 3px;
            border-radius: 6px;
        }

        .view-toggle button {
            background: transparent;
            color: var(--view-button-text);
            border: none;
            padding: 4px 8px;
            border-radius: 4px;
            cursor: pointer;
            transition: all 0.3s;
            font-size: 13.2px; /* 11px × 1.2 */
            font-family: inherit;
            font-weight: 500;
            box-shadow: none;
        }

        .view-toggle button:hover {
            background: var(--view-button-hover);
            transform: none;
            box-shadow: none;
        }

        .view-toggle button.active {
            background: var(--view-button-active);
            color: white;
            box-shadow: 0 2px 6px rgba(14, 165, 233, 0.3);
        }

        .tree-container {
            flex: 1;
            padding: 8px;
            overflow: auto;
            background: linear-gradient(180deg, rgba(255, 251, 240, 0.5) 0%, rgba(255, 245, 230, 0.3) 100%);
        }

        .tree-container::-webkit-scrollbar {
            width: 6px;
        }

        .tree-container::-webkit-scrollbar-thumb {
            background: var(--primary-color);
            border-radius: 4px;
        }

        .tree ul {
            list-style-type: none;
            padding-left: 16px;
            margin: 0;
        }

        .tree li {
            position: relative;
            padding: 2px 0;
            white-space: nowrap;
        }

        .tree li::before {
            content: "";
            position: absolute;
            left: -12px;
            top: 12px;
            width: 12px;
            height: 1px;
            background-color: var(--tree-line);
        }

        .tree li::after {
            content: "";
            position: absolute;
            left: -12px;
            top: -2px;
            width: 1px;
            height: 100%;
            background-color: var(--tree-line);
        }

        .tree li:last-child::after {
            height: 14px;
        }

        .tree > ul > li::before,
        .tree > ul > li::after {
            display: none;
        }

        .tree-node {
            display: flex;
            align-items: center;
            cursor: pointer;
            padding: 3px 6px;
            border-radius: 6px;
            transition: all 0.2s;
        }

        .tree-node:hover {
            background: linear-gradient(135deg, rgba(255, 107, 107, 0.08) 0%, rgba(78, 205, 196, 0.05) 100%);
            transform: translateX(2px);
        }

        .tree-node i {
            margin-right: 8px;
            color: var(--text-color);
            width: 14px;
            text-align: center;
            font-size: 14.4px; /* 12px × 1.2 */
        }

        .tree-node .folder {
            color: var(--primary-color);
        }

        .tree-node .file {
            color: var(--text-secondary);
        }

        .tree-node .toggle {
            color: #9ca3af;
            margin-right: 4px;
            font-size: 12px; /* 10px × 1.2 */
            transition: transform 0.2s;
        }

        .collapsed .toggle.fa-chevron-down::before {
            content: "▶";
        }

        .tree-content {
            flex: 1;
            display: flex;
            align-items: center;
            min-width: 0;
        }

        .tree-name {
            font-weight: 600;
            font-size: 14.4px; /* 12px × 1.2 */
            overflow: hidden;
            text-overflow: ellipsis;
            color: var(--text-color);
        }

        .tree-desc {
            font-style: normal !important;
            white-space: normal !important;
            max-width: none !important;
            overflow: visible !important;
            text-overflow: unset !important;
            display: inline-block !important;
            line-height: 1.4 !important;
            margin-left: 8px !important;
            font-size: 12px !important; /* 10px × 1.2 */
            color: var(--text-secondary) !important;
            background: rgba(255, 107, 107, 0.06) !important;
            padding: 2px 4px !important;
            border-radius: 4px !important;
            border: 1px solid rgba(255, 107, 107, 0.1) !important;
            transition: all 0.2s !important;
        }

        .tree-node:hover .tree-desc {
            background: rgba(255, 107, 107, 0.1) !important;
            border-color: rgba(255, 107, 107, 0.2) !important;
        }

        .collapsed > ul {
            display: none;
        }

        .highlight {
            background: linear-gradient(135deg, var(--accent-color), var(--secondary-color));
            padding: 0 4px;
            border-radius: 4px;
            color: #fff;
            font-weight: 600;
        }

        footer {
            background: linear-gradient(135deg, var(--primary-color),
                var(--secondary-color));
            color: white;
            padding: 6px 12px;
            text-align: center;
            font-size: 12px; /* 10px × 1.2 */
            border-top: 1px solid rgba(255, 255, 255, 0.2);
            flex-shrink: 0;
        }

        @media (max-width: 768px) {
            body { font-size: 14.4px; } /* 12px × 1.2 */
            .container { margin: 2px; }
            header h1 { font-size: 15.6px; } /* 13px × 1.2 */
            header p { font-size: 10.8px; } /* 9px × 1.2 */
            .tree ul { padding-left: 14px; }
            .tree-name { font-size: 13.2px; } /* 11px × 1.2 */
            .tree-desc { font-size: 10.8px; } /* 9px × 1.2 */
            #searchInput { width: 100px; font-size: 12px; } /* 10px × 1.2 */
            .controls button { font-size: 12px; padding: 3px 6px; } /* 10px × 1.2 */
            .view-toggle button { padding: 3px 6px; font-size: 12px; } /* 10px × 1.2 */
        }

        @media (max-width: 480px) {
            body { font-size: 13.2px; } /* 11px × 1.2 */
            .container { margin: 1px; }
            header { padding: 4px 8px; }
            header h1 { font-size: 14.4px; } /* 12px × 1.2 */
            header p { font-size: 9.6px; } /* 8px × 1.2 */
            .controls { padding: 4px 8px; }
            .tree ul { padding-left: 12px; }
            .tree-node { padding: 2px 4px; }
            .tree-name { font-size: 12px; } /* 10px × 1.2 */
            .tree-desc { font-size: 9.6px; } /* 8px × 1.2 */
            #searchInput { width: 80px; font-size: 10.8px; padding: 3px 6px; } /* 9px × 1.2 */
            .controls button { font-size: 10.8px; padding: 2px 4px; } /* 9px × 1.2 */
            .view-toggle button { padding: 2px 4px; font-size: 10.8px; } /* 9px × 1.2 */
        }
    </style>
</head>
<body>
    <div class="container">
        <header>
            <div class="header-content">
                <h1>Go 1.x 标准库全景速览</h1>
                <p>Go Standard Library - Complete Overview (2025-12-16)</p>
            </div>
            <div class="header-search">
                <input type="text" id="searchInput" placeholder="搜索包名或描述...">
            </div>
        </header>
        <div class="controls">
            <div class="action-buttons">
                <button id="expandAll">展开全部</button>
                <button id="collapseAll">折叠全部</button>
            </div>
            <div class="view-toggle">
                <button id="viewFunction" class="active">按功能分类</button>
                <button id="viewAlpha">按字母序</button>
            </div>
        </div>
        <div class="tree-container">
            <div class="tree">
                <ul id="treeRoot"></ul>
            </div>
        </div>
        <footer>
            <p>© 2025 Go 1.x 标准库全景速览| Generated by 凉安</p>
        </footer>
    </div>

<!-- 数据定义--> 
<script>
// 按功能分类的数据 
const functionData = [
    {
        name: '语言内置', 
        type: 'folder', 
        children: [
            { name: 'builtin', desc: '内置类型与函数(true、append、make...)', type: 'file' }
        ]
    }, 
    {
        name: '输入输出', 
        type: 'folder', 
        children: [
            { name: 'io', desc: '基本I/O 接口', type: 'file' }, 
            { name: 'bufio', desc: '带缓冲的I/O', type: 'file' }, 
            { name: 'fmt', desc: '格式化输入输出', type: 'file' }, 
            { name: 'log', desc: '日志打印', type: 'file' }, 
            { name: 'os', desc: '操作系统文件/进程接口', type: 'file' }
        ]
    }, 
    {
        name: '文本处理',
        type: 'folder', 
        children: [
            { name: 'strings', desc: '字符串操作', type: 'file' }, 
            { name: 'bytes', desc: '字节切片操作', type: 'file' }, 
            { name: 'strconv', desc: '字符串与基本类型互转', type: 'file' }, 
            { name: 'unicode', desc: 'Unicode 码点判断', type: 'file' }, 
            { name: 'regexp', desc: '正则表达式', type: 'file' }
        ]
    }, 
    {
        name: '数据编码', 
        type: 'folder', 
        children: [
            { name: 'json', desc: 'JSON 编解码', type: 'file' }, 
            { name: 'xml', desc: 'XML 编解码', type: 'file' }, 
            { name: 'gob', desc: 'Go 二进制编码', type: 'file' }, 
            { name: 'base64', desc: 'Base64 编解码', type: 'file' }, 
            { name: 'hex', desc: '十六进制编解码', type: 'file' }
        ]
    }, 
    {
        name: '网络通信', 
        type: 'folder', 
        children: [
            { name: 'net', desc: '原始网络接口(TCP/UDP/IP)', type: 'file' },
            { name: 'net/http', desc: 'HTTP 客户端/服务端', type: 'file' }, 
            { name: 'net/http/httptest', desc: 'HTTP 测试辅助', type: 'file' },
            { name: 'net/url', desc: 'URL 解析', type: 'file' }, 
            { name: 'net/mail', desc: '邮件地址解析', type: 'file' }
        ]
    }, 
    {
        name: '并发同步', 
        type: 'folder', 
        children: [
            { name: 'sync', desc: '互斥锁/等待组', type: 'file' }, 
            { name: 'sync/atomic', desc: '原子操作', type: 'file' }, 
            { name: 'context', desc: '请求级上下文', type: 'file' }, 
            { name: 'channel', desc: '语言级通道(内置)', type: 'file' }
        ]
    }, 
    {
        name: '运行时与反射', 
        type: 'folder', 
        children: [
            { name: 'runtime', desc: '运行时控制与信息', type: 'file' }, 
            { name: 'reflect', desc: '反射机制', type: 'file' }
        ]
    }, 
    {
        name: '加密与安全', 
        type: 'folder', 
        children: [
            { name: 'crypto/md5', desc: 'MD5 哈希', type: 'file' }, 
            { name: 'crypto/sha256', desc: 'SHA-256 哈希', type: 'file' },
            { name: 'crypto/aes', desc: 'AES 对称加密', type: 'file' }, 
            { name: 'crypto/rsa', desc: 'RSA 非对称加密', type: 'file' }, 
            { name: 'crypto/rand', desc: '加密随机数', type: 'file' }
        ]
    }, 
    {
        name: '数学与计算', 
        type: 'folder', 
        children: [
            { name: 'math', desc: '浮点数学函数', type: 'file' }, 
            { name: 'math/big', desc: '大整数/高精度小数', type: 'file' }, 
            { name: 'math/rand', desc: '伪随机数', type: 'file' }, 
            { name: 'sort', desc: '切片排序', type: 'file' }
        ]
    }, 
    {
        name: '时间与定时器', 
        type: 'folder', 
        children: [
            { name: 'time', desc: '时间戳/格式化/延时', type: 'file' }, 
            { name: 'time/ticker', desc: '周期性定时器', type: 'file' }
        ]
    }, 
    {
        name: '文件路径与压缩', 
        type: 'folder', 
        children: [
            { name: 'path/filepath', desc: '跨平台路径操作', type: 'file' }, 
            { name: 'archive/tar', desc: 'TAR 归档', type: 'file' }, 
            { name: 'archive/zip', desc: 'ZIP 归档', type: 'file' },
            { name: 'compress/gzip', desc: 'Gzip 压缩', type: 'file' }
        ]
    }, 
    {
        name: '测试与调试', 
        type: 'folder', 
        children: [
            { name: 'testing', desc: '单元测试框架', type: 'file' }, 
            { name: 'testing/httptest', desc: 'HTTP 测试辅助', type: 'file' },
            { name: 'fmt', desc: '打印调试(见输入输出)', type: 'file' }, 
            { name: 'log', desc: '日志调试(见输入输出)', type: 'file' }
        ]
    }, 
    {
        name: '插件与解释', 
        type: 'folder', 
        children: [
            { name: 'plugin', desc: '动态插件加载', type: 'file' }, 
            { name: 'go/ast', desc: 'Go 语法树', type: 'file' }, 
            { name: 'go/parser', desc: 'Go 源码解析', type: 'file' }, 
            { name: 'go/token', desc: '词法标记', type: 'file' }
        ]
    }, 
    {
        name: '数据库', 
        type: 'folder', 
        children: [
            { name: 'database/sql', desc: '通用SQL 接口', type: 'file' }, 
            { name: 'database/sql/driver', desc: '驱动接口', type: 'file' }
        ]
    }, 
    {
        name: '运行时调试', 
        type: 'folder', 
        children: [
            { name: 'runtime/pprof', desc: 'CPU/内存剖析', type: 'file' }, 
            { name: 'runtime/trace', desc: '执行追踪', type: 'file' }
        ]
    }, 
    {
        name: '其他实用包', 
        type: 'folder', 
        children: [
            { name: 'flag', desc: '命令行参数解析', type: 'file' }, 
            { name: 'errors', desc: '错误包装', type: 'file' }, 
            { name: 'io/ioutil', desc: '已合并到io,保留兼容', type: 'file' }, 
            { name: 'mime', desc: 'MIME 类型处理', type: 'file' }, 
            { name: 'hash', desc: '哈希接口定义', type: 'file' }
        ]
    }
];

// 按字母序分类的数据 
const alphaData = [
    {
        name: 'A', 
        type: 'folder', 
        children: [
            { name: 'archive/tar', desc: 'tar 归档格式读写', type: 'file' }, 
            { name: 'archive/zip', desc: 'zip 归档格式读写', type: 'file' }, 
            { name: 'arena', desc: '内存arena 手动管理 (go1.20+) ', type: 'file' },
            { name: 'ascii85', desc: 'ASCII85 编码(btoa/a85)', type: 'file' }
        ]
    }, 
    {
        name: 'B', 
        type: 'folder', 
        children: [
            { name: 'bufio', desc: '带缓冲I/O 读写', type: 'file' }, 
            { name: 'bytes', desc: '字节切片工具集', type: 'file' }
        ]
    }, 
    {
        name: 'C', 
        type: 'folder', 
        children: [
            { name: 'compress/bzip2', desc: 'bzip2 解压', type: 'file' }, 
            { name: 'compress/flate', desc: 'DEFLATE 压缩', type: 'file' },
            { name: 'compress/gzip', desc: 'gzip 格式', type: 'file' }, 
            { name: 'compress/lzw', desc: 'LZW 压缩', type: 'file' }, 
            { name: 'compress/zlib', desc: 'zlib 格式', type: 'file' }, 
            { name: 'container/heap', desc: '最小/最大堆', type: 'file' }, 
            { name: 'container/list', desc: '双向链表', type: 'file' }, 
            { name: 'container/ring', desc: '循环链表', type: 'file' },
            { name: 'context', desc: '请求作用域取消/超时', type: 'file' }, 
            { name: 'crypto', desc: '加密框架接口', type: 'file' }, 
            { name: 'crypto/aes', desc: 'AES 分组密码', type: 'file' }, 
            { name: 'crypto/cipher', desc: '分组密码模式', type: 'file' }, 
            { name: 'crypto/des', desc: 'DES/3DES', type: 'file' }, 
            { name: 'crypto/dsa', desc: 'DSA 签名', type: 'file' }, 
            { name: 'crypto/ecdh', desc: '椭圆曲线Diffie-Hellman', type: 'file' },
            { name: 'crypto/ecdsa', desc: 'ECDSA 签名', type: 'file' }, 
            { name: 'crypto/ed25519', desc: 'Ed25519 签名', type: 'file' },
            { name: 'crypto/elliptic', desc: '椭圆曲线参数', type: 'file' }, 
            { name: 'crypto/hmac', desc: 'HMAC 哈希消息认证', type: 'file' },
            { name: 'crypto/md5', desc: 'MD5 哈希 (已弱) ', type: 'file' }, 
            { name: 'crypto/rand', desc: '加密安全随机数', type: 'file' }, 
            { name: 'crypto/rc4', desc: 'RC4 流密码 (已弱) ', type: 'file' }, 
            { name: 'crypto/rsa', desc: 'RSA 加签/解密', type: 'file' }, 
            { name: 'crypto/sha1', desc: 'SHA-1(已弱)', type: 'file' }, 
            { name: 'crypto/sha256', desc: 'SHA-256/224', type: 'file' }, 
            { name: 'crypto/sha512', desc: 'SHA-512/384', type: 'file' }, 
            { name: 'crypto/subtle', desc: '常量时间比较', type: 'file' }, 
            { name: 'crypto/tls', desc: 'TLS 1.2/1.3 客户端/服务端', type: 'file' },
            { name: 'crypto/x509', desc: 'X.509 证书链', type: 'file' }, 
            { name: 'crypto/x509/pkix', desc: 'PKIX 证书属性', type: 'file' }
        ]
    }, 
    {
        name: 'D', 
        type: 'folder', 
        children: [
            { name: 'database/sql', desc: '通用SQL 接口', type: 'file' }, 
            { name: 'database/sql/driver', desc: '驱动编写接口', type: 'file' },
            { name: 'debug/buildinfo', desc: '读取二进制构建信息', type: 'file' },
            { name: 'debug/dwarf', desc: 'DWARF 调试信息解析', type: 'file' },
            { name: 'debug/elf', desc: 'ELF 文件解析', type: 'file' }, 
            { name: 'debug/gosym', desc: 'Go 符号表', type: 'file' }, 
            { name: 'debug/macho', desc: 'Mach-O 文件解析', type: 'file' },
            { name: 'debug/pe', desc: 'PE/COFF 文件解析', type: 'file' }, 
            { name: 'debug/plan9obj', desc: 'Plan 9 a.out 解析', type: 'file' }
        ]
    }, 
    {
        name: 'E', 
        type: 'folder', 
        children: [
            { name: 'embed', desc: '静态资源嵌入(go1.16+)', type: 'file' },
            { name: 'encoding', desc: '编码框架接口', type: 'file' }, 
            { name: 'encoding/ascii85', desc: 'ASCII85(同ascii85)', type: 'file' },
            { name: 'encoding/asn1', desc: 'ASN.1 DER', type: 'file' }, 
            { name: 'encoding/base32', desc: 'Base32', type: 'file' }, 
            { name: 'encoding/base64', desc: 'Base64', type: 'file' }, 
            { name: 'encoding/binary', desc: ' 二进制字节序', type: 'file' },
            { name: 'encoding/csv', desc: 'CSV 读写', type: 'file' }, 
            { name: 'encoding/gob', desc: 'Go 私有二进制编码', type: 'file' },
            { name: 'encoding/hex', desc: '十六进制', type: 'file' }, 
            { name: 'encoding/json', desc: 'JSON 编解码', type: 'file' }, 
            { name: 'encoding/pem', desc: 'PEM 块解析', type: 'file' }, 
            { name: 'encoding/xml', desc: 'XML 编解码', type: 'file' }, 
            { name: 'errors', desc: '错误包装与检查', type: 'file' }, 
            { name: 'expvar', desc: '暴露公共变量 (debug/metrics) ', type: 'file' }
        ]
    }, 
    {
        name: 'F', 
        type: 'folder', 
        children: [
            { name: 'flag', desc: '命令行参数解析', type: 'file' }
        ]
    }, 
    {
        name: 'G', 
        type: 'folder', 
        children: [
            { name: 'go/ast', desc: 'Go 抽象语法树', type: 'file' }, 
            { name: 'go/build', desc: '构建约束与包加载(已弃部分功能)', type: 'file' },
            { name: 'go/build/constraint', desc: ' 构建标签解析', type: 'file' },
            { name: 'go/constant', desc: '常量值表示', type: 'file' }, 
            { name: 'go/doc', desc: '文档注释解析', type: 'file' }, 
            { name: 'go/format', desc: '源码格式化', type: 'file' }, 
            { name: 'go/importer', desc: '导入查询辅助', type: 'file' }, 
            { name: 'go/parser', desc: '源码解析器', type: 'file' }, 
            { name: 'go/printer', desc: '语法树打印', type: 'file' }, 
            { name: 'go/scanner', desc: '词法扫描', type: 'file' }, 
            { name: 'go/token', desc: '词法标记与位置', type: 'file' }, 
            { name: 'go/types', desc: '类型检查', type: 'file' }
        ]
    }, 
    {
        name: 'H', 
        type: 'folder', 
        children: [
            { name: 'hash', desc: '哈希接口', type: 'file' }, 
            { name: 'hash/adler32', desc: 'Adler-32', type: 'file' }, 
            { name: 'hash/crc32', desc: 'CRC-32', type: 'file' }, 
            { name: 'hash/crc64', desc: 'CRC-64', type: 'file' }, 
            { name: 'hash/fnv', desc: 'FNV-1a', type: 'file' }
        ]
    }, 
    {
        name: 'I', 
        type: 'folder', 
        children: [
            { name: 'html', desc: 'HTML 转义', type: 'file' }, 
            { name: 'html/template', desc: 'HTML 模板引擎', type: 'file' },
            { name: 'image', desc: '通用图像接口', type: 'file' }, 
            { name: 'image/color', desc: '颜色模型', type: 'file' }, 
            { name: 'image/draw', desc: '2D 图像合成', type: 'file' }, 
            { name: 'image/gif', desc: 'GIF 编解码', type: 'file' }, 
            { name: 'image/jpeg', desc: 'JPEG 编解码', type: 'file' }, 
            { name: 'image/png', desc: 'PNG 编解码', type: 'file' }, 
            { name: 'index/suffixarray', desc: '后缀数组子串搜索', type: 'file' },
            { name: 'io', desc: '基本I/O 接口', type: 'file' }, 
            { name: 'io/fs', desc: '文件系统抽象', type: 'file' }, 
            { name: 'io/ioutil', desc: '旧IO 助手(已退化)', type: 'file' }
        ]
    }, 
    {
        name: 'L', 
        type: 'folder', 
        children: [
            { name: 'log', desc: '简单日志输出', type: 'file' }, 
            { name: 'log/syslog', desc: 'Unix syslog 后端', type: 'file' }, 
            { name: 'log/slog', desc: '结构化日志 (go1.21+) ', type: 'file' }
        ]
    }, 
    {
        name: 'M', 
        type: 'folder', 
        children: [
            { name: 'math', desc: '浮点数学函数', type: 'file' }, 
            { name: 'math/big', desc: '大整数/有理数/高精度浮点', type: 'file' },
            { name: 'math/bits', desc: '位计数与内建运算', type: 'file' }, 
            { name: 'math/cmplx', desc: '复数数学函数', type: 'file' }, 
            { name: 'math/rand', desc: '伪随机数生成', type: 'file' }, 
            { name: 'mime', desc: 'MIME 类型处理', type: 'file' }
        ]
    }, 
    {
        name: 'N', 
        type: 'folder', 
        children: [
            { name: 'net', desc: '网络原语(TCP/UDP/Unix 域套接字)', type: 'file' },
            { name: 'net/http', desc: 'HTTP 客户端/服务端', type: 'file' }, 
            { name: 'net/http/cgi', desc: 'CGI 网关', type: 'file' }, 
            { name: 'net/http/cookiejar', desc: 'Cookie 管理', type: 'file' },
            { name: 'net/http/fcgi', desc: 'FastCGI 客户端', type: 'file' }, 
            { name: 'net/http/httptest', desc: 'HTTP 测试辅助', type: 'file' },
            { name: 'net/http/httptrace', desc: 'HTTP 追踪钩子', type: 'file' },
            { name: 'net/http/httputil', desc: 'HTTP 工具(反向代理等)', type: 'file' },
            { name: 'net/http/pprof', desc: 'HTTP 剖析端点', type: 'file' },
            { name: 'net/mail', desc: '邮件头解析', type: 'file' }, 
            { name: 'net/netip', desc: '新IP 地址类型(go1.18+)', type: 'file' },
            { name: 'net/rpc', desc: 'RPC 框架', type: 'file' }, 
            { name: 'net/rpc/jsonrpc', desc: 'JSON-RPC 编解码', type: 'file' },
            { name: 'net/smtp', desc: 'SMTP 客户端', type: 'file' }, 
            { name: 'net/textproto', desc: '文本协议通用Reader/Writer', type: 'file' }
        ]
    }, 
    {
        name: 'O', 
        type: 'folder', 
        children: [
            { name: 'os', desc: '操作系统接口(文件、环境、进程)', type: 'file' },
            { name: 'os/exec', desc: '外部命令执行', type: 'file' }, 
            { name: 'os/signal', desc: '信号接收与处理', type: 'file' }, 
            { name: 'os/user', desc: '当前用户查询', type: 'file' }
        ]
    }, 
    {
        name: 'P', 
        type: 'folder', 
        children: [
            { name: 'path', desc: '正斜杠路径操作(不感知OS)', type: 'file' },
            { name: 'path/filepath', desc: '跨平台路径操作', type: 'file' }, 
            { name: 'plugin', desc: '运行时动态插件加载 (Unix 支持) ', type: 'file' }
        ]
    }, 
    {
        name: 'R', 
        type: 'folder', 
        children: [
            { name: 'reflect', desc: '运行时反射', type: 'file' }, 
            { name: 'regexp', desc: '正则表达式', type: 'file' }, 
            { name: 'regexp/syntax', desc: '正则语法解析(内部)', type: 'file' },
            { name: 'runtime', desc: '运行时控制与度量', type: 'file' }, 
            { name: 'runtime/cgo', desc: 'C 互操作', type: 'file' }, 
            { name: 'runtime/debug', desc: ' 调试打印与堆栈', type: 'file' },
            { name: 'runtime/metrics', desc: ' 运行时指标读取', type: 'file' },
            { name: 'runtime/pprof', desc: 'CPU/ 堆/ 互斥剖析', type: 'file' },
            { name: 'runtime/trace', desc: '执行追踪', type: 'file' }
        ]
    }, 
    {
        name: 'S', 
        type: 'folder', 
        children: [
            { name: 'sort', desc: '切片/用户定义集合排序', type: 'file' }, 
            { name: 'strconv', desc: '字符串↔基本类型转换', type: 'file' }, 
            { name: 'strings', desc: '字符串工具集', type: 'file' }, 
            { name: 'sync', desc: '互斥锁、 读写锁、 等待组、 单次执行', type: 'file' },
            { name: 'sync/atomic', desc: '原子操作', type: 'file' }, 
            { name: 'syscall', desc: ' 底层系统调用(尽量用golang.org/x/sys)', type: 'file' }
        ]
    }, 
    {
        name: 'T', 
        type: 'folder', 
        children: [
            { name: 'testing', desc: '单元测试框架', type: 'file' }, 
            { name: 'testing/fstest', desc: ' 文件系统接口测试', type: 'file' },
            { name: 'testing/iotest', desc: 'I/O 接口测试', type: 'file' }, 
            { name: 'testing/quick', desc: '黑盒属性测试(已冻结)', type: 'file' },
            { name: 'text/scanner', desc: '通用词法扫描', type: 'file' }, 
            { name: 'text/tabwriter', desc: '表格列对齐', type: 'file' }, 
            { name: 'text/template', desc: '通用文本模板', type: 'file' }, 
            { name: 'text/template/parse', desc: ' 模板语法树', type: 'file' },
            { name: 'time', desc: '时间戳、定时器、格式化', type: 'file' }, 
            { name: 'time/tzdata', desc: '时区数据嵌入', type: 'file' }
        ]
    }, 
    {
        name: 'U', 
        type: 'folder', 
        children: [
            { name: 'unicode', desc: 'Unicode 分类与转换', type: 'file' },
            { name: 'unicode/utf16', desc: 'UTF-16 转换', type: 'file' }, 
            { name: 'unicode/utf8', desc: 'UTF-8 转换与验证', type: 'file' },
            { name: 'unsafe', desc: '绕过类型系统(指针运算等)', type: 'file' }
        ]
    }
];

// 当前显示的数据 
let currentData = functionData; 
let currentView = 'function'; 
</script>

<!-- 渲染逻辑--> 
<script>
// 创建节点元素的函数 
function createTreeNode(data) {
    const li = document.createElement('li');
    
    // 创建节点容器 
    const nodeDiv = document.createElement('div'); 
    nodeDiv.className = 'tree-node';
    
    // 添加折叠图标(仅文件夹) 
    if (data.type === 'folder') {
        const toggleIcon = document.createElement('span'); 
        toggleIcon.className = 'toggle'; 
        toggleIcon.textContent = '▼'; 
        nodeDiv.appendChild(toggleIcon);
    }
    
    // 添加文件夹/文件图标(使用emoji) 
    const icon = document.createElement('span'); 
    icon.className = 'icon'; 
    if (data.type === 'folder') {
        icon.className += ' folder'; 
        icon.textContent = '📁'; 
    } else {
        icon.className += ' file'; 
        icon.textContent = '📄'; 
    } 
    nodeDiv.appendChild(icon);
    
    // 添加内容区域 
    const contentDiv = document.createElement('div'); 
    contentDiv.className = 'tree-content';
    
    const nameSpan = document.createElement('span'); 
    nameSpan.className = 'tree-name'; 
    nameSpan.textContent = data.name; 
    contentDiv.appendChild(nameSpan);
    
    if (data.desc) {
        const descSpan = document.createElement('span'); 
        descSpan.className = 'tree-desc'; 
        descSpan.textContent = data.desc; 
        contentDiv.appendChild(descSpan);
    }
    
    nodeDiv.appendChild(contentDiv); 
    li.appendChild(nodeDiv);
    
    // 递归创建子节点 
    if (data.children && data.children.length > 0) {
        const ul = document.createElement('ul'); 
        data.children.forEach(child => {
            ul.appendChild(createTreeNode(child)); 
        }); 
        li.appendChild(ul);
    }
    
    return li;
}

// 初始化树形结构 
function initTree() {
    const treeRoot = document.getElementById('treeRoot'); 
    treeRoot.innerHTML = ''; // 清空现有内容 
    currentData.forEach(item => {
        treeRoot.appendChild(createTreeNode(item)); 
    });
    
    // 默认折叠所有文件夹 
    document.querySelectorAll('.tree li:has(> ul)').forEach(li => {
        li.classList.add('collapsed'); 
    });
}

// 切换视图 
function switchView(view) {
    currentView = view; 
    if (view === 'function') {
        currentData = functionData;
        document.getElementById('viewFunction').classList.add('active');
        document.getElementById('viewAlpha').classList.remove('active');
    } else {
        currentData = alphaData; 
        document.getElementById('viewAlpha').classList.add('active'); 
        document.getElementById('viewFunction').classList.remove('active'); 
    } 
    initTree();
}
</script>

<!-- 交互功能--> 
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 初始化树形结构 
    initTree();
    
    // 视图切换 
    document.getElementById('viewFunction').addEventListener('click', function() {
        switchView('function'); 
    });
    
    document.getElementById('viewAlpha').addEventListener('click', function() {
        switchView('alpha'); 
    });
    
    // 使用事件委托处理折叠/展开 
    document.getElementById('treeRoot').addEventListener('click', function(e) {
        const treeNode = e.target.closest('.tree-node'); 
        if (!treeNode) return;
        
        const folderIcon = treeNode.querySelector('.folder');
        if (!folderIcon) return;
        
        const li = treeNode.parentElement; 
        li.classList.toggle('collapsed'); 
    });
    
    // 展开全部按钮 
    document.getElementById('expandAll').addEventListener('click', function() {
        document.querySelectorAll('.tree li.collapsed').forEach(li => {
            li.classList.remove('collapsed'); 
        }); 
    });
    
    // 折叠全部按钮 
    document.getElementById('collapseAll').addEventListener('click', function() {
        document.querySelectorAll('.tree li:has(.folder)').forEach(li => {
            if (!li.parentElement.classList.contains('tree')) {
                li.classList.add('collapsed'); 
            }
        }); 
    });
    
    // 搜索功能 
    document.getElementById('searchInput').addEventListener('input', function(e) {
        const searchTerm = e.target.value.toLowerCase();
        
        // 清除之前的高亮 
        document.querySelectorAll('.highlight').forEach(el => {
            el.classList.remove('highlight'); 
        });
        
        if (searchTerm === '') return;
        
        // 搜索并高亮匹配项 
        document.querySelectorAll('.tree-node').forEach(node => {
            const text = node.textContent.toLowerCase(); 
            if (text.includes(searchTerm)) {
                node.querySelector('.tree-name').classList.add('highlight');
                
                // 展开父节点 
                let parent = node.closest('li'); 
                while (parent && !parent.classList.contains('tree')) {
                    parent.classList.remove('collapsed'); 
                    parent = parent.parentElement.closest('li'); 
                }
            }
        }); 
    }); 
}); 
</script> 
</body> 
</html>
相关推荐
古城小栈14 小时前
Docker 多阶段构建:Go_Java 镜像瘦身运动
java·docker·golang
serendipity_hky19 小时前
【go语言 | 第2篇】Go变量声明 + 常用数据类型的使用
开发语言·后端·golang
树下水月19 小时前
纯HTML 调用摄像头 获取拍照后的图片的base64
前端·javascript·html
周杰伦_Jay20 小时前
【Eino框架】Go语言驱动的LLM应用开发新范式
开发语言·后端·golang
鹏北海-RemHusband20 小时前
微前端实现方式:HTML Entry 与 JS Entry 的区别
前端·javascript·html
2501_941982051 天前
Go 进阶:发送文件/图片消息的流程与实现
开发语言·后端·golang
0思必得01 天前
[Web自动化] CSS基础概念和介绍
前端·css·python·自动化·html·web自动化
2501_944875511 天前
Go后端工程师
开发语言·后端·golang
理人综艺好会1 天前
Redis学习之go-redis
redis·学习·golang