首页 > 解决方案 > 使用 Arc 对 Actix 状态变量中的 hashmap 数据进行可变性,但出现“&”引用错误

问题描述

在 routes.rs 代码中,由于出现此类错误,无法修改任何内容。

错误 1无法分配引用player_state.guid = 45后面的内容&无法分配 rustcE0594

我可以毫无问题地读取所有数据。我试过在这里和那里添加、删除 mut 和 &mut ......我现在迷路了

//routes.rs
#[get("/test_v2")]
async fn test_v2(state_data: web::Data<AppState>,) -> Result<String, ()> {
    let mut current_state = &mut state_data.current_state.lock().unwrap();
    let mut player_state = &mut current_state.get("player_00").unwrap();
    
    player_state.guid = 45;


    Ok(format!(" {:#?}", current_state.get("account_00")))
}
//main.rs
let current_state:Arc<Mutex<HashMap<String, PlayerState>>> = Arc::new(Mutex::new(
        blocks::getPlayersStats(pg_pool.clone()).await,
    ));

    HttpServer::new(move || {
        let state_data = web::Data::new(AppState {
            current_state: current_state.clone(),
        });
        App::new().app_data(state_data).configure(routes::config)
    })
    .bind("127.0.0.1:8082")?
    .run()
    .await

#[derive(Deserialize, Debug, Serialize, Clone)]
pub struct PlayerState {
    pub guid: u64,
}


#[derive(Debug)]
pub struct AppState {
    pub current_state: Arc<Mutex<HashMap<String, PlayerState>>>,
}

标签: rust

解决方案


推荐阅读