Flaglord's Space
  • 首页
  • 归档
  • 分类
  • 标签
  • 关于
  •   
  •   

如何在 golang 中上下对齐打印字符串

在一些场景中,我们需要像表格一样整齐地打印一些信息,比如一个人的姓名,家庭地址和联系方式,我希望打印的格式像下面这样: 123Name : BobAddress : New York AvenuePhone : 12345674567 这个问题听上去非常简单,简单到似乎不该成为一个问题,我们很容易地给出下面这段代码: 12345678information := map[string]
2023-02-02
golang
#golang

使用 Golang 实现 AES 加密算法

写在之前定位本文无意于介绍对称加密和非对称加密算法的区别,也无意于从底层来讲解 AES 算法的加密原理以及一步步实现,可能会有人注意到 Golang 实际上内置了 cypto/aes 这个包,但它的抽象程度还没有那么高(比如提供像Encrypt(key, plainText) 以及 Decrypt(key, cipherText)这样的接口),所以到我们真正使用间还隔着一道沟壑,所以本文就是在讲如
2022-12-26
golang
#golang

Goroutine 使用的一些经验谈

在工作中 Goroutine 使用得相当多,积累了不少经验,也逐渐学习了一些小 tricks,在此进行一些总结 。 如何控制 Goroutine 的数量关于 Goroutine 的语法不做赘述。 首先,使用协程池还是直接创建新的 Goroutine 并限制数量(协程池会尽可能复用而不是创建)仁者见仁,智者见智,由于 Goroutine 比较轻量级,即便创建新的 Routine 资源消耗也不会很大,
2022-11-28
#golang #goroutine

golang file permission mode

导言在自己实现简易版容器时,出现了一些跟文件权限的相关问题,用到了跟chmod和chown相关的指令,在这里做一个简单的梳理 permission mode in chmod简要介绍我的环境下是 WSL ubuntu 20.04,一般来说使用touch创建文件以及使用mkdir创建的文件夹的默认权限如下: 12345678910111213# zyc @ DESKTOP-KK42M35 in ~/
2021-10-28

MyDocker 实现踩坑指南

背景《自己动手写 Docker》成书是在数年前,也一直没有更新,而且相关项目仓库的 Issues 板块也不是十分活跃,期间自己也遇到了一些问题,而通过搜寻阅读资料,对于部分知识的理解也有所加深,在这里做一些简单的整理。 环境如下: Golang: 1.17 Host: WSL Ubuntu 20.04 CLONE_NEWUSER关于 namespace 的问题可以参考一下这一系列的文章[1],
2021-10-17
golang
#golang

如何在Golang中实现Fork()

背景最近在跟随《自己动手写 Docker》实现一个简易版本的 docker 时,注意到书中创建容器进程时采取了一种很 weird 的方法。mydocker run Command后使用exec.Command调用/proc/self/exe(即进程本身),但会修改参数,使得其相当于调用了mydocker init Command,然后再完成与容器相关的初始化工作。 书中使用了cli库来编写命令行相
2021-10-16
golang
#golang

UniquePtr C++ implementation

在之前的文章中我实现了 SharedPtr,而为了实现 UniquePtr 我阅读了一些文章[1],意识到我之前的实现存在了大量的问题。正如文章作者所言,智能指针的实现并不适合作为学习材料,它看上去很简单,却存在着大量的陷阱。而 Boost 库的实现直到其成为 C++ 11 的标准,大概有九年的时间。 不过既然开了坑,姑且硬着头皮写下去吧,毕竟也算作学习的一个过程。 先给出代码: 12345678
2021-10-02
C++
#C++ #interview

RWLock C++ implementation

其实 boost 库已经有相关的实现,在实际工程中使用 boost 库的实现可能会使得我们程序更加健壮。 这边展示的是一个比较 naive 的实现,逻辑上也并不复杂。 成员变量readerCount记录正在临界区的读者数量,mutexReader以及mutexWriter实现相应的控制逻辑 WLock和WUnlock比较简单,就是直接对mutexWriter进行加锁和放锁 而在RLock中,首先会
2021-09-30
C++
#C++ #interview

Vector C++ implementation

成员变量cap_记录了容量大小,而size_则记录了实际存储的元素的数量,iniVal作为const值表示MyVector对象创建时为其预分配的容量大小,vector则是指针,其指向的应该是对象数组的起始地址 12345private: T *vector = nullptr; size_t cap_; size_t size_; const int iniVal = 20
2021-09-29
C++
#C++ #interview

Sharedptr C++ implementation

前言回望最初版本的shared_ptr,其实存在着很多问题,比如没有考虑 Constructor Failure以及未使用 copy-and-swap idiom来解决 code duplicate 等. 在这里我打算保留最初的版本,并添加说明对此进行更正 Old Version成员变量ptr用于保存共享的指针,而 refCount则是计数器,在这里注意 refCount是指针,这样的话可以做到多
2021-09-29
C++
#C++ #interview
123

搜索

Hexo Fluid
总访问量 次 总访客数 人