bspwm

bspwm https://wiki.archlinux.org/title/bspwm https://zhuanlan.zhihu.com/p/568211941 mkdir ~/.config install -Dm755 /usr/share/doc/bspwm/examples/bspwmrc ~/.config/bspwm/bspwmrc install -Dm644 /usr/share/doc/bspwm/examples/sxhkdrc ~/.config/sxhkd/sxhkdrc 快捷键 win + enter: 打开 urxvt win + space: dmenu_run

2019-04-10 · 1 min · 23 words · -

TProxy

TProxy net.ipv4.ip_forward 这条命令的作用是开启 Linux 系统的 IPv4 协议栈的数据包转发功能。 sudo sysctl net.ipv4.ip_forward = 1 ip_forward = 0 如果目标 IP 地址是本机拥有的某个 IP 地址,系统就会接收并处理这个数据包(例如,交给某个正在监听端口的应用程序)。 如果目标 IP 地址不是本机的,系统会默认将该数据包丢弃。这是普通主机(Host)的正常行为。 ip_forward = 1 如果目标 IP 地址是本机的,处理方式不变。 如果目标 IP 地址不是本机的,系统不会丢弃它。而是会查询自己的路由表,根据路由规则将这个数据包从合适的网络接口转发出去,发送给下一个路由器或者目标主机。这时,这台机器就扮演了路由器(Router)的角色。 TPROXY 的作用 TPROXY(Transparent Proxy)用来做 透明代理,可以拦截特定的流量,并强制把它交给本地某个 socket(通常是代理进程),而 不改变包的目标地址/端口(和 REDIRECT 不一样,REDIRECT 会改成本机 IP)。 TPROXY 依赖内核的 nf_tproxy_core 模块,它会在路由决策阶段之前决定:这个包是否交给本地 socket TPROXY 能拦截哪些流量 来自外部的流量 在 mangle/PREROUTING 链,TPROXY 可以截获所有进入本机的包 —— 不论目标 IP 是本机,还是本来应该转发出去的其它主机,都可以“强行”转给本地代理进程。 这就是它相比 REDIRECT 的强大之处: REDIRECT 只能改成本机 IP,所以只适合本机为目标的流量; TPROXY 不改变目标 IP,能“假装”这个包还是发往原地址,同时又让本地代理进程接收。 本地产生的流量 在 mangle/OUTPUT 链,TPROXY 可以截获本机应用发出的连接,再转交给代理进程。 哪些流量不能被 TPROXY 拦截? 内核绕过 Netfilter 的流量:例如某些特殊协议或 raw socket 直接发出的包。 ...

2019-04-10 · 3 min · 458 words · -

golang, cgo, CGO_ENABLED

golang, cgo, CGO_ENABLED go build CGO_ENABLED=0 GOOS=linux go build -v -a -o name0 main.go cgo CGO 提供了 golang 和 C 语言相互调用的机制。某些第三方库可能只有 C/C++ 的实现,完全用纯 golang 的实现可能工程浩大,这时候 CGO 就派上用场了。 可以通 CGO 在 golang 在调用 C 的接口,C++ 的接口可以用 C 包装一下提供给 golang 调用。 被调用的 C 代码可以直接以源代码形式提供或者打包静态库或动态库在编译时链接。 推荐使用静态库的方式,这样方便代码隔离,编译的二进制也没有动态库依赖方便发布也符合 golang 的哲学。 CGO_ENABLED=0 的情况下,Go 采用纯静态编译; CGO_ENABLED=1 go build 编译时会添加一些动态库链接 如 glibc cgo,允许你在 Go 代码中调用C代码 我们以os/user为例,在 CGO_ENABLED=1,即 cgo 开启的情况下,os/user 包中的 lookupUserxxx 系列函数采用了 c 版本的实现,我们看到在 $GOROOT/src/os/user/lookup_unix.go 中的 build tag 中包含了 build cgo。这样一来,在 CGO_ENABLED=1,该文件将被编译,该文件中的c版本实现的lookupUser将被使用 ...

2019-04-05 · 1 min · 87 words · -

linux nm

linux nm nm 目标文件格式分析 nm 命令显示关于指定 File 中符号的信息,文件可以是对象文件、可执行文件或对象文件库。如果文件没有包含符号信息,nm 命令报告该情况,但不把它解释为出错条件。 nm 命令缺省情况下报告十进制符号表示法下的数字值。 nm nm命令主要是列出目标文件的符号 (说白了就是一些函数和全局变量等) 。 如果你编译出来的程序没有经过 strip ,那么 nm 命令可以挖掘出隐含在可执行文件中的重大秘密。它可以帮你列出文件中的变量及函数,这对于我们进行反向操作具有重大意义。 下面我们通过一小段简单的程序来讲解 nm 命令的用途。在编译这个程序时,我们加上了 -g 选项,这个选项可以使编译出来的文件包含更多有效信息。 nm /path/to/foo nm命令 功能:列出.o、.a、.so中的符号信息,包括符号的值,符号类型及符号名称等。所谓符号,通常指定义出的函数,全局变量等 https://blog.csdn.net/mayue_web/article/details/115919693 使用: nm [option(s)] [file(s)] 1 示例: 查看静态库或动态库定义了哪些函数 nm -n –defined-only xxxx.a nm -g -C –defined-only xxxx.so nm -D xxxx.so 显示hello.a 中的未定义符号,需要和其他对象文件进行链接 nm -u hello.o 在 ./ 目录下找出哪个库文件定义了close_socket函数 nm -A ./* 2>/dev/null | grep “T close_socket” ———————————————— 版权声明:本文为CSDN博主「mayue_csdn」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/mayue_web/article/details/103879976 https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/nm.html

2019-04-05 · 1 min · 71 words · -

win11 ssh agent

win11 ssh agent https://www.cnblogs.com/sparkdev/p/10166061.html https://davidaugustat.com/windows/windows-11-setup-ssh making sure that the OpenSSH client is installed Settings -> Apps -> Optional Features Scroll to “OpenSSH Client” and click on the item If it shows an “Uninstall” button, then OpenSSH is already installed, and you can skip to the next section. open Windows service, win + R “services.msc” Enabling the SSH Authentication Agent scroll to “OpenSSH Authentication Agent” and set to Automatic Delayed Start Generating the SSH key add private key into ssh-agent ...

2019-04-05 · 1 min · 100 words · -

hyperv archlinux

hyperv archlinux hyper v 禁用安全启动 虚拟机>设置>安全>启用安全启动(去掉勾选) network 在虚拟机栏中右键点击虚拟机>设置>添加硬件 选择"网络适配器" 点击添加按钮 添加 Default switch. Default switch默认会做nat,添加 后虚拟机可以正常访问网络.但Default switch的ip/网段每次重启会变,如果 需要 固定ip,需要另外手动新建一个交换机sw0 新建虚拟交换机 Hyper-V 管理器>右侧操作栏>虚拟交换机管理器>新建虚拟交换机>内部>新建虚拟交换机 名称: sw0 连接类型: 内部网络 在windows中打开网络适配器设置,手动设置sw的 ip为 192.168.80.1 网关可以不填 dns: 192.168.1.xxx linux里 手动测试sw0的ip : 192.168.80.2 Gateway 不要设置, 两个网卡 对应default switch的设置默认网关,sw0不设置 DNS: 192.168.1.xxx 问题 遇到过一次虚拟机不能访问外网, 确认linux网络 配置没有问题, 重启windows解决了. install VcXsrv GUI VSOCK + x410 https://x410.dev/cookbook/hyperv/using-x410-with-hyper-v-linux-virtual-machines-via-vsock/ 卸载 xrdp yay -R xrdp 修改win10注册表,配置vsock x410-display-0-only.reg Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization\GuestCommunicationServices\00001770-facb-11e6-bd58-64006a7986d3] "ElementName"="X410 Display 0" 启动x410 并 开启vsock x410 /listen hyperv /desktop xfce4 桌面启动脚本 sudo vim /usr/bin/start-xfce4-desktop.sh export XDG_SESSION_TYPE=x11 export XDG_CURRENT_DESKTOP=“XFCE” exec startxfce4 ...

2019-04-01 · 2 min · 262 words · -

KVM 的-nographic与-display选项

KVM 的-nographic与-display选项 KVM的-nographic与-display选项 http://openwares.net/2014/03/10/kvm_nographic_display/ KVM的-nographic与-display选项& http://openwares.net/2014/03/10/kvm_nographic_display/embed/#?secret=cEd7rLTTHt KVM客户机正常运行时是不需要在主机上显示图形界面的,以前都是使用-nographic和-daemoniz选项来使客户机后台运行。 但是从qemu-kvm 1.4开始,这招不灵了,会有这样的错误提示: -nographic can not be used with -daemonize 这提示过于简单的,新版本的kvm不再允许-nographic和-daemonize一起使用了,应该使用-display none参数来代替-nographic,这样: kvm … -display none -daemonize -display参数用于替代老风格的显示类型选项,如-sdl,-curses,-vnc,其语法如下: -display [sdl | curses | vnc=] 其中,vnc=中的display与显示环境变量$DISPLAY的含义一致,格式为hostname: displaynumber.screennumber(X服务器主机名/地址:显示号.屏幕号)。一般设置为vnc=:0即可,如果有多台虚拟机在同一台主机上需要同时使用VNC,则每台客户机的显示号顺延就可,比如:1,:2,:3等,而通过vnc客户端连接客户机的端口号则分别为5900,5901,5902,5903。5900是默认的vnc端口,对应显示设备:0。 使用-display none选项时,客户机仍然会看到模拟的显卡,但是其显示不会输出给用户。 -display none与-nographic的区别是,-display none仅仅影响显示输出,而-nographic同时还会影响串行口和并行口的输出。 -nographic和-daemonize组合一直以来存在一个小问题,kvm客户机启动后,主机虚拟终端后续的命令回显会被关闭,但命令的输出会显示,只能退出重新登录终端才会恢复正常,这是个很明显的bug,却很久都没有修复。改用-display none参数后就没有此问题了。 kvm更详细的用法,请自行 man qemu

2019-03-31 · 1 min · 42 words · -

iptables `nftables` 混合使用 -_-

iptables nftables 混合使用 -_- iptables 和 nftables 可以混合使用,但是规则要小心配置。 archlinux nftables 的默认规则是禁止转发的 (forward) 看 iptables 的 trace 日志 报文会先经过 iptables 的 forward 链,再流到 nftables 的 forward 链。 nftables 默认在 forward 链抛掉所有数据。 如果启用了 nftables, 一定修改一下 nftables 的默认配置文件。否则报文在 iptables 的 forward 链 accept 之 后会被 nftables 规则抛掉。 iptables trace iptables 调试, raw 表, LOG nftables trace nftables trace

2019-03-30 · 1 min · 55 words · -

nftables trace

nftables trace nhttps://wiki.nftables.org/wiki-nftables/index.php/Ruleset_debug/tracing nft add rule nat post ip saddr 192.168.60.0/24 meta nftrace set 1 oif wlp3s0 masquerade nft add rule nat post ip protocol icmp icmp type echo-request meta nftrace set 1 accept nft insert rule nat post ip protocol icmp icmp type echo-request meta nftrace set 1 accept nft add rule nat post ip protocol icmp icmp type echo-request meta nftrace set 1 log nft monitor trace

2019-03-30 · 1 min · 69 words · -

btrfs

btrfs 禁用 COW chattr +C /path/to/dir/ https://typeblog.net/migrate-to-btrfs/ 数据一致性相关的特性 COW 事务 理解 COW 事务,必须首先理解 COW 和事务这两个术语。 什么是 COW? 所谓 COW,即每次写磁盘数据时,先将更新数据写入一个新的 block,当新数据写入成功之后,再更新相关的数据结构指向新 block 。 什么是事务? COW 只能保证单一数据更新的原子性。但文件系统中很多操作需要更新多个不同的元数据,比如创建文件需要修改以下这些元数据: 修改 extent tree,分配一段磁盘空间 创建一个新的 inode,并插入 FS Tree 中 增加一个目录项,插入到 FS Tree 中 任何一个步骤出错,文件便不能创建成功,因此可以定义为一个事务。 下面将演示一个 COW 事务。 A 是 FS Tree 的根节点,新的 inode 的信息将被插入节点 C 。首先,btrfs 将 inode 插入一个新分配的 block C ‘中,并修改上层节点 B,使其指向新的 block C ‘;修改 B 也将引发 COW,以此类推,引发一个连锁反应,直到最顶层的 Root A 。当整个过程结束后,新节点 A ‘变成了 FS Tree 的根。但此时事务并未结束,superblock 依然指向 A 。 ...

2019-03-30 · 1 min · 85 words · -

go > docker

‘go > docker’ gOOS=linux GOARCH=arm go build . docker build -t registry.wiloon.com/nj4xx-data:v0.1.0 . docker push registry.wiloon.com/nj4xx-data:v0.1.0 docker pull registry.wiloon.com/nj4xx-data:v0.1.0

2019-03-28 · 1 min · 19 words · -

Windows apps, win apps

Windows apps, win apps WizTree 硬盘占用分析, 商用收费 SpaceSniffer 硬盘占用分析, 商用友好 WinDirStat MiniTool Partition Wizard, 磁盘分区工具 anydeak 远程桌面 todesk 远程桌面 taskmgr, 任务管理器, C:\Windows\System32\Taskmgr.exe winget winget install Microsoft.WindowsTerminal Microsoft.WindowsTerminal WinScp, WinSCP.WinSCP firefox, Mozilla.Firefox powershell, Microsoft.PowerShell curl, cURL.cURL Golang, GoLang.Go Tabby, Eugeny.Tabby nodejs, OpenJS.NodeJS choco # 安装软件,重复执行只会检查是否安装不会升级版本 choco install keepassxc # 升级软件到新版本 choco upgrade keepassxc https://blog.wiloon.com/?p=8340 https://chocolatey.org/packages chocolatey packages Name 备注 chocolatey choco可以自己更新自己 keepassxc microsoft-windows-terminal 1.12.10393.0 winscp vnote.portable 支持markdown和puml的文本编辑器 vscode Visual Studio Code notepadplusplus puyyt telegraf redis-desktop-manager heidisql 录屏 https://www.v1tx.com/post/best-screen-recorder/ ...

2019-03-28 · 1 min · 147 words · -

armv6, armv7, rm处理器中a5 a8 a9,v6 v7,arm7 arm9 arm11

armv6, armv7, rm处理器中a5 a8 a9,v6 v7,arm7 arm9 arm11 ARM是微处理器行业的一家知名企业,arm处理器以体积小和高性能的优势在嵌入式设备中广泛使用,几乎所有手机都是使用它的。 armv6, armv7, armv7s是ARM CPU的不同指令集,原则上是向下兼容的。如iPhone4S CPU支持armv7, 但它同时兼容armv6,只是使用armv6指令可能无法充分发挥它的特性。同理iPhone5 CPU支持armv7s,它虽然也兼容armv7,但是却无法进行相关的优化。 ARM处理器发展这么多年,有很多架构,很多不同的内核 架构有armv1 v2 v3 v4 v5 v6 v7 内核太多了,比如armv1对应的是arm1,armv5对应的arm9,armv6对应的arm11,armv7对应的cortex(比如A8 A9都属于cortex架构) cortex-a8 cortex-a9 arm11 arm 9都是CPU构架。 在性能上cortex-a9 >cortex-a8>arm11。 arm11是ARM V6的构架,老的指令集,被淘汰的东西咯,性能不如ARM V7构架的CPU。 cortex-a8 是第一款基于 ARM V7指令集的CPU,比V6先进了,V6的不支持在线FLASH播放。即使能安装插件也不能完整的支持FLASH播放,性能上不行,即使破解了播不出来。A8完美支持FLASH的! cortex-a8 是目前的主流CPU,中高端机上的,尤其是高端机的稳定产品,中低端都用V6构架的CPU,比如MSM 7227 ,别看800Hz的频率,其实是上一代的,不如同频率的7230的性能的四分之一。 cortex-a9多核处理器,对MPCore的优化,向高性能的发展,未来的主流,现在的双核手机CPU都是这个构架 目前最好的是cortex-A9构架的CPU是高端的主流CPU,比如NV的双核,德州仪器的双核很多都是用的A9构架,A8是目前的中高端的主流,一般A8构架的双核CPU不多,几乎没有。 https://blog.csdn.net/maochengtao/article/details/9951131

2019-03-27 · 1 min · 47 words · -

WAL

WAL 什么是 WAL WAL (Write Ahead Log) 预写日志,是数据库系统中常见的一种手段,用于保证数据操作的原子性和持久性。 在计算机科学中,「预写式日志」 (Write-ahead logging,缩写 WAL)是关系数据库系统中用于提供原子性和持久性 (ACID 属性中的两个)的一系列技术。在使用 WAL 的系统中,所有的修改在提交之前都要先写入 log 文件中。 log 文件中通常包括 redo 和 undo 信息。这样做的目的可以通过一个例子来说明。假设一个程序在执行某些操作的过程中机器掉电了。在重新启动时,程序可能需要知道当时执行的操作是成功了还是部分成功或者是失败了。如果使用了 WAL,程序就可以检查 log 文件,并对突然掉电时计划执行的操作内容跟实际上执行的操作内容进行比较。在这个比较的基础上,程序就可以决定是撤销已做的操作还是继续完成已做的操作,或者是保持原样。 WAL 允许用 in-place 方式更新数据库。另一种用来实现原子更新的方法是 shadow paging,它并不是 in-place 方式。用 in-place 方式做更新的主要优点是减少索引和块列表的修改。ARIES 是 WAL 系列技术常用的算法。在文件系统中,WAL 通常称为 journaling。PostgreSQL 也是用 WAL 来提供 point-in-time 恢复和数据库复制特性。 备份 我们想一想,如果想保证对一个数据的操作可以恢复。可以怎么做?你不用去想数据库是怎么实现的,也不用想太高深。其实这是一个很简单的问题,我们常常在处理这种问题。最简单的方法其实就是备份一份数据:当我需要对一条数据做更新操作前,先将这条数据备份在一个地方,然后去更新,如果更新失败,可以从备份数据中回写回来。这样就可以保证事务的回滚,就可以保证数据操作的原子性了。其实 SQLite 引入 WAL 之前就是通过这种方式来实现原子事务,称之为 rollback journal, rollback journal 机制的原理是:在修改数据库文件中的数据之前,先将修改所在分页中的数据备份在另外一个地方,然后才将修改写入到数据库文件中;如果事务失败,则将备份数据拷贝回来,撤销修改;如果事务成功,则删除备份数据,提交修改。 WAL 再继续上面的问题?如何做到数据的可恢复 (原子性)和提交成功的数据被持久化到磁盘 (持久性)?另一种机制就是WAL,WAL 机制的原理也很简单:「修改并不直接写入到数据库文件中,而是写入到另外一个称为 WAL 的文件中;如果事务失败,WAL 中的记录会被忽略,撤销修改;如果事务成功,它将在随后的某个时间被写回到数据库文件中,提交修改。」 WAL 的优点 读和写可以完全地并发执行,不会互相阻塞 (但是写之间仍然不能并发)。 WAL 在大多数情况下,拥有更好的性能 (因为无需每次写入时都要写两个文件)。 磁盘 I/O 行为更容易被预测。 使用更少的 fsync()操作,减少系统脆弱的问题。 提升性能 我们都知道,数据库的最大性能挑战就是磁盘的读写,许多先辈在提供数据存储性能上绞尽脑汁,提出和实验了一套又一套方法。其实所有方案最终总结出来就三种:「随机读写改顺序读写」、「缓冲单条读写改批量读写」、「单线程读写改并发读写」。WAL 其实也是这两种思路的一种实现,一方面 WAL 中记录事务的更新内容,通过 WAL 将随机的脏页写入变成顺序的日志刷盘,另一方面,WAL 通过 buffer 的方式改单条磁盘刷入为缓冲批量刷盘,再者从 WAL 数据到最终数据的同步过程中可以采用并发同步的方式。这样极大提升数据库写入性能,因此,WAL 的写入能力决定了数据库整体性能的上限,尤其是在高并发时。 ...

2019-03-27 · 2 min · 224 words · -

多CPU架构支持的Docker镜像

多 CPU 架构支持的 Docker 镜像 https://medium.com/@mauridb/docker-multi-architecture-images-365a44c26be6

2019-03-23 · 1 min · 6 words · -

tomcat session 共享, redis集群

tomcat session 共享, redis集群 https://github.com/ran-jit/tomcat-cluster-redis-session-manager

2019-03-22 · 1 min · 5 words · -

golang 算符优先级

golang 算符优先级 Binary operators (MACAO) Prio Operators Note 1 * / % « » & &^ Multiplicative 2 + - ^ Additive 3 == != < <= > >= Comparison 4 && And 5 | Or

2019-03-21 · 1 min · 36 words · -

循环冗余校验 (CRC)

循环冗余校验 (CRC) 从奇偶校验说起 所谓通讯过程的校验是指在通讯数据后加上一些附加信息,通过这些附加信息来判断接收到的数据是否和发送出的数据相同。比如说RS232串行通讯可以设置奇偶校验位,所谓奇偶校验就是在发送的每一个字节后都加上一位,使得每个字节中1的个数为奇数个或偶数个。比如我们要发送的字节是0x1a,二进制表示为0001 1010。 采用奇校验,则在数据后补上个0,数据变为0001 1010 0,数据中1的个数为奇数个 (3个) 采用偶校验,则在数据后补上个1,数据变为0001 1010 1,数据中1的个数为偶数个 (4个) 接收方通过计算数据中1个数是否满足奇偶性来确定数据是否有错。 奇偶校验的缺点也很明显,首先,它对错误的检测概率大约只有50%。也就是只有一半的错误它能够检测出来。另外,每传输一个字节都要附加一位校验位,对传输效率的影响很大。因此,在高速数据通讯中很少采用奇偶校验。奇偶校验优点也很明显,它很简单,因此可以用硬件来实现,这样可以减少软件的负担。因此,奇偶校验也被广泛的应用着。 奇偶校验就先介绍到这来,之所以从奇偶校验说起,是因为这种校验方式最简单,而且后面将会知道奇偶校验其实就是CRC 校验的一种(CRC-1)。 累加和校验 另一种常见的校验方式是累加和校验。所谓累加和校验实现方式有很多种,最常用的一种是在一次通讯数据包的最后加入一个字节的校验数据。这个字节内容为前面数据包中全部数据的忽略进位的按字节累加和。比如下面的例子: 我们要传输的信息为: 6、23、4 加上校验和后的数据包: 6、23、4、33 这里 33 为前三个字节的校验和。接收方收到全部数据后对前三个数据进行同样的累加计算,如果累加和与最后一个字节相同的话就认为传输的数据没有错误。 累加和校验由于实现起来非常简单,也被广泛的采用。但是这种校验方式的检错能力也比较一般,对于单字节的校验和大概有1/256 的概率将原本是错误的通讯数据误判为正确数据。之所以这里介绍这种校验,是因为CRC校验在传输数据的形式上与累加和校验是相同的,都可以表示为: 通讯数据 校验字节 (也可能是多个字节) CRC 算法 CRC 算法的基本思想是将传输的数据当做一个位数很长的数。将这个数除以另一个数。得到的余数作为校验数据附加到原数据后面。还以上面例子中的数据为例: 23、4 可以看做一个2进制数: 0000011000010111 00000010 假如被除数选9,二进制表示为: 1001 CRC即循环冗余校验码 (Cyclic Redundancy Check) : 是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查 (CRC) 是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。 CRC32简介 CRC校验实用程序库 在数据存储和数据通讯领域,为了保证数据的正确,就不得不采用检错的手段。在诸多检错手段中,CRC是最著名的一种。CRC的全称是循环冗余校验。 CRC32检错能力极强,开销小,易于用编码器及检测电路实现。从其检错能力来看,它所不能发现的错误的几率仅为0.0047%以下。从性能上和开销上考虑,均远远优于奇偶校验及算术和校验等方式。因而,在数据存储和数据通讯领域,CRC无处不在:著名的通讯协议X.25的FCS (帧检错序列)采用的是CRC-CCITT,ARJ、LHA等压缩工具软件采用的是CRC32,磁盘驱动器的读写采用了CRC16,通用的图像存储格式GIF、TIFF等也都用CRC作为检错手段。 crc golang m_data := []byte{0x01,0x02,0x03,0x04} //创建Byte切片 checksum := CheckSum(m_data) //调用计算CRC函数 CheckSum fmt.Printf("check sum:%X \n",checksum) https://blog.csdn.net/liyuanbhu/article/details/7882789 ...

2019-03-21 · 1 min · 70 words · -

golang base64

golang base64 http://www.01happy.com/golang-base64-encode-decode/ golang中base64编码和解码 Golang 3年前 (2016-08-05) 1011浏览 0评论 golang中base64的编码和解码可以用内置库encoding/base64 package main import ( “encoding/base64” “fmt” “log” ) func main() { input := []byte(“hello golang base64 快乐编程http://www.01happy.com +~”) // 演示base64编码 encodeString := base64.StdEncoding.EncodeToString(input) fmt.Println(encodeString) // 对上面的编码结果进行base64解码 decodeBytes, err := base64.StdEncoding.DecodeString(encodeString) if err != nil { log.Fatalln(err) } fmt.Println(string(decodeBytes)) fmt.Println() // 如果要用在url中,需要使用URLEncoding uEnc := base64.URLEncoding.EncodeToString([]byte(input)) fmt.Println(uEnc) uDec, err := base64.URLEncoding.DecodeString(uEnc) if err != nil { log.Fatalln(err) } fmt.Println(string(uDec)) } 运行输出: go run encode.go aGVsbG8gZ29sYW5nIGJhc2U2NCDlv6vkuZDnvJbnqItodHRwOi8vd3d3LjAxaGFwcHkuY29tICt+ ...

2019-03-21 · 1 min · 84 words · -

golang bytes.buffer

golang bytes.buffer buf := bytes.NewBuffer([]byte{}) bytes.buffer 是一个缓冲 byte 类型的缓冲器,这个缓冲器里存放着都是 byte A buffer is a variable-sized buffer of bytes with Read and Write methods. The zero value for Buffer is an empty buffer ready to use. 创建 Buffer 缓冲器 var b bytes.Buffer // 定义一个 Buffer 变量,不用初始化 b.Writer([]byte("Hello ")) // 可以直接使用 b1 := new(bytes.Buffer) //直接使用 new 初始化,可以直接使用 // 其它两种定义方式 func NewBuffer(buf []byte) *Buffer func NewBufferString(s string) *Buffer NewBufferString 还可以用 bytes.NewBufferString(“hello”) 来建立一个内容是 hello 的缓冲器 ...

2019-03-21 · 1 min · 149 words · -