Fioncat Blog

「一个忠实的 Rust & ArchLinux & Neovim 信徒」

Windows11 wsl2 安装archlinux子系统

这篇文章针对的是在win11系统的wsl2下安装ArchLinux系统,网上很多中文教程都是使用LxRunOffline去做的,但是实际上该方法已经过时了,目前有更加先进的ArchWSL方式。 如果用的是wsl1,不保证本教程可以适用。 安装ArchLinux子系统 首先,需要确保你的系统已经安装并打开wsl2功能。详见官方文档。 Github上的ArchWSL项目已经帮我们把Arc...

k8s故障日记:修改linux内核参数导致的pod网络不可用

背景 客户报障:k8s集群上的某个pod无法访问其他pod。 这里集群网络用的是underlay模式,依赖云供应商提供的虚拟网络服务,每个pod申请独立的IP地址。通过veth pair的方式加入到虚拟网络中以实现跨主机的网络互通。 这种underlay网络模式不需要依赖独立的overlay网络插件(例如flannel),由云厂商提供的CNI来维护集群网络,CNI需要负责pod IP的...

Go设计与实现笔记 一 数据结构

数组 数组在内存上是一段连续空间组成的结构。 数组类型同时由元素类型和长度组成,元素类型相同但是长度不同的数组不是同一个类型。 数组在初始化的时候,依据以下原则(不考虑逃逸分析): 元素少于等于4个时,直接初始化在栈上面 元素多于4个时,将数组中的元素放到静态区,并在运行时取出 数组的访问,一些简单的越界错误可以在编译时发现,如果是通过变量访问数组,需要在运行时检查是否...

Python list作为全局属性问题

以下两种写法: 1 2 3 4 5 6 class Numbers: nums = [] class Numbers: nums = None def __init__(self): self.nums = [] 看上去是一样的,实际上是不一样的。 注意,python中的list是一种对象,它是一种实体。具名变量nums仅仅是指向它的一个引用。...

使用Delve调试go web请求

Delve是Golang的一个debugger,比起gdb,它有更多对于go的原生支持,例如gdb只能查看运行时线程,而delve可以查看goroutine。因此对于gopher来说使用delve似乎是个更加不错的选择。 网上已经有了很多delve调试简单程序的例子,但是在实际项目中,我们一般会开发大型的web工程,有时候需要在本地通过断点单独调试http接口。我发现网上关于这一块的教程较...

vim折腾笔记

作为一名Golang开发者,使用过各种编辑器/IDE,其中包括: GoLand:做过Java的应该对jetbrains的IDE有深深的情感。GoLand有JetBrains家IDE的所有特色,它不使用gopls而是用自己的language server,因此很快速,并且有着一套强大的工具集,调试代码非常方便。唯一的问题就是它不是免费的。 VSCode:目前最好用的开源编辑器之一,...

JUC基础笔记

juc,即java.util.concurrent包的缩写,掌握了juc,就是拿到了Java并发编程的钥匙。 在《Java并发编程实战》等书中,已经详细介绍juc用法,如果你懒得看书,或者是忘了juc的用法,想快速回忆一下,可以看我这篇教程。 本教程很长,有很多的代码示例供食用~ 基础 volatile关键字 volatile关键字不属于juc的内容,但是为了铺垫后面的内容,这里先...

Go 1.13 优缺点整理

Go 1.14更新: Module support in the go command is now ready for production use. We encourage all users to migrate to go modules for dependency management. 好消息呀!Go module终于被官方推荐使用在生产中了。官方也建议将项目迁移...

Go闭包及其陷阱

GO是支持函数式编程的,在GO中,函数是一等公民,它可以作为变量被赋值,作为参数被传递到其它函数中。 那么既然能够将函数作为变量,GO就一定是支持闭包的。 闭包概念 什么是闭包呢?其实很简单,我们都知道,变量是有其作用域的。例如,在函数中声明定义的变量就只能够在当前函数中使用,当函数结束时,该变量空间就会被释放,外部无法再使用。 但是,闭包允许我们将变量的作用域进行扩充。当我们的函数...

Go defer详解

defer是Golang一大语言特色,它扮演的是类似Java中finally的角色。用于执行释放资源的一些操作。 defer语句定义在函数内,后面跟一个函数,被defer的函数会在defer所在的函数结果前被执行。defer能够保证函数不管以何种方式结束(return或panic),被defer的函数一定被执行。 释放资源 defer可以被定义在函数中的任何地方,这意味着当我们打开一个...