Golang中struct如何优雅地相互转换?
为什么需要对struct进行转换? 一般而言,不同服务的协议,在生成桩代码后会放在不同仓库中。由于协议引用,相同的数据结构也会重新生成一份。而实践中,一些打包服务需要将上游的数据结构进行透传。由于数据结构所在包不同,被视为了不同的类型,所以无法直接赋值,此时就需要将上游的数据结构转换成当前服务response中的对应结构体。 现有的项目里也存在大量…
2023-5-08 10:55
|
1958 字
|
23 分钟
利用VS Code+Qemu+GDB调试Linux内核
背景 一直以来,都对linux系统的理解都是在应用层面,看过了《UNIX环境高级编程》,对于系统中的一些模块的实现方法还缺乏深刻的认识,故想研究下Linux内核机制。 单纯阅读源码还是不如一步一步调试内核理解深刻,对于调试内核的方法,网上也有不少,主要是利用Qemu+GDB对内核进行调试,但网上的资料大多零散,步骤记录不够详细,笔者在实现过程中走了…
2020-2-04 15:46
|
978 字
|
10 分钟
浅谈库函数与系统调用,以fork函数为例
背景 最近,在看unix环境高级编程,第一章就讲了unix下的函数调用结构: 这图其实把结构表达的很清楚,但感觉还是有两个疑问: 库函数是具体是如何调用system call 不通过库函数,我们程序中如何调用system call 追溯 既然要探究库函数本质,那必然得看看库函数的源码,以最新版本的glibc 2.27为例吧 本来之前想从fgets入…
2018-5-23 17:35
|
448 字
|
2 分钟
深入理解C++中的左值引用,右值引用
先谈引用 由于C中的指针过于灵活,容易出错,所以C++引入了引用来减少出错的用法,记得C++ primer中说,引用就是一个变量的别名,在初始化引用后,引用就无法改变再引用到其他的对象了。在遇到类的移动构造函数时,又见识到了右值引用,书上说,右值引用用于引用到临时对象。 那么就存在一些问题了: 这个别名到底是怎么实现的呢? 引用和指针存在什么关系呢…
2017-12-09 16:55
|
972 字
|
4 分钟
谈谈C++中变量初始化的问题
背景 C++中的变量分为外部变量(全局变量,静态变量)和局部变量,而变量本身又分为基本类型变量和类变量,在初始化的时候,各种变量存在不同的处理方式,在此总结记录下 初始化与赋值 初始化和赋值对于基本变量而言,基本没有区别,但对于类变量而言,初始化会调用构造函数,而赋值则是调用拷贝构造函数 初始化的写法为: T a=T(...); T a; T a(…
2017-11-07 11:08
|
771 字
|
3 分钟
谈谈C++之多文件编译
前言 C++采用了多文件编译,在逻辑上,整个程序包含所有文件,但编译是针对单个文件生成目标文件,多文件是在链接时才进行整合,所以在编译过程中,我们需要指明当前文件所需要的其他文件的信息。C++编译是区分.h和.cpp文件的,cpp会生成目标文件,而.h不会生成目标文件。 一般而言,我们利用 .h作为头文件来传递文件间的信息, .cpp文件用于具体程…
2017-11-05 11:17
|
1074 字
|
4 分钟