主页

Docker内部无权限创建文件夹的问题

今天遇到一个问题,困扰我好久。在docker里面使用go创建文件夹。 err := os.MkdirAll(logDir, 0755) if err != nil { glog.Errorf("创建日志文件夹错误:%s", err) user, err := user.Current() if err != nil { log.Fatalf(err.Error()) } username := user.Username glog.Infof("当前用户:%s", username) return } 总是报错: 非常郁闷,后来查了stackoverflow: https://stackoverflow.com/questions/...

阅读更多

Gin框架c.clientip()获取的ip很神奇

本来我的需求是在b服务器上面开启了一个服务,是要去c服务器拉取一个文件。 然后b服务器上的服务由a服务器上的curl命令触发。而文件的内容想要记录b服务器的ip。通过查看文件内容来查看是否是b服务器的ip。 本来我是想在c服务器上gin框架通过c.ClientIp()获取b服务器的ip,没想到最终文件里呈现的是a服务器的ip,知道我看了这段注释。 如注释所示: c.ClientIp()使用了一种尽了最大努力的算法,让获取到的ip穿透代理层,所以最后获取的是a的ip。

阅读更多

Rust 实现下载大文件进度条

rust下载大文件,实现进度条的话,必须要用异步的reqwest才能实现,blocking的reqwest无法使用。 引入依赖 [dependencies] futures = "0.3.4" tokio = { version = "1", features = ["full"] } 编写下载函数,实现进度条 install.rs pub async fn download_package(url: &str) -> Result<String, anyhow::Error> { let url_last = url.split("/").last().unwrap(); let base_dir = env::current_...

阅读更多

Rust 实现tail F 操作

网上有个例子,但是不支持指定-f参数,也就是最后算多少行开始。我做了下改动,给register函数添加了参数n use std::fs::File; use std::io; use std::io::BufReader; use std::io::ErrorKind; use std::io::prelude::*; use std::io::SeekFrom; use std::os::unix::fs::MetadataExt; use std::path::Path; use std::thread::sleep; use std::time::Duration; pub enum LogWatcherAction { None, SeekToEnd, } ...

阅读更多

Rust 实现ssh操作

使用rust操作ssh,执行命令,然后输出。长时间执行的命令需要一行一行输出。核心是通过BufReader::new来包装一下channel,这种就有了read_lines方法了。 use std::fmt::format; use std::io::{BufRead, Read}; use std::net::TcpStream; use std::io::BufReader; use ssh2::Session; pub struct Config { pub ip: String, pub port: i32, pub username: String, pub password: String, } pub struct SSH { ...

阅读更多

Rust mod中的坑

一开始我认为rust划分mod很简单。我是这样做的。新建一个pack.rs里面写代码 use ssh2::Session; pub mod pack{ pub struct Config { pub ip: String, pub port: i32, pub username: String, pub password: String, } pub struct SSH { pub session: Session, pub config: Config, } impl SSH { pub fn new(ip: &str, username: &str, password: ...

阅读更多

Golang mysql link序列化反序列化

常量变量 option.go var ( MysqlLinkFormat = "%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=true&loc=Local" MysqlLinkRegex = regexp.MustCompile("((\\w+):(\\w+)@\\w+\\(((?:(?:2(?:5[0-5]|[0-4]\\d))|[0-1]?\\d{1," + "2})(?:\\.(?:2(?:5[0-5]|[0-4]\\d)|[0-1]?\\d{1,2})){3}):([0-9]+)\\)/(\\w+).*)\\?") ) mysql link序列化 func DumpsMysqlLink(userna...

阅读更多

Golang tmol配置更新和覆盖配置文件

配置更新 g.Cfg().Set("database.mysql.0.link", dbUrl) g.Cfg().Set("database.type", toType) 覆盖配置文件 m := g.Cfg().Map() buf := new(bytes.Buffer) if err := toml.NewEncoder(buf).Encode(m); err != nil { glog.Error(err) } // bak configuration gfile.Rename(AppFile, fmt.Sprintf("%s.bak.%s", AppFile, gtime.Now().ISO8601())) ioutil.WriteFile(AppFi...

阅读更多