【Go学习笔记】带缓冲IO的bufio包
带缓冲的IObufio.ScannerScanner为读取数据提供了一些方便的接口,通过切割方法可以逐字节,逐字,逐词组,逐行读取,某些场景下使用scanner可以很方便的解决问题。
123456789101112131415161718func main() { // 通过NewSacnner生成一个实例对象 scanner := bufio.NewScanner(os.Stdin) // 循环输入内容 for { fmt.Print("请输入内容:") // 扫描输入的内容,如果没有扫描到数据则返回false scanner.Scan() // 通过判断进行跳出循环,当输入的内容是quit时跳出循环 if "quit" == scanner.Text() { break } // scanner.Text获取输入的内容 fmt.Println("你输入的内容是:", scanner.Text()) }}
运行示例
1234567请输 ...
【Go学习笔记】io和ioutil包的使用
io包的使用通过Buffer实现文件复制1234567891011121314151617181920212223242526272829303132333435363738394041424344454647func copyFile(src, dst string) error { // 只读方式打开源文件 srcFile, err := os.Open(src) if err != nil { return err } // 延迟关闭源文件 defer srcFile.Close() // 创建文件,并写入模式打开 dstFile, err := os.Create(dst) if err != nil { return err } // 延迟关闭目标文件 defer dstFile.Close() // 定义一个1024字节的buffer切片用来临时存放数据 buffer := make([]byte, 1024) // 遍历读取源文件并存储到buffer中。 for { n, err := srcFile.Re ...
【Go学习笔记】filepath-Builder-Reader-Buffer的使用
filepath的使用1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253func main() { // 返回所给路径的绝对路径 path, _ := filepath.Abs("./filepath.go") fmt.Println(path) // 返回路径的最后一个元素 fmt.Println(filepath.Base("./filepath.go")) // 如果路径为空字符串,返回. fmt.Println(filepath.Base("")) // 如果路径只有斜线,返回/ fmt.Println(filepath.Base("///")) // 返回元素的目录路径 // 路径为空则返回. fmt.Println(filepath.Dir("/a/b/c.txt")) // /a/b //返回等价的最短路径 //1.用一个 ...
helm实现更新cm和secret后自动更新pod引用
helm实现更新cm和secret后自动更新pod在kubernetes中,更新configMap后,pod是不会自动识别configMap和secret中的变动。
configMap和secret更新后,如果想使pod中引用configMap和secret的变量生效,通常简单的做法是:
方法1. 手动删除该pod,让其自动产生一份新的pod.
方法2. 修改pod中的spec配置,让其自动产生一份新的pod.
方法3. 增加一个sidecar,让其监控configMap的变化,来重启pod.
ReloaderReloader[3] 是一个监视 ConfigMap/Secret 更改并对其关联的 Deployment、Daemonset、StatefulSet、DeploymentConfig 进行滚动更新的开源项目。
Reloader的使用方法比较简单,首先部署 Reloader 控制器:
1kubectl apply -f https://raw.githubusercontent.com/stakater/Reloader/master/deployments/kuberne ...
【Go学习笔记】文件IO操作
读取文件内容os.Open读取文件读取内容
123456789101112131415161718192021func main() { // 打开`/etc/passwd`文件 f, err := os.Open("/etc/passwd") if err != nil { fmt.Println("Open File Failed:", err) return } defer f.Close() // 定义一个字节切片 buf := make([]byte, 1024) // 从文件将读出内容保存到buf字节切片中 n, err := f.Read(buf) if err != nil { fmt.Println("Read file Failed:", err) return } // 打印读出的文件内容 fmt.Println(n, err, string(buf[:n]))}
读取一个完整的文件
12345678910111213141516fu ...
Lvm磁盘管理常用操作
创建并使用lvm逻辑卷安装lvm2软件包
1$ yum install -y lvm2
创建物理卷PV1234567891011121314151617# 查看所有可用磁盘$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTvda 253:0 0 40G 0 disk └─vda1 253:1 0 40G 0 part /vdb 253:16 0 40G 0 disk vdc 253:32 0 40G 0 disk vdd 253:48 0 40G 0 disk# 创建pv$ pvcreate /dev/vdb /dev/vdc /dev/vdd# 查看pv信息$ pvdisplay$ pvscan$ pvs$ lvmdiskscan
创建卷组VG如果您需要添加多块物理卷,则可以添加多个物理卷名称,名称之间以空格间隔。卷组名由您自定义名称,假设为lvm_01。
1234567# 创建vg$ vgcreate lvm_01 /dev/vdb /dev/vdc /de ...
【Go学习笔记】结构体相关
Go语言基础之结构体Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念。Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性。
结构体Go语言中的基础数据类型可以表示一些事物的基本属性,但是当想表达一个事物的全部或部分属性时,这时候再用单一的基本数据类型明显就无法满足需求了,Go语言提供了一种自定义数据类型,可以封装多个基本数据类型,这种数据类型叫结构体,英文名称struct。 也就是我们可以通过struct来定义自己的类型了。
Go语言中通过struct来实现面向对象。
结构体的定义使用type和struct关键字来定义结构体,具体代码格式如下:
12345type 类型名 struct { 字段名 字段类型 字段名 字段类型 …}
其中:
类型名:标识自定义结构体的名称,在同一个包内不能重复。
字段名:表示结构体字段名。结构体中的字段名必须唯一。
字段类型:表示结构体字段的具体类型。
举个例子,我们定义一个Person(人)结构体,代码如下:
12345type person struct { ...
Ceph常用命令详解
结合网络、官网、手动查询等多方渠道,整理ceph维护管理常用命令,并且梳理常规命令在使用过程中的逻辑顺序。另外整理期间发现ceph 集群的命令体系有点乱,详细情况各自体验。
ceph集群启动、重启、停止1:ceph 命令的选项如下:
选项简写描述
–verbose -v:详细的日志。
–valgrind:N/A(只适合开发者和质检人员)用 Valgrind 调试。
–allhosts -a :在 ceph.conf 里配置的所有主机上执行,否 则它只在本机执行。
–restart:N/A核心转储后自动重启。
–norestart:N/A核心转储后不自动重启。
–conf -c:使用另外一个配置文件。
Ceph 子命令包括:
命令描述
start启动守护进程。
stop停止守护进程。
forcestop暴力停止守护进程,等价于 kill -9
killall杀死某一类守护进程。
cleanlogs清理掉日志目录。
cleanalllogs清理掉日志目录内的所有文件。
启动所有守护进程要启动、关闭、重启 Ceph 集群,执行 ceph 时加上 相关命令,语 ...
【Go标准库】Base64-Hex-Md5计算
Base64的使用Golang内置支持Base64编码解码,Go的encoding/base64包遵照RFC 4648规范实现了base64编码解码功能,包括标准方式以及URL/文件名称安全方式编码。
标准方式编码解码RFC 4648规范约定标准Base64对任何二进制数据使用US-ASCII字符子集进行编码,字符包括:A-Z, a-z, 0-9, +, and /
12345678910func main() { data := "我爱Go语言" // base64编码,通常说的base64 0-9a-zA-Z+_ 64 // 5oiR54ixR2/or63oqIA= 标准编码带/ fmt.Println(base64.StdEncoding.EncodeToString([]byte(data))) // 解码 内容:我爱Go语言 txt,err := base64.StdEncoding.DecodeString("5oiR54ixR2/or63oqIA=") fmt.Println(string(txt),err)} ...
【Go标准库】Time标准库的使用
Time包的使用获取当前时间
123456789101112func main() { // 当前时间 now := time.Now() // 打印年月日 时分秒 fmt.Println(now) // 2021-07-19 21:56:53.340103 +0800 CST m=+0.000077835 fmt.Println(now.Year()) // 年 fmt.Println(now.Month()) // 月 fmt.Println(now.Day()) // 日 fmt.Println(now.Hour()) // 时 fmt.Println(now.Minute()) // 分 fmt.Println(now.Second()) // 秒}
时间和时间戳操作
1234567891011121314151617181920212223242526272829303132func main() { // 时间 now := time.Now() // 获取当前unix时间戳 fmt.Println(now.Unix()) // ...