# unwrap_goto unwrap Option an Result data. When data is wrap with Some or Ok, it will unwrap, otherwise can goto `return`/`cotinue`/`break` as you want. When none will return. ```rust #[macro_use] extern crate unwrap_goto; fn do_none_is_return(m: &Vec>) { let mut k = 0; for v in m { println!("imcome:{:?}", v); k = some_or_return!(v); println!("wrap value:{:?}", k); } assert_eq!(k, 1); 0 } fn none_is_return() { let m = vec![Some(1), None, Some(1)]; let n = do_none_is_return(&m); println!("return value:{:?}", n); } ``` ```rust fn do_none_is_return(m: &Vec>) -> i64 { let mut k = 0; for v in m { println!("imcome:{:?}", v); k = some_or_return!(v, 8); println!("wrap value:{:?}", k); } assert_eq!(k, 1); 0 } fn none_is_return() { let m = vec![Some(1), None, Some(1)]; let n = do_none_is_return(&m); println!("return value:{:?}", n); } ``` ```rust use log::error; fn call_when_err_return_log() { let x: Result = Err("Some error message"); ok_or_return!(x, (), error!("log error info.{:?}", x)); println!("anything print out"); } ```