Go-net/http源码解读
流程注册路由
开启服务并处理请求
基本使用HandleFunc
12345678func HelloHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello World")}func main() { http.HandleFunc("/", HelloHandler) http.ListenAndServe(":8000", nil)}
或者是:
Handle
123456789101112type HelloHandler struct { content string}func (handler HelloHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, handler.content)}func main() { h ...
Go标准库之strings与bytes
PrefaceGo字符切片为内存中的字节序列提供了抽象,而Go字符串则代表了采用UTF-8编码的Unicode字符的数组
API类别:
查找
替换
比较
分割
拼接
修剪
变换
对接I/O
strings包与bytes包的大部分api基本相同
查找定性查找
1234567891011121314151617fmt.Println(strings.Contains("Golang", "Go")) //truefmt.Println(bytes.Contains([]byte("Golang"), []byte("Go"))) //truefmt.Println(bytes.Contains([]byte("Golang"), nil)) //true//第二个参数可当作字符集fmt.Println(strings.ContainsAny("Golang", "c++")) //falsefmt.Println(bytes.ContainsAny ...
IPFS-(1)内容寻址
IPFS
星际文件系统(InterPlanetary File System,缩写为IPFS)是一个旨在实现文件的分布式存储、共享和持久化的网络传输协议。它是一种内容可寻址的对等超媒体分发协议。在IPFS网络中的节点构成一个分布式文件系统。它是一个开放源代码项目,自2014年开始由协议实验室在开源社区的帮助下发展。
内容寻址内容寻址的动机传统的基于位置寻址
URL指向存储在单个位置的单个副本
一旦副本消失,无法知道其他副本的位置
用户无法验证内容的完整性
没有请求聚合,导致重复工作和带宽浪费(即在生产环境中没有多播选项)
基于位置寻址 vs 基于内容寻址
内容的寻址是基于内容标识符的
内容标识符CID
IPFS体系结构最基本组成部分
用于内容寻址
用于命名IPFS中的每一个数据片
带有元数据的哈希
自描述
CID的两个版本
CID是不可变的链接:
数据去重
相同的数据可以通过其地址进行验证、缓存(节省资源,提供更快的内容访问)
自认证内容
通过地址进行认证,而不是通过证书颁发机构(去中心化)
不变性
如果内容发生改动,那么地址也会发生变化(完整性检查)
...
GDB
GDB是GNU下的Linux端程序调试工具
gdb位置:
12issak@ubuntu:~$ which gdb/usr/bin/gdb
编译
12345# 关闭内联优化,方便调试$ go build -gcflags "-N -l" demo.go# 发布版本删除调试符号go build -ldflags “-s -w”
使用gdb命令启动调试界面
1234567891011121314151617181920212223242526272829issak@ubuntu:~/go/src/hello$ gdb demoGNU gdb (Ubuntu 9.2-0ubuntu1~20.04.1) 9.2Copyright (C) 2020 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>This is free software: you are free to change an ...
go-Context
go Context在Go1.7引入标准库,它是Goroutine的上下文,包含其运行状态、环境、现场等信息
context的作用就是在不同的goroutine之间同步请求特定的数据、取消信号以及处理请求的截止日期。
Context接口123456type Context interface { Deadline() (deadline time.Time, ok bool) Done() <-chan struct{} Err() error Value(key interface{}) interface{}}
Deadline()
返回当前Context被取消的时间,即完成工作的截止时间
Done()
返回一个Channel,会在当前工作完成或者上下文被取消后关闭,多次调用只会返回同一个Channel
Err()
如果当前Context被取消返回Canceled
如果当前Context超时返回DeadlineExceeded
Value(key)
从Con ...
MongoDB
简介一个以JSON为数据模型的文档数据库
横向扩展可以支撑很大数据量和并发
MongoDB和关系型数据库的对比
配置conf/mongodb.conf
123dbpath=E:\SDK\mongodb-5.0.7\data\dblogpath=E:\SDK\mongodb-5.0.7\data\log\mongo.logauth=true
创建用户使用前创建一个root用户,以免报not authorized on admin to execute command
1234567db.createUser( { user:"root", pwd:"123456", roles:[{role:"root",db:"admin"}] })
登录:
1db.auth('root','123456')
MongoDB Compass
数据库操作创建数据库1use DATABASE_NAME
使用db查看当前数据库 ...
go-smtp
the detail of net/smtp as follows:
SendMail
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768func SendMail(addr string, a Auth, from string, to []string, msg []byte) error { //validateLine checks to see if a line has CR or LF //if it has, then return an error if err := validateLine(from); err != nil { return err } for _, recp := range to { if err := validateLine(recp); err != nil { re ...
gorm
gormGORM 指南 | GORM - The fantastic ORM library for Golang, aims to be developer friendly.
ORM全称是:Object Relational Mapping(对象关系映射),其主要作用是在编程中,把面向对象的概念跟数据库中表的概念对应起来。举例来说就是,我定义一个对象,那就对应着一张表,这个对象的实例,就对应着表中的一条记录。
gorm是Golang语言中一款性能极好的ORM库
gorm连接数据库1234567891011121314151617package mainimport ( "gorm.io/driver/mysql" "gorm.io/gorm")func main() { // 参考 https://github.com/go-sql-driver/mysql#dsn-data-source-name 获取详情 dsn := "root:123456@tcp(127.0.0.1:3306)/gorm_test?cha ...
Gin
GinGin is a HTTP web framework written in Go
Installationuse command to install Gin
1$ go get -u github.com/gin-gonic/gin
QuickStart12345678910111213func main() { //Router instance r := gin.Default() //gin.Context packages request and response r.GET("/", func(context *gin.Context) { context.String(http.StatusOK, "hello world") context.JSON(http.StatusOK, gin.H{ "message": "helloWorld", }) }) //listen and serve, default po ...
密码学要点
密码体制构成密码体制就是完成加密和解密功能的密码方案或密码算法。一个密码体制(cryptosystem)或密码算法通常由五个部分组成:{M,C,K,E,D}
明文空间M(全体明文的集合)
密文空间C(全体密文的集合)
密钥空间K(全体密钥的集合)
加密器或加密变换(算法),由加密密钥控制的加密变换的集合
解密器或解密变换(算法),由解密密钥控制的解密变换的集合
密码体制攻击方法安全性攻击分类:
被动攻击:未经用户同意和认可的情况下将信息或数据文件泄露给系统攻击者,但不对数据信息进行任何修改
主动攻击:主要涉及某些数据流的篡改或虚假数据流的产生。主动攻击常分为假冒(或伪造)、重放、篡改信息和拒绝服务四类
密码分析者分析密码算法主要由三个方法:
穷举法
统计分析法
密码体制分析法
根据对明文和密文掌握的程度,密码分析者可以在下面五种情况下对密码体制进行攻击
唯密文攻击(知道待破译的一些密文和加密算法)
已知明文攻击(知道一些待破译的密文和加密算法,还知道对应的明文)
选择明文攻击(知道一些待破译的密文和加密算法,还可以选择一些明文并得到相应的密文)
选择密文攻击
选 ...
OS要点解析
一、概述1.操作系统概念
是系统最基本最核心的软件,属于系统软件
控制和管理整个计算机的硬件和软件资源
合理的组织、调度计算机的工作与资源的分配
为用户和其它软件提供方便的接口和环境
2.操作系统的设计目标
功能:作为计算机系统资源的管理者
目标:安全、高效
处理器管理
存储器管理
文件管理
设备管理
功能:作为用户与计算机硬件系统之间的接口
目标:方便用户使用
命令接口
程序接口
功能:用作扩充机器(虚拟机)
目标:实现对硬件机器的扩展
3.操作系统的基本特征
并发
共享
互斥共享(如对摄像头设备的共享使用)
同时共享(如对硬盘资源的共享使用)
虚拟
空分复用技术(如虚拟存储技术)
时分复用技术(如虚拟处理器技术)
异步
多道程序环境允许多个程序并发执行,但由于资源有限,如cpu只有一个,进程的执行并不是一贯到底的,而是走走停停的,它以不可预知的速度向前推进。
没有并发和共享,就没有虚拟和异步,因此并发和共享是操作系统的两个最基本的特征
二、进程管理(1)进程描述与控制进程的概念程序段、数据段、PCB三部分组成了进程实体,一般情况下,我们把进程实体简 ...
进程
进程进程简介程序段、数据段、PCB三部分组成了进程实体,一般情况下,我们把进程实体简称为进程;例如,创建进程实质上是创建进程实体的PCB。
引入进程实体的概念后,可把进程定义为:
进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位
严格来说,进程实体和进程不一样,进程实体是静态的,而进程是动态的。除非专门考察二者区别,我们都可以认为进程实体就是进程。因此我们可以说“进程由程序段,数据段,PCB三部分组成“
总结
进程状态状态
转换模型
五状态模型
七状态模型(含挂起)
进程控制
进程控制的主要功能是对系统中的所有进程实施有效的管理,具有创建新进程、撤销已有进程、实现进程状态转换等功能
通过原语实现进程控制,原语执行具有原子性
如果不能“一气呵成”,就有可能导致操作系统中的某些关键数据结构信息不统一的情况,这会影响操作系统进行别的管理工作
通过”关中断指令“和”开中断指令“这两个特权指令实现原语的原子性
CPU执行了关中断指令之后,就不再例行检查中断信号,直到执行开中断指令之后 才会恢复检查。这样,关中断、开中断之间的这些指令序列就是不可被中 ...