跳到内容
当前位置:首页>教案>Rust标准库总结:从核心类型到文件、网络与并发开发全景回顾

Rust标准库总结:从核心类型到文件、网络与并发开发全景回顾

  • 2026-11-06 13:03:21
Rust标准库总结:从核心类型到文件、网络与并发开发全景回顾

《Rust编程实战》系列第120篇
前面我们已经连续学习了Rust中的变量、所有权、生命周期、集合、文件、网络、并发、时间、进程、错误处理等大量知识。本篇不再引入某一个新的crate,而是对Rust最重要的基础设施之一进行系统总结:

std
Rust Standard Library
Rust标准库

Rust标准库覆盖:

基础类型
集合
字符串
文件系统
路径
IO
网络
线程
同步
时间
进程
环境变量
错误处理
迭代器
智能指针

可以先记住:

第三方crate决定一个Rust项目能做多丰富的事情,而标准库决定你是否真正理解Rust程序是怎样工作的。

std是什么

Rust标准库统一放在:

std

命名空间下。
例如:

use std::fs;
use std::path::PathBuf;
use std::collections::HashMap;
use std::sync::Arc;
use std::time::Duration;

这些都不需要在Cargo.toml额外添加依赖。
标准库可以理解为:

Rust语言
+
std
↓
绝大多数Rust程序的基础运行能力

Prelude

我们写:

let data=Vec::new();
let value=Some(10);
let result:Result<i32,String>=Ok(1);

并没有:

use std::vec::Vec;
use std::option::Option;
use std::result::Result;

原因是Rust会自动导入:

Prelude

也就是一组最常用类型和Trait。
因此很多Rust基础能力看起来像“语言自带”,实际上部分来自标准库Prelude。

String与str

Rust字符串体系最重要:

String
&str

String:

拥有数据
可增长
通常分配在堆上

&str:

借用字符串切片
不拥有底层数据

例如:

fn print_name(
    name:&str,
) {
    println!("{}",name);
}

调用:

let name=
    String::from("Rust");

print_name(&name);
print_name("Hello");

函数参数只需要读取字符串时,&str通常比&String更加通用。

Vec

动态数组:

let mut values=
    Vec::new();

values.push(10);
values.push(20);

或者:

let values=
    vec![1,2,3];

Vec<T>是Rust项目中最常见的数据结构之一。
适合:

文件列表
接口结果
任务集合
数据批次
动态数组

很多批量程序最终都会形成:

输入
↓
Vec<T>
↓
Iterator
↓
处理

HashMap

键值映射:

use std::collections::HashMap;

let mut map=
    HashMap::new();

map.insert(
    "name",
    "Rust",
);

适合:

配置映射
缓存
统计
索引
去重辅助

需要理解:

Key
通常要求Hash+Eq

前面Hash章节学习的Trait就在这里大量使用。

Option

Rust没有鼓励到处使用:

null

而是:

Option<T>

例如:

let value:
    Option<String>=
    Some(
        "Rust".into()
    );

或者:

None

处理:

match value {
    Some(v)=>{
        println!("{}",v);
    }
    None=>{
        println!("无数据");
    }
}

Option的意义是:

“可能不存在”本身就是类型的一部分。

Result<T,E>

可恢复错误:

fn load()
    ->Result<
        String,
        std::io::Error
    >
{
    std::fs::read_to_string(
        "data.txt"
    )
}

Result:

Ok(T)
Err(E)

结合:

?

可以形成Rust非常核心的错误传播方式。
例如:

fn run()
    ->Result<
        (),
        std::io::Error
    >
{
    let text=
        std::fs::read_to_string(
            "data.txt"
        )?;

    println!("{}",text);

    Ok(())
}

Box

Box<T>表示堆上拥有的数据:

let value=
    Box::new(100);

它经常用于:

递归数据结构
Trait Object
大对象
间接所有权

例如:

enum Node {
    Value(i32),
    Next(
        Box<Node>
    ),
}

如果没有Box,递归类型大小无法确定。

Rc

单线程共享所有权:

use std::rc::Rc;

let data=
    Rc::new(
        String::from(
            "hello"
        )
    );

let a=
    Rc::clone(&data);

let b=
    Rc::clone(&data);

形成:

data
↑
a
b

多个所有者共享同一份数据。
但:

Rc
不能安全跨线程

Arc

多线程共享:

use std::sync::Arc;

let data=
    Arc::new(
        String::from(
            "hello"
        )
    );

Arc使用原子引用计数,适合:

线程池
Tokio任务
共享配置
共享Client

经常看到:

Arc<AppState>

就是这个原因。

Cell与RefCell

Rust通常在编译期检查借用规则,但某些场景需要:

Interior Mutability
内部可变性

单线程常见:

Cell<T>
RefCell<T>

RefCell把部分借用检查从:

编译期

推迟到:

运行期

如果违反规则会panic。
所以它解决的是特殊所有权结构,不是绕开Rust安全模型。

Mutex

多线程共享可变数据:

use std::sync::Mutex;

let count=
    Mutex::new(0);

{
    let mut value=
        count.lock()
            .unwrap();

    *value+=1;
}

典型组合:

Arc<Mutex<T>>

表示:

跨线程共享
+
互斥修改

但锁竞争严重时会降低性能。

RwLock

如果业务:

读很多
写很少

可以考虑:

RwLock<T>

允许多个Reader同时读取:

let data=
    lock.read()
        .unwrap();

写入:

let mut data=
    lock.write()
        .unwrap();

是否比Mutex更快,需要根据实际负载判断。

Path与PathBuf

文件路径不要直接使用String表示。
借用路径:

&Path

拥有路径:

PathBuf

例如:

use std::path::PathBuf;

let path=
    PathBuf::from(
        "data"
    )
    .join(
        "a.txt"
    );

优点:

跨平台
支持非UTF-8路径
方便join
方便extension
方便file_name

这是文件工具开发非常重要的基础。

std::fs

常见文件操作:

std::fs::read(...)
std::fs::read_to_string(...)
std::fs::write(...)
std::fs::copy(...)
std::fs::rename(...)
std::fs::remove_file(...)
std::fs::create_dir_all(...)
std::fs::read_dir(...)

例如:

let text=
    std::fs::read_to_string(
        "config.toml"
    )?;

如果只是简单文件操作,标准库已经非常够用。

File

需要更底层控制:

use std::fs::File;

let file=
    File::open(
        "data.txt"
    )?;

写:

let file=
    File::create(
        "output.txt"
    )?;

还可以通过:

OpenOptions

实现:

追加
读写
创建
截断

BufReader

频繁小读取时:

use std::io::{
    BufRead,
    BufReader,
};

let file=
    File::open(
        "data.txt"
    )?;

let reader=
    BufReader::new(
        file
    );

读取行:

for line in
    reader.lines()
{
    println!(
        "{}",
        line?
    );
}

它通过缓冲减少系统调用。

BufWriter

大量小写入:

use std::io::{
    BufWriter,
    Write,
};

let file=
    File::create(
        "output.txt"
    )?;

let mut writer=
    BufWriter::new(
        file
    );

writeln!(
    writer,
    "hello"
)?;

批量文件、CSV、日志生成等场景非常常见。

Read与Write

Rust IO大量围绕Trait:

Read
Write
BufRead
Seek

例如:

reader.read(
    &mut buffer
)?;
writer.write_all(
    data
)?;

理解这些Trait后,文件、TCP、内存Buffer等API会变得非常相似。

std::env

环境变量:

let value=
    std::env::var(
        "APP_PORT"
    )?;

命令行参数:

let args:
    Vec<String>=
    std::env::args()
        .collect();

当前目录:

let dir=
    std::env::current_dir()?;

临时目录:

let temp=
    std::env::temp_dir();

前面的dotenv和config最终都大量建立在这些基础能力上。

Command

运行外部程序:

use std::process::Command;

let output=
    Command::new(
        "ffmpeg"
    )
    .arg("-version")
    .output()?;

可以获得:

stdout
stderr
status

例如:

println!(
    "{}",
    String::from_utf8_lossy(
        &output.stdout
    )
);

批量PDF、CAD、视频、图片工具经常需要调用第三方命令行程序,这时Command非常重要。

Process

通过:

Command::spawn()

可以获得:

Child

然后:

child.wait()?;

也可以管理:

stdin
stdout
stderr

适合:

长时间外部任务
实时读取输出
进度解析
停止子进程

Duration

表示时间长度:

use std::time::Duration;

let timeout=
    Duration::from_secs(5);

还可以:

Duration::from_millis(500)
Duration::from_secs(60)

常用于:

超时
Sleep
网络
重试
性能统计

Instant

测量耗时:

use std::time::Instant;

let start=
    Instant::now();

do_work();

println!(
    "{:?}",
    start.elapsed()
);

性能测试、慢任务检测应该优先考虑Instant,而不是SystemTime。

SystemTime

用于:

系统时间点
文件时间
Unix时间戳

例如:

use std::time::{
    SystemTime,
    UNIX_EPOCH,
};

let timestamp=
    SystemTime::now()
        .duration_since(
            UNIX_EPOCH
        )?
        .as_secs();

SystemTime与Instant解决的问题不同:

SystemTime
现在几点

Instant
过去多久

TCP

标准库:

use std::net::{
    TcpListener,
    TcpStream,
};

服务器:

let listener=
    TcpListener::bind(
        "127.0.0.1:8080"
    )?;

客户端:

let stream=
    TcpStream::connect(
        "127.0.0.1:8080"
    )?;

它们是同步阻塞网络API。

UDP

use std::net::UdpSocket;

let socket=
    UdpSocket::bind(
        "0.0.0.0:9000"
    )?;

发送:

socket.send_to(
    b"hello",
    "127.0.0.1:9001"
)?;

标准库已经能完成基础Socket开发。
复杂异步服务则通常使用Tokio。

thread

创建线程:

use std::thread;

let handle=
    thread::spawn(
        ||{
            println!(
                "worker"
            );
        }
    );

handle.join()
    .unwrap();

但实际项目中大量短任务一般不会为每个任务直接创建新线程,而是采用:

线程池
Rayon
Tokio

等更高层抽象。

Channel

线程间消息通信:

use std::sync::mpsc;

let (
    tx,
    rx
)=mpsc::channel();

tx.send(100)?;

let value=
    rx.recv()?;

形成:

线程A
↓send
Channel
↓recv
线程B

很多并发系统都可以从“共享内存”和“消息传递”两个方向思考。

Atomic

简单共享计数:

use std::sync::atomic::{
    AtomicUsize,
    Ordering,
};

let count=
    AtomicUsize::new(0);

count.fetch_add(
    1,
    Ordering::Relaxed
);

比Mutex更加轻量,但只适合有限的原子操作。
复杂共享状态仍然需要更合适的同步结构。

Iterator

Rust标准库中极其重要的一套抽象:

values.iter()
    .filter(...)
    .map(...)
    .take(...)
    .collect::<Vec<_>>();

核心思想:

数据源
↓
一系列转换
↓
最终消费

很多第三方库,例如Rayon,也正是沿用了Iterator式API。

IntoIterator

为什么:

for item in values {
}

可以工作?
因为类型可以实现:

IntoIterator

所以Rust中的:

for
Iterator
IntoIterator

实际上是一套统一体系。

From与Into

类型转换:

let value=
    String::from(
        "hello"
    );

如果:

From<A> for B

成立,那么通常就可以获得对应:

Into<B> for A

这也是很多Rust API能够自然进行类型转换的原因。

AsRef

如果函数只想接受“能够借用成某类型”的值:

fn open_file(
    path:impl AsRef<Path>,
) {
}

调用可以:

open_file(
    "a.txt"
);

open_file(
    PathBuf::from(
        "a.txt"
    )
);

这比只接受某一个具体路径类型更加灵活。

Borrow

Borrow与AsRef都有借用转换的含义,但Borrow还包含更强的等价语义约束,经常和集合查找有关。
例如HashMap可以用:

String作为Key
&str进行查询

背后就涉及Borrow等标准Trait设计。
普通业务API中更常见的是:

AsRef

Error Trait

Rust标准错误接口:

std::error::Error

通常配合:

Debug
Display
source

前面学习的:

anyhow
thiserror

其实都是围绕标准库Error体系构建的。
因此第三方错误库并没有绕开Rust标准机制,而是在它之上提供更方便的抽象。

Drop

资源生命周期结束:

impl Drop
    for MyResource
{
    fn drop(
        &mut self
    ) {
        println!(
            "释放资源"
        );
    }
}

Rust很多资源管理都依赖:

RAII

例如:

File
MutexGuard
Socket
WorkerGuard

对象离开作用域时自动清理资源。

Default

提供默认值:

#[derive(Default)]
struct Config {
    debug:bool,
    workers:usize,
}

然后:

let config=
    Config::default();

Serde配置、Builder和测试数据中都非常常见。

Clone与Copy

Copy:

按位复制即可
原值仍可继续使用

Clone:

显式复制
可能发生堆内存分配

例如:

let a=10;
let b=a;

i32实现Copy。
String:

let a=
    String::from("hello");

let b=
    a.clone();

理解Clone与Copy有助于避免为了通过编译而到处无脑clone()。

Debug与Display

Debug:

println!("{:?}",value);

主要给开发者。
Display:

println!("{}",value);

主要用于用户可读展示。
错误类型通常应该同时考虑:

Debug
Display

这也是thiserror自动处理的重要内容。

标准库和第三方crate怎么选

一个很实用的原则:

标准库已经简单解决
→优先std

标准库需要大量重复代码
且成熟crate已经解决
→使用crate

例如:

单层目录
→std::fs::read_dir

复杂递归目录
→walkdir

简单线程
→std::thread

数据并行
→rayon

同步TCP
→std::net

异步高并发HTTP
→Tokio+Axum

简单错误
→Result

应用复杂错误
→anyhow

不要为了“纯标准库”重复造大量基础设施,也不要为了几行代码无脑引入几十个依赖。

Rust工程知识地图

经过前面120篇内容,可以逐渐形成:

Rust语言基础
├──变量
├──类型
├──函数
├──控制流
└──模式匹配

数据结构
├──Array
├──Tuple
├──Vec
├──HashMap
├──String
├──Option
└──Result

核心机制
├──所有权
├──Borrow
├──生命周期
├──Trait
├──泛型
└──Iterator

内存与并发
├──Box
├──Rc
├──Arc
├──RefCell
├──Mutex
├──RwLock
├──Send
└──Sync

系统开发
├──File
├──Path
├──Process
├──Command
├──TCP
├──UDP
└──时间

工程生态
├──Serde
├──Clap
├──Config
├──Tracing
├──Anyhow
├──Thiserror
├──Rayon
└──WalkDir

这已经覆盖了大量真实Rust项目的基础能力。

学标准库真正要学什么

不是背:

所有std函数

而是建立:

遇到问题
↓
知道应该去哪个模块

例如:

文件
→std::fs

路径
→std::path

IO
→std::io

网络
→std::net

线程
→std::thread

同步
→std::sync

时间
→std::time

进程
→std::process

环境
→std::env

集合
→std::collections

知道这些模块以后,再查具体API会非常快。

常见错误

什么都用String

路径用PathBuf,时间用Duration,错误用Result,数据要尽量强类型。

能unwrap就unwrap

外部输入、文件、网络、配置都可能正常失败,应合理传播错误。

为了并发到处Arc<Mutex>

优先考虑所有权拆分、消息传递和无共享状态计算。

所有功能都自己造

成熟crate能明显降低工程复杂度。

什么都找第三方crate

简单功能标准库已经足够时,没有必要增加依赖。

clone解决所有权问题

大量clone有时意味着所有权设计还可以改进。

文件路径转String太早

尽量使用Path、PathBuf和OsStr。

标准库学习最佳实践

  • • 先理解类型和Trait,再记具体函数。
  • • 文件代码优先掌握Path、File、Read、Write。
  • • 并发代码先理解Send、Sync、Arc和Mutex。
  • • 网络开发先理解Socket、TCP和UDP,再学习HTTP框架。
  • • 错误处理先掌握Result和Error,再使用anyhow/thiserror。
  • • 性能优化先测量,再考虑线程、Rayon和缓存。
  • • 尽量让错误和非法状态在类型层被表达出来。
  • • 标准库解决基础问题,第三方crate解决更高层工程问题。

本章小结

Rust标准库不是一堆零散API,而是一套围绕所有权、Trait和强类型构建起来的基础开发体系。
本文回顾了:

  • • String与str负责字符串所有权和借用
  • • Vec与HashMap负责常见集合
  • • Option与Result表达可选值和错误
  • • Box、Rc、Arc管理不同所有权结构
  • • Mutex、RwLock、Atomic处理并发共享
  • • Path与PathBuf负责跨平台路径
  • • fs、File、BufReader、BufWriter负责文件和IO
  • • env和Command负责环境与外部进程
  • • Duration、Instant、SystemTime负责时间
  • • TcpStream、TcpListener、UdpSocket负责基础网络
  • • thread、Channel负责线程和消息通信
  • • Iterator、From、Into、AsRef等Trait构成大量Rust API共同语言
    可以记住:

真正熟悉Rust标准库,不是记住几百个函数,而是看到需求时能够迅速判断:应该使用哪个类型、哪个Trait、哪个模块,以及是否真的需要第三方crate。
当这些基础形成体系以后,学习Web框架、数据库、微服务和大型工程就会容易很多。

下一篇预告

从下一篇开始,我们正式进入Rust Web后端实战:

Rust Axum入门:从第一个HTTP Server到REST API实战

内容包括:

  • • Axum是什么
  • • Axum与Tokio关系
  • • 创建项目
  • • 安装axum
  • • Router
  • • Route
  • • get
  • • post
  • • Handler
  • • 启动HTTP Server
  • • TcpListener
  • • Path参数
  • • Query参数
  • • JSON请求
  • • JSON响应
  • • StatusCode
  • • State
  • • Extension
  • • Middleware概念
  • • REST API
  • • 错误处理
  • • tracing日志
  • • Axum项目目录设计
  • • 第一个完整Web API项目
基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-11-06 22:05:56 HTTP/1.1 GET : http://a.sjds.net/a/542338.html
  2. 运行时间 : 0.075144s [ 吞吐率:13.31req/s ] 内存消耗:4,368.72kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=f3802dc08deb7230a7e5242e565f906f
  1. /www/wwwroot/a.sjds.net/public/index.php ( 0.79 KB )
  2. /www/wwwroot/a.sjds.net/vendor/autoload.php ( 0.17 KB )
  3. /www/wwwroot/a.sjds.net/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /www/wwwroot/a.sjds.net/vendor/composer/platform_check.php ( 0.90 KB )
  5. /www/wwwroot/a.sjds.net/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /www/wwwroot/a.sjds.net/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /www/wwwroot/a.sjds.net/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /www/wwwroot/a.sjds.net/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /www/wwwroot/a.sjds.net/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /www/wwwroot/a.sjds.net/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /www/wwwroot/a.sjds.net/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /www/wwwroot/a.sjds.net/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /www/wwwroot/a.sjds.net/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /www/wwwroot/a.sjds.net/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /www/wwwroot/a.sjds.net/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /www/wwwroot/a.sjds.net/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /www/wwwroot/a.sjds.net/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /www/wwwroot/a.sjds.net/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /www/wwwroot/a.sjds.net/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /www/wwwroot/a.sjds.net/app/provider.php ( 0.19 KB )
  23. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /www/wwwroot/a.sjds.net/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /www/wwwroot/a.sjds.net/app/common.php ( 0.03 KB )
  27. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /www/wwwroot/a.sjds.net/config/app.php ( 0.95 KB )
  30. /www/wwwroot/a.sjds.net/config/cache.php ( 0.78 KB )
  31. /www/wwwroot/a.sjds.net/config/console.php ( 0.23 KB )
  32. /www/wwwroot/a.sjds.net/config/cookie.php ( 0.56 KB )
  33. /www/wwwroot/a.sjds.net/config/database.php ( 2.48 KB )
  34. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /www/wwwroot/a.sjds.net/config/filesystem.php ( 0.61 KB )
  36. /www/wwwroot/a.sjds.net/config/lang.php ( 0.91 KB )
  37. /www/wwwroot/a.sjds.net/config/log.php ( 1.35 KB )
  38. /www/wwwroot/a.sjds.net/config/middleware.php ( 0.19 KB )
  39. /www/wwwroot/a.sjds.net/config/route.php ( 1.89 KB )
  40. /www/wwwroot/a.sjds.net/config/session.php ( 0.57 KB )
  41. /www/wwwroot/a.sjds.net/config/trace.php ( 0.34 KB )
  42. /www/wwwroot/a.sjds.net/config/view.php ( 0.82 KB )
  43. /www/wwwroot/a.sjds.net/app/event.php ( 0.25 KB )
  44. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /www/wwwroot/a.sjds.net/app/service.php ( 0.13 KB )
  46. /www/wwwroot/a.sjds.net/app/AppService.php ( 0.26 KB )
  47. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /www/wwwroot/a.sjds.net/vendor/services.php ( 0.14 KB )
  53. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /www/wwwroot/a.sjds.net/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /www/wwwroot/a.sjds.net/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /www/wwwroot/a.sjds.net/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /www/wwwroot/a.sjds.net/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /www/wwwroot/a.sjds.net/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /www/wwwroot/a.sjds.net/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /www/wwwroot/a.sjds.net/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /www/wwwroot/a.sjds.net/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /www/wwwroot/a.sjds.net/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /www/wwwroot/a.sjds.net/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /www/wwwroot/a.sjds.net/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /www/wwwroot/a.sjds.net/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /www/wwwroot/a.sjds.net/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /www/wwwroot/a.sjds.net/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /www/wwwroot/a.sjds.net/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /www/wwwroot/a.sjds.net/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /www/wwwroot/a.sjds.net/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /www/wwwroot/a.sjds.net/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /www/wwwroot/a.sjds.net/app/Request.php ( 0.09 KB )
  84. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /www/wwwroot/a.sjds.net/app/middleware.php ( 0.25 KB )
  86. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /www/wwwroot/a.sjds.net/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /www/wwwroot/a.sjds.net/route/app.php ( 1.72 KB )
  100. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /www/wwwroot/a.sjds.net/app/controller/Index.php ( 4.81 KB )
  104. /www/wwwroot/a.sjds.net/app/BaseController.php ( 2.05 KB )
  105. /www/wwwroot/a.sjds.net/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /www/wwwroot/a.sjds.net/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /www/wwwroot/a.sjds.net/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /www/wwwroot/a.sjds.net/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /www/wwwroot/a.sjds.net/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /www/wwwroot/a.sjds.net/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /www/wwwroot/a.sjds.net/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /www/wwwroot/a.sjds.net/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /www/wwwroot/a.sjds.net/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /www/wwwroot/a.sjds.net/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /www/wwwroot/a.sjds.net/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /www/wwwroot/a.sjds.net/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /www/wwwroot/a.sjds.net/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /www/wwwroot/a.sjds.net/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /www/wwwroot/a.sjds.net/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /www/wwwroot/a.sjds.net/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /www/wwwroot/a.sjds.net/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /www/wwwroot/a.sjds.net/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /www/wwwroot/a.sjds.net/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /www/wwwroot/a.sjds.net/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /www/wwwroot/a.sjds.net/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /www/wwwroot/a.sjds.net/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /www/wwwroot/a.sjds.net/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /www/wwwroot/a.sjds.net/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /www/wwwroot/a.sjds.net/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /www/wwwroot/a.sjds.net/runtime/temp/64ad42204038485b18ca907186edb47b.php ( 8.05 KB )
  140. /www/wwwroot/a.sjds.net/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000857s ] mysql:host=172.18.0.4;port=3306;dbname=a_sjds;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000810s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000458s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000364s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000632s ]
  6. SELECT * FROM `set` [ RunTime:0.000320s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000639s ]
  8. SELECT * FROM `article` WHERE `id` = 542338 LIMIT 1 [ RunTime:0.000492s ]
  9. UPDATE `article` SET `lasttime` = 1793973956 WHERE `id` = 542338 [ RunTime:0.001833s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000347s ]
  11. SELECT * FROM `article` WHERE `id` < 542338 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000480s ]
  12. SELECT * FROM `article` WHERE `id` > 542338 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000404s ]
  13. SELECT * FROM `article` WHERE `id` < 542338 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000621s ]
  14. SELECT * FROM `article` WHERE `id` < 542338 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000612s ]
  15. SELECT * FROM `article` WHERE `id` < 542338 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.000651s ]
0.085060s