自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 bpf pin error fix

在挂载内核程序到hook点时发现总是报错。

2022-07-26 10:31:45 332 1

原创 bpf map feature

查询记录是在map最后一条记录下增加,所以相同的记录在上面删除后会在下面重新生成(即mapkey一样),这样导致查询一遍存在多条记录(>=1)。

2022-07-26 10:29:42 157

原创 Redis原理笔记

redis原理笔记redis key 命令commandusekeys *查看当前库中key数del key立即删除keyunlink key立即提示删除key,实际上是异步进行set key value设置键值对type key查看key类型exists keykey是否存在expire key 10设置key过期时间,单位为秒ttl key查看key是否过期,-1永不过期,-2已经过期操作库命令comman

2021-09-10 15:17:40 145

原创 golang实现网络文件传输

获取文件属性和命令行参数首先获取文件名。借助os包中的stat()函数来获取文件属性信息。在函数返回的文件属性中包含文件名和文件大小。Stat参数name传入的是文件访问的绝对路径。FileInfo中的Name()函数可以将不含路径的文件名单独提取出来。func Stat(name string) (FileInfo, error) type FileInfo interface { Name() string Size() int64 Mode() F

2021-08-30 03:36:15 680

原创 UDP 通信

UDP 与 TCP 的差异TCPUDP面向连接面向无连接要求系统资源较多要求系统资源较少TCP 程序结构较复杂UDP 程序结构较简单使用流式使用数据报式保证数据准确性不保证数据准确性保证数据顺序不保证数据顺序通讯速度较慢通讯速度较快UDP 服务器由于 UDP 是“无连接”的,所以,服务器端不需要额外创建监听套接字,只需要指定好 IP 和 port,然后监听该地址,等待客户端与之建立连接,即可通信。//创建监听地址:func

2021-08-30 02:58:53 222

原创 socket

定义socket:插座插口的意思,理解为套接字,用于描述IP地址和端口。可以实现不同应用间的通讯。起源于UNIX,以一切都是文件的思想设计的,socket就是此模式下的一个实现。网络的 Socket 数据传输是一种特殊的 I/O,Socket 也是一种文件描述符。Socket 也具有一个类似于打开文件的函数调用:Socket(),该函数返回一个整型的 Socket 描述符,随后的连接建立、数据传输等操作都是通过该 Socket 实现的原理 发送端========>接收端 sfd 接

2021-08-30 00:16:34 128

原创 TCP协议

简单CS通讯框架server-net.listen()server-accept()<==阻塞等待用户链接=client-net.dial()server-read()<=数据请求client-write()server-write()===数据回答=>client-read()close() close()Server 端//Listen 函数:func Listen(network, address string) (Listener, error) /

2021-08-30 00:16:23 175

原创 计算机网络笔记

网络概述协议从应用的角度出发,协议可理解为“规则”,是数据传输和数据的解释的规则。假设,A、B双方欲传输文件。规定:第一次,传输文件名,接收方接收到文件名,应答OK给传输方;第二次,发送文件的尺寸,接收方接收到该数据再次应答一个OK;第三次,传输文件内容。同样,接收方接收数据完成后应答OK表示文件内容接收成功。由此,无论A、B之间传递何种文件,都是通过三次数据传输来完成。A、B之间形成了一个最简单的数据传输规则。双方都按此规则发送、接收数据。A、B之间达成的这个相互遵守的规则即为协议。这种

2021-08-30 00:16:05 57

原创 go-defer

defer 语句会将函数推迟到外层函数返回之后执行。 推迟调用的函数其参数会立即求值,但直到外层函数返回前该函数都不会被调用。package main​import "fmt"​func main() { defer fmt.Println("world") fmt.Println("hello") fmt.Println("counting") for i := 0; i < 10; i++ { ...

2021-08-27 00:22:22 67

原创 go-map(集合)

Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,我们无法决定它的返回顺序,这是因为 Map 是使用 hash 表来实现的。定义 Map可以使用内建函数 make 也可以使用 map 关键字来定义 Map:/* 声明变量,默认 map 是 nil */var map_variable map[key_data_type]value_data_ty

2021-08-27 00:21:59 65

原创 golang递归

递归,就是在运行的过程中调用自己。func getvalue(num uint) { if num <= 0 { return } fmt.Println("num is ", num, "go on") num -= 1 getvalue(num) //务必设置退出条件)}//递归函数实现阶乘func jiecheng(num uint64) (sum uint64) { if num > 0 { sum = num * jiecheng(num-1) retu

2021-08-27 00:21:34 131

原创 golang-method

Go 没有类。不过你可以为结构体类型定义方法。方法就是一类带特殊的 接收者 参数的函数。方法接收者在它自己的参数列表内,位于 func 关键字和方法名之间。在此例中,Abs 方法拥有一个名为 v,类型为 Vertex 的接收者。package mainimport ( "fmt" "math")type Vertex struct { X, Y float64}func (v Vertex) Abs() float64 { return math.Sqrt(v.X*v.X +

2021-08-27 00:21:16 54

原创 golang-interface

Go 语言提供了另外一种数据类型即接口,它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口。//接口定义type interface_name interface{ method_1[return_type] method_2[return_type] method_3[return_type] method_4[return_type]}//结构体定义type struct_name struct{ value1 type1; ...}

2021-08-27 00:20:55 80

原创 go-error

Go 语言通过内置的错误接口提供了非常简单的错误处理机制。error类型是一个接口类型,这是它的定义:type error interface { Error() string}我们可以在编码中通过实现 error 接口类型来生成错误信息。函数通常在最后的返回值中返回错误信息。使用errors.New 可返回一个错误信息。package mainimport ( "fmt" "strings")type stringError struct { strErr string

2021-08-27 00:20:26 110

原创 go-channel

通道(channel)是用来传递数据的一个数据结构。通道可用于两个 goroutine 之间通过传递一个指定类型的值来同步运行和通讯。操作符 <- 用于指定通道的方向,发送或接收。如果未指定方向,则为双向通道。ch <- v // 把 v 发送到通道 chv := <-ch // 从 ch 接收数据 // 并把值赋给 v声明一个通道很简单,我们使用chan关键字即可,通道在使用前必须先创建:ch := make(chan int)注意:默认情况

2021-08-27 00:20:03 61

原创 Go匿名函数

Go语言支持匿名函数,即在需要使用函数时再定义函数,匿名函数没有函数名只有函数体,函数可以作为一种类型被赋值给函数类型的变量,匿名函数也往往以变量方式传递,这与C语言的回调函数比较类似,不同的是,Go语言支持随时在代码里定义匿名函数。匿名函数是指不需要定义函数名的一种函数实现方式,由一个不带函数名的函数声明和函数体组成,下面来具体介绍一下匿名函数的定义及使用。定义一个匿名函数匿名函数的定义格式如下:func(参数列表)(返回参数列表){函数体}1.匿名函数的定义就是没有名字的普通函数定义。

2021-08-27 00:19:44 2097

原创 go-list

在Go语言中,列表使用 container/list 包来实现,内部的实现原理是双链表,列表能够高效地进行任意位置的元素插入和删除操作。初始化列表list 的初始化有两种方法:分别是使用 New() 函数和 var 关键字声明,两种方法的初始化效果都是一致的。通过 container/list 包的 New() 函数初始化 list变量名 := list.New()通过 var 关键字声明初始化 listvar 变量名 list.List列表与切片和 map 不同的是,列表并没有具体元素类型

2021-08-27 00:19:23 64

原创 Go-Goroutine

Go 语言支持并发,我们只需要通过 go 关键字来开启 goroutine 即可。goroutine 是轻量级线程,goroutine 的调度是由 Golang 运行时进行管理的。goroutine 语法格式:go 函数名( 参数列表 )package mainimport ( "fmt" "time")func say(s string) { for i := 0; i < 5; i++ { time.S

2021-08-27 00:19:05 1017

原创 golang控制语句

forGo 只有一种循环结构:for 循环。 基本的 for 循环由三部分组成,它们用分号隔开: 初始化语句:在第一次迭代前执行,可选 条件表达式:在每次迭代前求值 后置语句:在每次迭代的结尾执行,可选package mainfunc main() { /*sum:=0 for i:=0;i<10;i++{ sum += i }*/ sum := 1 for ; sum < 10; { sum += sum } //此时你可以

2021-08-26 17:36:18 70

原创 golang切片

切片(slice)是对数组的一个连续片段的引用,所以切片是一个引用类型,这个片段可以是整个数组,也可以是由起始和终止索引标识的一些项的子集,需要注意的是,终止索引标识的项不包括在切片内。 Go语言中切片的内部结构包含地址、大小和容量,切片一般用于快速地操作一块数据集合,如果将数据集合比作切糕的话,切片就是你要的“那一块”,切的过程包含从哪里开始(切片的起始位置)及切多大(切片的大小),容量可以理解为装切片的口袋大小,如下图所示。 切片并不存储任何数据,它只是描述了底层数组中的一段。 更改切片的元素会修改其底

2021-08-26 17:35:13 67

原创 golang数组

Go语言中因为数组是由固定长度组成的,所以一般不用,多用可以增长收缩的切片 var 数组变量名[元素数量]Type 数组变量名:数组声明及使用时的变量名。 元素数量:数组的元素数量,可以是一个表达式,但最终通过编译期计算的结果必须是整型数值,元素数量不能含有到运行时才能确认大小的数值。 Type:可以是任意基本类型,包括数组本身,类型为数组本身时,可以实现多维数组。package mainimport ("fmt")​func shuzhuTest(){ ///var a[...

2021-08-26 17:33:31 239

原创 golang标识符

break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var append bool byte cap..

2021-08-26 17:32:10 49

原创 golang指针

指针(pointer)在Go语言中可以被拆分为两个核心概念: 类型指针,允许对这个指针类型的数据进行修改,传递数据可以直接使用指针,而无须拷贝数据,类型指针不能进行偏移和运算。 切片,由指向起始元素的原始指针、元素数量和容量组成。 取地址操作符&和取值操作符是一对互补操作符,&取出地址,根据地址取出地址指向的值。变量、指针地址、指针变量、取地址、取值的相互关系和特性如下: 对变量进行取地址操作使用&操作符,可以获得这个变量的指针..

2021-08-26 17:30:36 502

原创 golang变量

可以在包内和函数内声明 var a,bc bool,类型在变量名后面 声明可以包含初始值var i,j int = 1,2 有初始值可以不用写变量类型var x,y,z = true,30,"aaa" 函数内可以使用短赋值语句:=,如果是函数外每段语句必须按照关键字开头 基本类型: bool string int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr byt...

2021-08-26 17:29:16 45

原创 golang函数

函数可以有多个参数,或者没有参数 func add(x int, y int) int {return x + y} 函数有两个及以上形参是相同类型,除了最后一个类型,其他都可以省略 add(x int,y int)=>add(x,y int) 函数可以任意多值返回func add()(int,string,float){} 函数返回值可以被命名 func cal(num int)(x,y int){x=num/2;y=num-2;return x,y} 函..

2021-08-26 17:28:03 41

原创 golang包

Go程序都是由包构成,程序从main包还是运行包名与导入路径的最后一个元素相同包导入可以使用import ()语句来包含多个包包内首大写字母为外部可用,小写只能包内部访问

2021-08-26 17:25:26 47

原创 Golang安装方式

Linux:先获取安装链接后,使用wget下载到opt,然后使用tar解压到/usr/local,最后设置环境变量和路径,使用go version确认安装完成。 命令如下: wget xxxx.tar.gz tar -xzf goxxx.gz -C /usr/local export GOROOT=/usr/local/go export GOPATH=/workspace/go export PATH=$PATH:$GOROOT/bin source

2021-08-26 17:18:40 90

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除