// redis
let redis_client_rlt = redis::Client::open("redis://XXXXX/");
if let Err(_) = redis_client_rlt {
dbg!("[core]-[main]-[start]--redis start faild");
return Ok(());
}
let redis_client = redis_client_rlt.unwrap();
std::env::set_var("RUST_LOG", "debug");
log4rs::init_file("./core/log4rs.yml", Default::default()).unwrap();
HttpServer::new(
move|| {
let json_config = web::JsonConfig::default()
.limit(4096)
.error_handler(|err, _req| {
// create custom error response
InternalError::from_response(err, HttpResponse::Conflict().finish())
.into()
});
App::new()
.app_data(Data::new(s.clone()))
.app_data(Data::new(redis_client.clone()))
.app_data(json_config)
.configure(service::config_app)
}
)
.bind("127.0.0.1:8080")?
.run()
.await
主要在这两行,为什么要显式调用clone函数,不能直接直接所有权转移到闭包内吗 .app_data(Data::new(s.clone())) .app_data(Data::new(redis_client.clone())
1
共 2 条评论, 1 页
评论区
写评论还是学的不好,感谢回答
--
👇
fakeshadow: HttpServer::new接受的是Fn闭包,需要满足多次调用闭包返回App实例的条件。闭包捕获的变量一般通过Clone或者Copy满足该条件。
HttpServer::new接受的是Fn闭包,需要满足多次调用闭包返回App实例的条件。闭包捕获的变量一般通过Clone或者Copy满足该条件。