【golang】高并发下TCP常见问题解决方案

问题1:connection reset by peer 首先,看一下TCP握手简单描绘过程: 2020-07-25 14-03-46 的屏幕截图.png 其握手过程原理,就不必说了,有很多详细文章进行叙述,本文只关注研究重点。 在第三次握手过程中,如果服务器收到ACK,就会与客户端建立连接,此时内核会把连接从半连接队列移除,然后创建新的连接,并将其添加到全连接队列,等待进程调用。 如果服务器繁忙,来不及调用连接导致全连接队列溢出,服务器就会放弃当前握手连接,发送RST给客户端,即connect...阅读全文

简书 2020-07-25 14:33:40 dongzaidong

谈谈自己对GO的RWMutex的理解

RWMutex核心还是基于Mutex的,如果想了解Mutex的话可以看一下我上一篇写的Mutex的文章RWMutex的特性就是支持并发读。适用于读多写少的场景。 RWMutex的定义 type RWMutex struct { w Mutex // 互斥锁 writerSem uint32 // 写锁用的信号量 readerSem uint32 // 读锁用的信号量 readerCount int32 // 当前正在执行读操作的goroutine数量 readerWait int32 // 获取...阅读全文

Segmentfault 2020-07-30 23:32:32 iuoui

golang智能合约

Go语言调用智能合约 Windows环境下安装gcc环境,参见windows搭建gcc开发环境 一、开发环境 找到包的安装路径:github.com/ethereum/go-ethereum/cmd/abigen 使用abigen将abi翻译成go(最好先将abigen拷贝到$PATH的某个路径下) abigen --abi xx.abi --pkg pkgname --type apiname --out xx.go阅读全文

简书 2020-07-25 10:33:09 证始

golang skiplist(跳表)实现

前言 首先来了解一下跳表的概念,跳表中的表指的是链表,所以宏观上来看跳表是一种链表结构,那么它与传统的链表有什么不同呢?一般的单链表如果我们需要查找第n个元素,那么就需要从头节点开始一个一个的遍历n次,时间复杂读就是O(n),而跳表就是在单链表之上做了一些优化,使时间复杂度达到O(logn)。 在O(logn)复杂度内查找元素,我们不难想到其他的数据结构,avl树,红黑树,b树,b+树之类。但是这些树状结构有个共性就是需要在元素数量发生变化的时候保持平衡才能继续维持性能,所以就需要做一个额外的操...阅读全文

简书 2020-07-25 10:32:58 l刘言飞语

GOLANG编写网站

写PHP已经好些年了,然后GO语言也有两三年经验,一直都想用GO写些东西,之前写过一些网站,后来由于自己运营没跟上,关了。最近重新写了起来,在这里分享一下,还有不少功能没完善,业余时间太少啦。。http://www.liehute.com目前是做一些UFO爱好者相关的,之前有好多年都运营这方面的网站,每天早上起来看看访问量,晚上更新文章,挺充实的。阅读全文

简书 2020-07-25 10:32:49 城_d073

从搜索排序二维数组到搜索有向图思维 2020-07-24(未允禁转)

本博客源于对leetcode74和leetcode240搜索二维矩阵的总结 问题 74. 搜索二维矩阵 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性: 每行中的整数从左到右按升序排列。 每行的第一个整数大于前一行的最后一个整数。 也就是说,矩阵是按从左到右,从上到下递增的 如 [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ] 240. 搜索二维矩阵 II 编写一个高效的算法来搜索 m x n 矩阵 m...阅读全文

简书 2020-07-25 10:32:48 9_SooHyun

清晰架构(Clean Architecture)的Go微服务—重大升级

去年,我创建了一个清晰架构(Clean Architecture)微服务框架,它功能强大,但有些重。我写了一个系列文章来讲述它,请参阅"清晰架构(Clean Architecture)的Go微服务"。 我还指出了设计中存在的一些缺陷,并讲到希望以后能修复它们。现在我终于有时间对它进行了改造,结果比我预期的还要好。 我所做的改动不大,但效果惊人。主要的项目结构和接口没有变,我在那些文章中写的大部分内容仍然有效。这次升级修复了旧框架中的所有主要问题。现在它几乎拥有了我理想框架中的所有内容。它是一个轻...阅读全文

Segmentfault 2020-07-30 13:32:33 倚天码农

不翻墙,如何下载外网google,golang相关开源库

很多google.golang.org或者golang.org下面的包,从国内很难访问,基本上go get都会失败然后可以将对应的包前面加上https://pkg.go.dev/mod/来访问,可以看到这个包在github上的源码仓库 例如:google.golang.org/grpchttps://pkg.go.dev/mod/google.golang.org/grpc google.golang.org/protobufhttps://pkg.go.dev/mod/google.golan...阅读全文

Segmentfault 2020-07-29 15:32:32 laughbug

Go语言基础语法总结

1. 认识HelloWorld 在前面的《Go的安装和使用》这篇文章中已经写过HelloWorld.go了,现在就来逐行认识一下它。 package main import "fmt" func main() { fmt.Println("Hello, World!") } 第1行:我们的Go程序是由包——package构成的,包的声明形式为:package <包名>。该行的意思是:当前HelloWorld.go文件属于main包。 第2行:如果你使用过Java或Python,那你对import...阅读全文

Segmentfault 2020-07-29 10:32:33 行人观学

从零学习 Go 语言(35):图解 Go 语言 静态类型与动态类型

![](http://image.iswbm.com/20200607145423.png) 在线博客:http://golang.iswbm.com/ Github:https://github.com/iswbm/GolangCodingTime --- ## 1. 静态类型 所谓的**静态类型**(即 static type),就是变量声明的时候的类型。 ```go var age int // int 是静态类型 var name stri...阅读全文

Go语言中文网 2020-07-24 08:47:47 hello_wbm

Makefile简介

Makefile是干嘛的? 就像dockerfile之于docker,makefile之于make..... make命令执行时,需要一个makefile文件,以告诉make命令需要怎么样的去编译和链接程序。 你在命令行敲一个make,会自动去寻找目录下的makefile文件并执行。 可能你在C程序中见到的比较多,但是其实其他语言也是可以用到。 举例一个简单的需求。如果你写一个api,在到测试环境之前,前端需要开发联调怎么办?不可能连你本地,因为你还要工作不停修改代码。一个方法是scp传到开发机...阅读全文

简书 2020-07-24 08:32:44 Katou_Megumi

golang指针巩固

func main() { var a int = 10 fmt.Println("a :", &a) var p *int = &a fmt.Println("p1 :", p) fmt.Println("p2 :", &p) fmt.Println("p3 :", *p) fmt.Println("p4 :", *(&a)) } p1是指针变量p所存储的a的地址 p2是指针变量p的地址 p3是间接引用即通过指针变量存储的a的地址取到a的值 如下图: image.png阅读全文

简书 2020-07-24 08:32:44 心似南风

PHP7.3+Swoole4.4 / Go1.13 / MixPHP2.2 / Beego1.12 性能对比

好几年没有做过性能对比了,因为越来越觉得性能并没有那么的重要(相对于生态),今天有时间简单测试一下,因为 Mix v2.1 开始就全部切换为单进程协程模式,因此本次主要测试的是 Co\Http\Server 。 环境 CPU: Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz CPU(s): 12 Mem: 15G Linux version 3.10.0-957.10.1.el7.x86_64 PHP 7.3.12 + Swoole 4.4.14 代码中使用的单进...阅读全文

简书 2020-07-24 08:32:43 撸代码的乡下人

关于Golang中方法参数的传递

结构体声明 为了说明函数以及方法调用的过程,这里先定义一个struct,在下面的描述中会使用到它。 type Person struct { Name string Age uint16 } 普通函数中的参数传递 在Golang中,普通函数的行参如果是值类型,那么调用的实参也必须是实参,反之,如果函数行参是指针类型,那么传入的实参必须是地址。我们来看几个例子。 行参要求值传递 // 定义一个普通函数,要求值传递 func tell(person Person) { fmt.Printf("Hi,...阅读全文

简书 2020-07-24 08:32:43 龙鹤鹿