自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 问答 (4)
  • 收藏
  • 关注

原创 Go 安全使用goroutine

go 正常使用goroutine开启一个携程很简单这么用在日常工具什么的开发中肯定没问题,如果携程内有问题崩掉了,使用工具的人可以马上获得堆栈信息将其反应给开发人员。但是你如果在web服务器或者后台程序中使用就有大问题。因为golang无法捕获携程中的panic,也就是说你携程崩掉了,你携程中又没有recover,你整个程序都会被其带崩,并且崩溃是父携程不可捕获的。

2024-08-26 13:45:59 468

原创 Go 调用Rust函数

在golang 中,go可以引用c代码,和c共舞,也就是cgo.在一些包里就能看到cgo的身影,gopcap(引用了libpcap),go-sqlite(引用了libsqlite).毕竟c是"万物之主"嘛.本文利用cgo实现go调rust函数。

2024-08-25 22:47:13 487

原创 wo是如何克服编程学习中的挫折感的?

我大学时也有运营一套自己的网站,上面展示了我当时各种奇想搞出来的工具,我甚至觉得编写到发布很麻烦于是自己写了一个发版工具,那个还不是go写的,还是用c++写的,没错又是多元化。每次的收益当时可能不会见效,但是你的"武器库"里就又多了一员大将,等到真到用场时那一天,你就可以进行"军火展示",我把这种行为称为"整活",而我就是最爱整活的一个人,所以我无时不刻都在搞新东西,每天上班把进度搞完了就看时搞新东西,下班回家继续搞,虽然大部分平常都用不上,但是有机会用的上的时候就可以整活。这是我golang部分的截图,

2024-08-20 23:01:04 703

原创 rust api接口开发(以登陆和中间件鉴权为例)

rust axum的handler函数相对于golang 的web框架来讲要比较智能,他已经帮你自动做好mvc中的controller层,而golang的gin框架和iris都需要或多或少自己实现或者使用mvc脚手架(例如iris/mvc),更要命的是大部分脚手架都是使用golang运行时反射实现的,性能相对于在编译期间通过宏来静态反射生成的要差许多

2024-08-20 13:50:58 584

原创 rust操作rabbitmq

amqp 包其实无论是rust 的lapin还是golang的streadway/amqp,操作手法整体都是一样的,rabbitmq其它几种模式可以参考我goalng 的rabbitmq几种模式下操作方式来类推。

2024-08-17 17:48:19 435

原创 Linux 利用命名空间创建一个自己的“容器“

目录下都可,如果你不想隔离某个命名空间,列入你不想隔离网络,不想隔离pid,在unshare的时候都可以不加对应参数,具体参数意义可以使用。进来过后是很纯粹的linux,哈哈哈哈。你需要什么资源在chroot之前考到。

2024-07-09 21:14:48 343

原创 Linux 复现Docker NAT网络

docker 网络的构成分为宿主机docker0网桥和为容器创建的veth 对构成。这个默认网络命名空间就是我们登陆后日常使用的命名空间使用ifconfig命令查看到的就是默认网络命名空间,docker0就是网桥,容器会把docker0当成路由,将流量发往docker0这个虚拟网桥上,然后docker0会走本地路由表发到你路由表上下一跳地址,如果当前层已经是物理机了就是路由器,如果你用的是虚拟机则就是你虚拟机的虚拟网桥,然后就是套娃启动一个容器,我们再来看宿主机网络设备。

2024-07-08 21:27:31 687 1

原创 通过端口转发实现docker容器运行时端口更改

关于修改docker正在运行中容器端口,网上大部分分为3类: 1. 删除原有容器重新创建;2. 改配置文件;3. 在现有容器上新提交镜像,用新镜像起新的容器。1和3属于同一种流派,抛弃现有容器,新起一个,2需要重启docker服务。3种方法都会对容器正在运行的服务或多或少有点影响。本文通过端口映射实现。

2024-07-07 23:09:44 555

原创 Golang 异步(bsd/linux)io

在日常开发中,读写文件的底层调用函数是syscall.Read/Write。一切都是围绕这两个函数展开的,不过有时候需要或者就是单纯想异步执行。liburing是linux上一个很好的原生异步io库,这里需要适配bsd派系的系统,所以选择的是另一款libaio,这款异步io库在bsd派系(macos,freebsd,openbsd…)和linux上都是存在的。golang 类unix系统下 os.OpenFile函数的底层(windows就不要来找茬了:-(是系统写入函数,函数会回调传入的函数。

2024-03-20 17:45:42 673

原创 go rabbitmq 操作

Golang rabbitmq 操作

2024-03-17 21:34:04 514

原创 go docker sdk 第三章

本地创建一个数据卷myvolume,并将容器/root 目录与容器卷关联,命令行。可查看本地数据卷存放位置。

2024-03-17 21:33:08 328

原创 go kafka 第一章

golang 使用 ibm/sarama 操作kafka

2024-03-10 20:32:10 205

原创 go docker sdk 使用 第二章

本文以zookeeper镜像做示范。go docker sdk 容器端口映射

2024-03-10 20:30:55 514 1

原创 go 程序被意外kill后出现僵尸进程解决方案

程序每异步开启一个子进程命令就把pid传送给我们的守护进程,若主进程被kill了,主进程和守护进程之间连接就会断,守护进程将给所有开启的子进程发送SIGINT信号,推荐SIGINT,SIGTERM。命令行启动后再被kill掉过后,监听1999端口的进程就停不下来了,由于业务其实很多个这样的子进程成了僵尸进程。写这篇文章是因为最近有同事竟然会知道异步启动子进程,不会关闭,最后导致导致僵尸进程出现,而且由于子进程会随着业务的使用越开越多,主进程一旦被kill掉就会不得不手动一个一个kill。

2024-03-05 22:58:13 918 1

原创 go docker sdk使用第一章----入门

golang docker sdk 需要和安装的docker api version相兼容。一般我们只需要注意docker api version就可以了.查看本地docker api version拉取docker client sdkgo 代码中得创一个docker client。后面和docker 所有操作都走这个client,你甚至能创几个来自不同机器的client,在程序内控制几台机器的docker。

2024-03-05 21:01:36 548

原创 go linux监测文件变化

go linux监测文件变化,靠的是系统调用inotify。

2024-03-03 14:45:07 368

原创 go 命令行框架cobra

go 拉取依赖包认识spf13/cobra-cli. cobra 命令行框架在golang中的地位也算得上是大明星级别。像k8s,docker都有使用这个框架构建自己命令行这块的功能.----使用命令行工具cobra-cli来初始化你的demo初始化你的demo.后面可以加目录名,不加就是当前目录下创建一个main.go 和cmd目录(如果这时你main.go里写了东西,先备份再初始化)。cmd目录cobra-cli是用来储存子命令的地方,后面我们手动写的时候这个就不重要了添加一个子命令。

2024-03-03 13:20:53 794

原创 golang 监听ip数据包(golang纯享版)

本文以ip4 作为案例进行包抓取示范,ip6抓取与ip4方式异曲同工,可自行举一反三得出这里两张截图,一张ip4,一张ip6的。

2024-02-23 16:01:11 386

原创 golang tun设备创建并监听

linux tun设备文件地址为/dev/net/tun.直接打开即可(关闭文件描述符创建的tun虚拟接口自动注销)

2024-02-23 16:00:37 1092

原创 go c 通过内存原始二进制内容直接传递结构体

传统数据传输通常通过半结构化数据(json/yaml/xml…)来交换信息。但是go 支持 二进制数据层面支持c 结构体。带来的好处就是相较于半结构化数据类型来说更快(在go中,解析和生成json/yaml/xml…到结构体都会经过一层反射到结构体,数据单向流通会是1层反射,如果数据双向即生成又要解析那么就会用上2层反射).而使用内存直接交换(在不涉及指针(由于指针只是一个记录硬件地址的一个地址,也叫做虚拟指针。

2024-02-05 16:46:29 896

原创 go 内存二进制数据操作

go 内存二进制数据直接操作。

2024-02-05 13:13:18 548

原创 [go 反射] 结构体

结构体方法调用反射主要为反射调用函数,如有不清楚请查看。[go 反射] 函数。

2023-11-03 14:10:11 308

原创 [go 反射] 函数

属于reflect.Value结构体的方法,运行此方法即可达到调用函数的目的,参数通过反射过后放入数组内给call。此方法属于reflect.Type接口,用于获取返回变量的数量;此方法属于reflect.Type接口,用于获取参数数量;用于获取对应位置的返回变量。用于获取对应位置的参数。

2023-11-03 11:11:58 384

原创 [go 反射] 进阶

https://img-blog.csdnimg.cn/4bfe83fee748447ab320fdfdceb17bc3.jpeg所以为了避免未知的意外panic,做到每一步都知道你在做什么。大多数我们用到反射以主流为参数的场景可能是这样的。

2023-11-02 21:50:21 304

原创 [go 反射] 入门

获取类型,和列名就找它获取值,设置值找它[tips] 通常是用这两者手底下的方法,reflect.Value结构体中有什么自行查看。

2023-11-02 21:19:13 123

原创 golang 信号量

【代码】golang 信号量。

2023-10-28 14:57:21 150

原创 golang socket io复用(无需第三方库)

首先回顾golang经典并发socket,这里示例虽然用的5kb,但实践时,你可能会用于二进制文件传输,你一个buffer不得至少小几十MB;还有的一些连接有”小问题“,连上了一直都没用的那种,。此时此景,好大哥poll/epoll就跳出来了(为什么不直接是epoll,因为mac和bsd上面没有对epoll进行实现,poll和select是posix标准里的,所以如果目的平台不止linux,为了更好的可移植性,可以使用poll进行封装)

2023-10-27 21:16:17 251

原创 golang 实战 简易聊天室服务(TCP)

room实例本身就是一个房间最新消息版本号+读写锁。客户端读取信息只需要用room的锁上个读锁,获得最新消息后再解锁。写消息也一样(上写锁)。版本号由于向上增长,所以客户端版本号低于房间版本号就会拉取两个版本号之间的信息。我们可能注意到发往客户端时有10毫秒休眠间隔,这个休眠间隔可以设置的小,但不能没有。计算机处理速度很快的现在,别看这里循环有那么几行代码,在计算机面前,嗖的一下就全没了。然后由于太快了,最后接收端缓冲区都还没读,我们就把东西全给别人塞进去了,最后几个独立的包可能被粘成一个了。数据量大的时候

2023-09-10 16:43:41 452

原创 golang 监听端口网络流量

如果你使用我的包(github.com/oswaldoooo/cmicro)中的posix共享内存操作,并且你运行代码的系统是macos或者freebsd,创建posix共享内存时可能会报错,别着急,你只需要将我的包拉到本地,将sys/unix.go中Shm_Open函数中shm_open替换为open(macos和freebsd缺少/dev/shm目录)

2023-09-06 14:27:20 617

原创 golang操作共享内存

posix 在mac和freebsd上跑shm_open可能会出问题,可以自行换为传统的open方法,shm_open父目录为/dev/shm。不同进程打开相同共享内存需要指定相同的文件,并且相同的size。POSIX共享内存操作。在系统中查看共享内存。

2023-09-04 19:39:28 521

原创 c++文件持续读写

每次都会向后移一位,并保持最大5个字节长。

2023-08-09 22:22:51 219

原创 Go gin之Cookie

【代码】Go gin之Cookie。 gin框架其实自带有一个"简易"的cookie体系,但是麻雀虽小,但五脏俱全嘛.使用起来也很简单,这里就做一个演示

2023-05-14 11:26:29 206

原创 归并排序(C/C++)

再将焦点转换到上一层两组合并为一组后,4个节点一组,一个i,j分别架左右两个分组的第一个节点头上,谁小谁进入下面的新数组,然后小的那个组指针往后移一位继续对比,除非到了尽头。把焦点先放在拆分成两个一份的时候(由于这里刚好左边值全都小于右边值就略过这不的排序了)焦点再往上移,排序步骤和上一部一样。

2023-05-14 10:50:13 71

原创 动态规划之敏感词匹配(C/C++)

从案例中可以看出很明显整体走势,字符未匹配向右移动一步,匹配下一移一步并标记一处"更新节点",若横向走到尽头,纵向还没走完,则移动到下一行的"更新节点"继续,这张动态图在走过的每一个点都留下值可以更直观的感受到它的运行机制。敏感词匹配动态规划可以看成一个很简单的表格问题,个人认为其匹配过程更像是走棋。

2023-05-12 22:22:42 304

原创 BST二叉排序树(C|C++)

由于右边节点大于其根节点,所以20右边的所有节点都是大于20及其以左的节点,反之20左边的全部节点也是小于右边的全部节点,不会存在左边某一节点大于右边的某一节点这种情况。但是它不保证树的平衡,也就是说,你将一个数组转成二叉排序树后,它有成为直线的可能(就是你加入的数组本身是有序的)—这就是BST二叉搜索树的核心概念,一个树由许多个互有来往的节点构成。

2023-05-12 21:46:39 100

原创 堆排序(java)

堆排序就是一颗树🌲,每一次的遍历都会把整颗树中值最大的节点送往根节点,然后摘掉这个根节点放入结果数组,再继续,直到树被掏空。

2023-05-04 19:20:02 80

原创 计数排序(java)

通俗滴讲,就是用你手中的数组,先找出其中最大值然后创建一个以其最大值为长度的数组然后以你手中数组每个元素的值为下标对其出现的次数进行计数最后使用计数的数组打出新的数组(出现了n次就对结果数组添加n个当前下标,对计数数组进行正向遍历就是升序,倒向遍历就是降序)当然,如你所见,数组的下标必须为整形,所以对浮点数和负数就此排序就会失效。java实现代码i ++) {//取得最大值 if(origin . get(i) > max) {

2023-05-04 18:27:27 89

原创 c++ 实现cin输入限时

【代码】c++ 实现cin输入限时。

2023-04-28 20:23:57 461

原创 sublime LSP clangd c++提示配置

sublime text LSP clangs c++ 配置网上99%教程没有提到header如何用c++的标准而不是c的,当然我也搜的脑子冒烟了。功夫不负有心人,最终在github社区找到了。添加到项目根目录下的complie_flags.txt。

2023-04-27 21:30:19 647

原创 nginx反向代理gin并实现多线路备用节点

配置前提为gin主节点监听端口为8000,两个备用节点监听端口为8001,8002。虚线箭头代表或,也就是说通过nginx的反向代理,可让客户端访问到你的多个服务,但是在客户端呈现出来的就像一个整体。这里就不仅限于这篇文章的gin了,你的内部可以有php构建的后端,java构建的后端,go构建的后端,其实这都无所谓,你整理好过后(uri不会出现冲突的现象),全部都可以通过nginx反向代理

2023-04-07 22:24:17 517

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除