当前分类:
Golang
在go协程中共享资源需要加锁处理
2023-04-14
107
144
在go协程中共享资源需要加锁处理packagemain
import(
"fmt"
"sync"
)
//创建一个互斥锁
varmutex=&sync.Mutex{}
//定义一个共享资源
varsharedResource=0
//定义一个等待组
varwg=sync.WaitGroup{}
//定义一
go 的 Pool池对象 sync.Pool 创建mysql连接池
2023-04-13
51
68
//在这个例子中,我们创建了一个sync.Pool,其中包含一个New函数,该函数创建一个MySQL连接
//在someFunction中,我们使用dbPool.Get()从池中获取一个MySQL连接
//然后我们使用连接进行一些操作,最后使用dbPool.Put()将连接放回池中
//我们可以通过设置dbPool的大小来初始化连接池中的连接数量
//例如,如果我们想要初始化10个连接,我
go 的 Pool池对象-sync.Pool
2023-04-10
100
135
packagemain
import(
"fmt"
"strconv"
"sync"
)
//在go中,原生的池化数据结构为sync.Pool,有三个方法:
//New字段为一个方法,定义为func()interface{},在新建Pool时,定义好New字段,以供后续从池中获取对象时,如果当前池中无对象,则使
go WaitGroup 的使用方法
2023-03-23
106
143
在 Go 中,sync 包下的 WaitGroup 能有助于我们控制协程之间的同步。当需要等待一组协程都执行完各自任务后,才能继续后续逻辑。这种场景,就非常适合使用它。WaitGroup 提供三个 API。Add(delta int) 函数提供了 WaitGroup 的任务计数,delta 的值可以为正也可以为负,通常在添加任务时使用。Done() 函数其实就是 Add(-1),在任务完成时调用。
Go 中 实现基于 channel 的简单 生产者 消费者模型
2023-03-23
97
130
Go 中 实现基于 channel 的简单 生产者 消费者模型packagemain
import(
"fmt"
"strconv"
"sync"
)
//生产者
funcproducer(chchan<-string,wg*sync.WaitGroup){
deferwg.Done()
fo
go 结构体自实现构造函数
2023-02-21
137
184
Go没有自带的构造函数,采用自实现方式1结构体不复杂,可以返回结构体类型,值拷贝性能开销小funcNewPerson(namestring,ageint8)Person{
returnPerson{
name:name,
age:age,
}
}方式2结构体复杂,得返回结构体指针类型,避免值拷贝产生的性能开销funcNewPerson(namestring,ageint8)*Person
go 结构体和结构体指针
2023-02-21
161
217
结构体实例化//结构体实例化
//写法1
varaAnimal
a.Name="小狗"
a.Age=18
//写法2
a2:=Animal{
Name:"dog",
Age:18,
}
fmt.Println(fmt.Sprintf("类型:%T-值:%v占用内存:%v",a,a,unsafe.Sizeof(a))
go语言生成ssl网站证书
2023-02-14
301
406
在go的x509包下有go定义的证书的结构packagemain
import(
"crypto/ecdsa"
"crypto/elliptic"
"crypto/rand"
"crypto/x509"
"crypto/x509/pkix"
"encoding
go 协程管理及传参处理
2022-10-18
805
1086
Go语言中的goroutine虽然相对于系统线程来说比较轻量级(初始栈大小仅2KB),(并且支持动态扩容),而正常采用java,c++等语言启用的线程一般都是内核态的占用的内存资源一般在4m左右,而假设我们的服务器CPU内存为4G,那么很明显才用的内核态线程的并发总数量也就是1024个,相反查看一下Go语言的协程则可以达到4*1024*1024/2=200w.这么一看就明白了为什么Go语言天生支持