因为项目需求,需要用到连接池,在看了很多代码之后发现不能满足需求,所以自己撸一个,现在开源出来,看能否帮到跟我有同意需求的同学仓库地址: github.com/bean-du/pool欢迎大家 Star 和 Issuse支持:DialerFunc 通过此func 定义需要管理的连接类型ReadFunc 根据连接类型自定义数据读取函数WriteFunc 根据连
......
421
0
0
2022-11-11
Go lang,为并发而生的静态语言,源于C语言又不拘泥于性能,高效却不流于古板,Python灵活,略输性能,Java严谨,稍逊风骚。君不见各大厂牌均纷纷使用Go lang对自己的高并发业务进行重构,原因无他,经济下行的大背景之下,性能突出、效率拉满的Go lang无疑是高并发场景下节约服务器资源的一剂灵药。与时俱进,顺应潮流,本次我们乘着市场的东风,在各大
......
429
0
0
2022-11-11
闲聊这个打水印的 demo 其实已经完成许久,一直没有总结总结,有空填了一下自己的坑吧,也让自己复习复习。背景公司是做图形设计资源站点,详情、搜索页面都需要提供预览图片,图片都是包含公司的水印的图片,水印图片单独存储。现在公司需要更换水印图,所以要获取全部的原图,打上新水印,再替换现有的图片。方案公司主要是 PHP 开发, 本来是打算用 Laravel 的
......
484
0
0
2022-11-11
# 封装
type Foo struct{
baz string
}
func(f *Foo) echo() {
fmt.println(f.baz)
}
func main() {
f := Foo{baz:"hello, struct"}
f.echo()
}
#继承
type Foo
......
384
0
0
2022-11-10
编程语言的内存分配器一般包含两种分配方法,一种是线性分配器(Sequential Allocator,Bump Allocator),另一种是空闲链表分配器(Free-List Allocator)线性分配器只需要在内存中维护一个指向内存特定位置的指针,指针前面的部分表示已经分配的内存区域,指针后面部分是未分配区域,每次申请内存,只要移动位置指针即可。缺点:
......
383
0
0
2022-11-10
上一篇文章中引入了消息队列对秒杀流量做削峰的处理,我们使用的是Kafka,看起来似乎工作的不错,但其实还是有很多隐患存在,如果这些隐患不优化处理掉,那么秒杀抢购活动开始后可能会出现消息堆积、消费延迟、数据不一致、甚至服务崩溃等问题,那么后果可想而知。本篇文章我们就一起来把这些隐患解决掉。批量数据聚合在SeckillOrder这个方法中,每来一次秒杀抢购请求都
......
654
0
0
2022-11-09
不同 goroutine 之间如何通讯?有两种方案:1.全局变量的互斥锁2.使用管道 channel 来解决因为没有对全局变量 m 加锁,因此会出现资源争夺问题,代码会出现错误,提示 concurrent map writesvar (
myMap = make(map[int]int, 10)
lock sync.Mutex
)
......
394
0
0
2022-11-09
一、结构体嵌套package main
import "fmt"
type Student struct {
Name string
Age int
Score int
}
func (stu *Student) ShowInfo() {
fmt.Printf("学生名=%v 年龄= %v 成绩=%
......
425
0
0
2022-11-09
package utils
import "sync"
type Pool[T Item[T]] struct {
p sync.Pool
}
type Default[T any] interface {
Default() T
}
type Reset interface {
Reset()
}
......
401
0
0
2022-11-09
func main() {
var name string = "抢手"
nameType := reflect.TypeOf(name)
nameValue := reflect.ValueOf(name)
fmt.Println("name type:", nameType)
fmt.Println
......
521
0
0
2022-11-08
默认情况下,管道式双向的可读可写 var chan1 chan int只读 var chan2 <-chan int只写 var chan3 chan<- intfunc main() {
//演示一下管道的使用
//1. 创建一个可以存放 3 个 int 类型的管道
var intChan chan int
......
475
0
0
2022-11-08
问题1都知道大量 if else 对代码维护和设计都及其不友好,即便是你换成 switch 也并不那么理想。if {
...
} else if {
...
} ... {
} else {
...
}
例子话不多说,代码搞起来,先来一个可以待优化的实例:package main
import (
"errors"
......
395
0
0
2022-11-08
方法:参数和返回值可以省略func (receive type) method(参数列表)(返回值列表){
}
函数:func name(参数列表)(返回值列表){
}
函数与方法的区别在于有没有接收者,有接收者就是方法,没有接收者就是函数,这条规则说的是当我们嵌入一个类型的指针, 嵌入类型的接受者为值类型或指针类型的方法将被提升, 可以被外部类型的
......
335
0
0
2022-11-07
🍭 Markdown-Blog Markdown-Blog是一款小而美的Markdown静态博客程序如果你和我一样,平时喜欢使用markdown文件来记录自己的工作与生活中的点滴,又希望把这些记录生成个人博客,那Markdown-Blog再适合不过了。它简洁、轻快,部署简单,可以把markdown文件快速变为个人博客,它不需要管理后台,无需进行文章的二次
......
375
0
0
2022-11-06
前言常见的抓包工具有Fiddler、Charles等,我自己用Go基于Tcp协议实现一个代理抓包工具shermie-proxy,支持同时监听多种协议的数据,支持对数据进行自定义修改,代码我都写了注释,如果有对网络编程感兴趣的同学,可以康康。涉及的知识:Ca证书:根证书、中间证书的生成和下发单向认证、双向认证、Tls握手过程Ws、Wss协议Http、Https
......
588
0
0
2022-11-05