Go 语言编写 TCP 扫描器 TCP TCP,也就是传输控制协议(Transmission Control Protocol)。 TCP握手 建立 TCP连接(或者叫打开端口),需要3次握手 客户端 -> 端口打开 ->服务器 syn (请求建立新连接) syn-ack (同意创建新连接) ack (表示响应) 服务端端口关闭 Closed Port client -syn-> Server Server -rst-> Client 如果存在防火墙 Filtered Port Client…
Go 语言编写 TCP 扫描器 TCP TCP,也就是传输控制协议(Transmission Control Protocol)。 TCP握手 建立 TCP连接(或者叫打开端口),需要3次握手 客户端 -> 端口打开 ->服务器 syn (请求建立新连接) syn-ack (同意创建新连接) ack (表示响应) 服务端端口关闭 Closed Port client -syn-> Server Server -rst-> Client 如果存在防火墙 Filtered Port Client…
二 golang推荐的命名规范 很少见人总结一些命名规范,也可能是笔者孤陋寡闻, 作为一个两年的golang 开发者, 我根据很多知名的项目,如 moby, kubernetess 等总结了一些常见的命名规范。 命名规范可以使得代码更容易与阅读, 更少的出现错误。 文件命名规范 由于文件跟包无任何关系, 而又避免windows大小写的问题,所以推荐的明明规范如下: 文件名应一律使用小写 不同单词之间用下划线分割 命名应尽可能地见名知意 常量命名规范 常量明明用 camelcase来命名示例如下 const toda…
结构体 结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体。每个值称为结构体的成员 结构体声明 type + 结构体名 + struct + {成员列表} ⭐如果结构体成员名字是以大写字母开头的,那么该成员就是导出的。这是Go语言导出规则决 定的。一个结构体可能同时包含导出和未导出的成员。结构体名也同样适用此规则 // 声明的一个结构体picture,里面有两个成员:color和background type Picture struct { Color string Background …
一 golang基础知识 Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种计算机编程语言语言。 设计初衷 Go语言是谷歌推出的一种的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软件开发的难度令人沮丧。派克表示,和今天的C++或C一样,Go是一种系统语言。他解释道,"使用它可以进行快速开发,同时它还是一个真正的编译…
原文链接: 为什么 Go for-range 的 value 值地址每次都一样? 循环语句是一种常用的控制结构,在 Go 语言中,除了 for 关键字以外,还有一个 range 关键字,可以使用 for-range 循环迭代数组、切片、字符串、map 和 channel 这些数据类型。 但是在使用 for-range 循环迭代数组和切片的时候,是很容易出错的,甚至很多老司机一不小心都会在这里翻车。 具体是怎么翻的呢?我们接着看。 现象 先来看两段很有意思的代码: 无限循环 如果我们在遍历数组的同时向数组中添加元素,…
GMP调度场景 场景1 P拥有G1,M1获取P后开始运行G1,G1使用 go func 创建G2,为了局部性G2优先加入到P1的本地队列 场景2 G1运行完成后(函数:goexit),M上运行的goroutine切换为G0,G0负责调度时协程的切换(函数:schedule)。从P的本地队列取G2,从G0切换到G2,并开始运行G2(函数:execute)。实现了线程M1的复用。 场景3 G2在创建G7的时候,发现P1的本地队列已满,需要执行负载均衡(把P1中本地队列中前一半的G,还有新创建G转移到全局队列) 场景4 …
使用Docsify构建一个项目文档 给自己的项目发布一个文档 Github Page配置 在上一篇,我们搭建了一个脚手架,方便我们更快的开始一个项目。这篇我们将使用github page给这个项目发布一个文档 我们可以在 github 仓库的 Setting-Pages界面进行文档的设置,例如我这个仓库,把文档源设置成了当前仓库master分支的/docs目录,之后我们只需要往这个目录下添加静态文件就可以在对应的site展示文档了。 使用Docsify 使用Docsify能更方便地发布文档,只需要编辑md文件即可修…
Golang GMP原理(1) 概念梳理 线程 线程一般指内核级线程,核心如下: 操作系统的最小调度单元 创建 销毁 调度由内核完成,cpu要完成内核态与用户态的转换 可充分利用多核,实现并行 协程 协程线程对应 协程,又称为用户级线程,核心点如下: 与线程存在映射关系,为M:1 创建、销毁、调度在用户态完成,对内核透明,所以更轻 从属同一个内核级线程,无法并行;一个协程阻塞会导致从属同一线程的所有协程无法执行。 Goroutine Goroutine是特殊的协程 与线程存在映射关系,为M:N 创建、销毁、调度在用…
最近翻开源代码的时候看到了一种很有意思的switch用法,分享一下。 注意这里讨论的不是typed switch,也就是case语句后面是类型的那种。 直接看代码: func (s *systemd) Status() (Status, error) { exitCode, out, err := s.runWithOutput("systemctl", "is-active", s.unitName()) if exitCode == 0 && err !=…
批量入库 因为maccms自带的采集采集起来很慢,而且很多资源站的采集接口不能对内容排序,导致最旧的数据最后入库。用java写个采集程序,采集完入库的时候发现不能一次性入库多个数据,导致入库也很慢,所以就在入库控制器写了个方法批量入库。 Receive.php public function foo() { $info = $this->_param; if (!array_key_exists("vods", $info) || empty($info["vods"]…