/images/avatar.jpg

gdb调试简单使用

gdb

gdb 是 UNIX 及 UNIX-like 下的调试工具,在 Linux 下一般都直接在命令行中用 gdb 来调试程序,相比 Windows 上的集成开发环境 IDE 提供的图形界面调试,一开始使用 gdb 调试可能会让你感觉很难适应,但是只要熟悉了 gdb 调试的常用命令,调试出程序会很有成就感,一方面因为这些命令就类似图形界面调试按钮背后的逻辑,另一方面用命令行来调试程序,逼格瞬间就上了一个档次,这次就跟大家分享 gdb 调试的基本技术和 15 个常用调试命令。

go并发之WaitGroup使用

需求

有时候我们会开启很多线程(go中是协程)去做一件事件,然后希望主线程等待这些线程都完成后才结束,一个简单的想法是,我在主线程sleep一段时间,譬如3s钟,但是明显这样的做法不科学,因为这些任务很有可能在200ms内就都完成了。如果你用过Java的话,那你很快就会想到CountDownLatch类,在Go中,也有类似的结构,就是本文要讨论的WaitGroup

gRPC入门使用

gRPC是什么

官网如此写到

A high-performance, open source universal RPC framework

其实,gRPC是一个高性能的,通用的,面向服务端和移动端,基于 HTTP/2 设计的RPC框架。

RPC框架是什么?

RPC 框架说白了就是让你可以像调用本地方法一样调用远程服务提供的方法,而不需要关心底层的通信细节。简单地说就让远程服务调用更加简单、透明。 RPC框架包含了客户端(Client)和服务端(Server)
常见的RPC框架有

ftplib源码分析

FTP协议

相比其他协议,如 HTTP 协议,FTP 协议要复杂一些。与一般的 C/S 应用不同点在于一般的C/S 应用程序一般只会建立一个 Socket 连接,这个连接同时处理服务器端和客户端的连接命令和数据传输。而FTP协议中将命令与数据分开传送的方法提高了效率。

C语言动态链接库回顾

https://s1.ax1x.com/2020/05/09/YMO4bV.jpg

动态链接库和静态链接库

静态链接库会在编译时包含到可执行文件中,这样的程序虽然没有依赖问题,但是可执行文件体积较大,包含相同的公共代码,非常浪费内存。
动态链接库的好处就是节省内存空间,还有将一些程序升级变得简单。用户只需要升级动态链接库,而无需重新编译链接其他原有的代码就可以完成整个程序的升级。
在windows下动态链接库是以.dll后缀的文件,静态链接库是以.lib的文件
而在Linux中,动态链接库是以.so作后缀的文件,静态链接库是以.a(archive的缩写)的文件。
本文中,我们的链接库来自于ftplib,这是一个用C语言实现的跨平台FTP库,我们将会用它生成的动态链接库写个简单的程序(连接ftp服务器,然后查询当前目录)。

一步步自己做个Docker之Docker网络原理

/images/docker-logo.png

本文环境:

  • OS:Ubuntu 18.04.4 LTS
  • Golang版本:1.12.13

自己创建Docker网络

当 Docker 启动时,会自动在主机上创建一个 docker0 虚拟网桥,实际上是 Linux 的一个 bridge,可以理解为一个软件交换机。它会在挂载到它的网口之间进行转发。 同时,Docker 随机分配一个本地未占用的私有网段(在 RFC1918 中定义)中的一个地址给 docker0 接口。比如典型的 172.17.42.1,掩码为 255.255.0.0。此后启动的容器内的网口也会自动分配一个同一网段(172.17.0.0/16)的地址。 当创建一个 Docker 容器的时候,同时会创建了一对 veth pair 接口(当数据包发送到一个接口时,另外一个接口也可以收到相同的数据包)。这对接口一端在容器内,即 eth0;另一端在本地并被挂载到 docker0 网桥,名称以 veth 开头(例如 vethAQI2QT)。通过这种方式,主机可以跟容器通信,容器之间也可以相互通信。Docker 就创建了在主机和所有容器之间一个虚拟共享网络。如图 https://s1.ax1x.com/2020/04/29/J7aODe.png