author avatar

skquax

1. 初识Hertz

初识Hertz Hertz[həːts] 是一个字节跳动开源的 Golang 微服务 HTTP 框架,在设计之初参考了其他开源框架 fasthttp、gin、echo 的优势, 并结合实际业务需求,使其具有高易用性、高性能、高扩展性等特点,目前在字节跳动内部已广泛使用。 主体部分采用了四层分层设计:

Go编程基础-11. 测试

测试 测试是自动化测试的简称,即编写简单的程序来确保产品代码在特定输入下产生预期的输出。这些测试通常要么是精心设计的以检测某种功能,要么是随机性的以扩大测试覆盖面。 软件测试领域非常广泛。测试任务几乎占据了所有程序员的一部分时间,有时候甚至是全部时间。关于测试的资料有数千本书和数百万字的博文。在每种

Go编程基础-10. 包和go工具

使用共享变量实现并发 每个包定义了一个独立的命名空间作为其标识符。每个名称都会与一个具体的包关联,从而使我们能够在为类型、函数等选择简洁明了的名称时,不会与程序的其他部分发生冲突。通过控制名称是否导出以使其对包外可见,包提供了封装功能。这种限制包成员可见性的做法,不仅隐藏了 API 背后的辅助函数和

Go编程基础-9. 使用共享变量实现并发

使用共享变量实现并发 1. 竞态 当一个程序有两个或多个 goroutine 时,每个 goroutine 内部的各个步骤虽然是顺序执行的,但我们无法确定一个 goroutine 中的事件 x 和另一个 goroutine 中的事件 y 的先后顺序。如果我们不能自信地说一个事件肯定早于另一个事件,那

Go编程基础-8. goroutine和通道

goroutine和通道 并发编程指的是一个程序由若干个自主执行的活动单元组成。Web服务器可以同时处理数千个请求。平板电脑和手机应用在渲染用户界面的同时,后端也在同步进行计算和处理网络请求。甚至传统的批处理任务——如读取数据、进行计算并输出结果——也使用并发技术来隐藏I/O操作的延迟,从而充分利用

Go编程基础-7. 接口

接口 接口类型是对其他类型的抽象和概括,允许编写灵活通用的函数,不依赖特定类型实现。Go语言的接口通过隐式实现,即类型不需要显式声明实现哪些接口,只要实现了接口所需方法即视为实现该接口。这种设计使得不修改已有类型内部实现的前提下,可以为它们添加新接口,尤其适用于无法修改的包中的类型。 接口是一种抽象

Go编程基础-6. 方法

方法 方法是针对某种特定类型的函数。面向对象编程就是使用方法来描述不同数据结构的属性和操作。 1. 方法声明 方法的声明与函数的声明类似,只是在函数名字前面多了一个类型参数,来将方法绑定到这个参数对应的类型上。下面是一个简单的方法声明: package main import ( "fmt"

Tailscale DERP 中继节点搭建

通常,我会将自己nas上搭建的一些服务通过内网穿透的方式暴露到公网中,以供自己在外使用。此前我所使用内网穿透服务一直都是frp,但是frp需要为每个服务暴露一个公网端口,这一定程度上增加了被扫描和攻击的风险。为了降低潜在的风险,保证服务的稳定性,我逐渐产生了组建大内网的想法,通过虚拟组网从云服务器上

Go编程基础-5. 函数

函数 函数是包含连续执行语句的代码块,可以通过在代码中调用函数来执行它们。函数可以将一个复杂的工作划分成多个更小的模块,使得多人协作变得更加容易。另外,函数对它的使用者隐藏了实现细节。这几方面的特性使得函数成为大多数编程语言的重要特性之一。 1. 函数声明 每个函数声明都包含一个名字、一个形参列表、

Go编程基础-4. 复合数据类型

复合数据类型 Go语言中四种主要的数据类型:数组、slice、map和结构体。 1. 数组 数组是一个具有固定长度且包含零个或多个相同数据类型元素的序列。由于数组的长度是固定的,因此在Go中很少直接使用。相比之下,切片的长度可以增长和缩短,在许多情况下更为常用。数组的特点如下: 数组中每个元素通过索