- 博客(1987)
- 资源 (718)
- 收藏
- 关注
原创 压力测试
压力测试概述压力测试用来检测函数(方法)的性能,和编写单元功能测试的方法类似,但需要注意以下几点:文件名命名规则:xxx_test.go函数名命名规则:func BenchXxx(b *testing.B),其中XXX可以是任意字母数字的组合,但是首字母不能是小写字母函数内必须使用b.N进行轮询测试函数内可以选择使用b.ReportAllocs()汇报内存开销在GoLandIDE中你...
2018-11-16 11:18:27 1286
原创 网络常识
#OSI七层模型###模型图###七层应用层 协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP表示层会话层传输层 网关 协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层网络层 路由器 协议有:ICMP IGMP IP(IPV4 IPV6) ...
2018-11-16 11:17:26 684
原创 网络通信1:UDP
#UDP协议###1.简介UDP(User Datagram Protocol),用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP提供了无连接通信,且不对传送数据包进行可靠性保证,适合于一次传输少量数据,UDP传输的可靠性...
2018-11-16 11:16:29 661
原创 反射简介
反射概述通常的程序逻辑是:编码时先写好剧本,运行时按照写好的剧本演何时创建一个什么实例,给哪个属性赋什么值,然后调用它的哪个方法都毫厘不差但能否在运行时动态地生成“剧本”呢?根据具体的业务需要见机行事,动态地生成一个不知道具体类型会是什么的实例,动态地访问一个无法提前预知的属性或方法答案是可以的,这便引出了今天的主角——反射应用场景举例:导出商品列表到Excel需求是:不管用户...
2018-11-16 11:15:40 373
原创 网络通信2:TCP简单通信
#首部格式图释:各个段位说明:源端口和目的端口:各占 2 字节.端口是传输层与应用层的服务接口.传输层的复用和分用功能都要通过端口才能实现序号:占 4 字节.TCP 连接中传送的数据流中的每一个字节都编上一个序号.序号字段的值则指的是本报文段所发送的数据的第一个字节的序号确认号:占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号数据偏移/首部长度:占 4 位,它指出...
2018-11-16 11:14:53 586 1
原创 网络通信5:执行HTTP的GET/POST请求
导入依赖包import ( "fmt" "net/http" "io/ioutil" "strings")提交GET请求并获得返回func main521() { url := "http://www.baidu.com/s?wd=肉" resp, err := http.Get(url) if err != nil { fmt.Println("错误")
2018-11-16 11:14:09 643
原创 详解GOPATH
File->Settings->Go->GOPATH作用存放SDK以外的第三方类库可以是下载的第三方类库也可以是自己收藏的可复用代码目录结构GOPATH目录可以指定多个每一个GOPATH目录下必须有一个src目录src目录下的文件夹名称就是引用时的包名举例 import fuck.shit shit.EatSome(5)...
2018-11-16 11:09:16 1292
原创 网络通信6:搭建HTTP服务器
#1、Web工作方式我们平时浏览网页的时候,会打开浏览器,输入网址后按下回车键,然后就会显示出你想要 浏览的内容。在这个看似简单的用户行为背后,到底隐藏了些什么呢?对于普通的上网过程,系统其实是这样做的:浏览器本身是一个客户端,当你输入URL的 时候,首先浏览器会去请求DNS服务器,通过DNS获取相应的域名对应的IP,然后通过 IP地址找到IP对应的服务器后,要求建立TCP连接,等浏览器发送完...
2018-11-16 11:08:12 634
原创 Go语言开发环境搭建
#开发环境搭建##下载地址Go编译器https://golang.google.cn/dl/Goland官网下载https://www.jetbrains.com/go/download/#section=windows在线激活地址http://idea.youbbs.org##卸载过程如下:点击设置点击应用找到go之后点击卸载卸载过程如...
2018-11-16 11:07:32 469
原创 网络通信3:TCP交互通信
服务端实现import ( "fmt" "net" "os" "strings")func CheckErrorS(err error) { if err != nil { fmt.Println("网络错误", err.Error()) os.Exit(1) }}func Processinfo(conn net.Conn) { buffer := make(...
2018-11-16 11:06:36 539
原创 网络通信4:TCP广播
服务端实现import ( "fmt" "net" "os" "strings")//存储客户端连接, key,ip端口,value 链接对象var onlineConnsMap = make(map[string]net.Conn)//消息队列,缓冲区var messageQueue = make(chan string, 1000)//消息,处理程序退出var ...
2018-11-16 11:05:47 1740 1
原创 MySQL数据库5:Go与MySQL的交互
下载第三方依赖go get github.com/jmoiron/sqlxgo get github.com/go-sql-driver/mysql其中github.com/jmoiron/sqlx是我们需要用到的主要类库github.com/go-sql-driver/mysql是作为MySQL的驱动程序存在的,我们只需要执行包的init方法即可引入依赖import ( "g...
2018-11-16 11:02:04 405
原创 Redis数据库4:Go与Redis的交互
1. Redis简介Redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。特点支持更多数据类型和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set 有序集合)和hash(哈希类型)。支持复杂操作这些数据类型都支持push/po...
2018-11-16 10:58:57 1060
原创 Linux下搭建Go语言开发环境
@安装编译器方案一下载安装包解压到特定目录cd /usr/localtar -zxvf goxxx.tar.gz 配置PATHexport PATH=$PATH:/usr/local/go/bin使配置永久生效sudo gedit /etc/profileexport PATH=$PATH:/usr/local/go/binsource /etc/profile 或 re...
2018-11-16 10:52:15 711
原创 正则表达式
Go语言标准库内建提供了regexp包. 匹配除换行符以外的任意字符\w 匹配字母或数字或下划线或汉字\s 匹配任意的空白符\d 匹配数字\b 匹配单词的开始或结束^ 匹配字符串的开始$ 匹配字符串的结束重复零次或更多次重复一次或更多次? 重复零次或一次{n} 重复n次{n,} 重...
2018-11-16 10:46:36 399
原创 Go语言项目实战:并发爬虫
导入类库import ( "fmt" "regexp" "net/http" "io/ioutil" "strings" "sync" "time" "strconv")定义全局数据var ( //存放图片链接 chanImgUrls chan string //存放147个任务是否已完成 chanTask cha
2018-11-16 10:45:45 545
原创 Go语言项目实战:基于开源数据的成语查询
业务需求命令行键入一行诗句启动应用:idiom.exe -cmd start -poem 大王派我来巡山将诗句中的每个字丢入【模糊查询管道】另外再建立【精确查询管道】和【结束管道】,分别存储【成语】(大鹏展翅、占山为王、龟派气功…)和【结束指令】(fuckoff)时钟每秒随机读入一条管道数据:如果是【模糊查询管道】:起协程进行模糊查询,并汇总数据在内存如果是【精确查询管道】:起协程进...
2018-11-16 10:44:29 493
原创 并发技术1:CSP并发理论
异步async并行:多个任务并发执行同步sync串行:多个任务依次执行阻塞block某个并发任务由于拿不到资源没法干活,从而无所事事地干等进程并发-线程并发-协程并发异步回调async callbackA线程唤起B线程,令其干活同时给B一个回调函数命令B在干完活以后,执行这个回调函数这个回调函数会与A线程发生交互A不必阻塞等待B执行的结果,AB两个线程可以并发执行利弊...
2018-11-16 10:39:07 430
原创 并发技术2:多协程
创建Goroutineimport ( "fmt" "time")func newTask() { for { fmt.Println("劳资是子协程") time.Sleep(time.Second) }}func main() { //开一条协程,与主协程并发地执行newTask() go newTask() //主协程赖着不死,主协程如果死了,子协程也...
2018-11-16 10:38:34 420
原创 图形用户界面1:初识Walk
GO语言的图形界面库Walk简介GO没有原生的界面库,所以不能直接用来写GUI界面。但最近互联网上已经涌现出不少成熟、好用的第三方界面库。使用它们,就同样可以写出同C#、C++的界面。而且效率还更胜一筹。关于Walk界面库(官方介绍):Walk是一个写给Golang的Window应用程序库套件,它主要用于桌面GUI的开发,但也有更多的东西。###安装Walk在浏览这部分前,请确定已经配置安...
2018-11-16 10:37:45 558
原创 Go语言项目实战:多人聊天室
功能需求实现单撩实现群撩实现用户上线的全网通知实现用户昵称实现聊天日志的存储和查看服务端实现type Client struct { conn net.Conn name string addr string}var ( //客户端信息,用昵称为键 //clientsMap = make(map[string]net.Conn) clientsMap = mak...
2018-11-16 10:36:44 654
原创 图形用户界面2:常用控件
认识几种常用控件按钮菜单工具栏界面布局列表显示图片导入依赖import ( "github.com/lxn/walk" . "github.com/lxn/walk/declarative" "os" "strings" "io/ioutil" "fmt" "log")定义全局数据// 全局应用的菜单项var myAction
2018-11-16 10:35:55 718
原创 并发技术3:管道通信
#channel 介绍channel 提供了一种通信机制,通过它,一个 goroutine 可以想另一 goroutine 发送消息。channel 本身还需关联了一个类型,也就是 channel 可以发送数据的类型。例如: 发送 int 类型消息的 channel 写作 chan int 。#channel 创建channel 使用内置的 make 函数创建,下面声明了一个 chan in...
2018-11-16 10:35:08 300
原创 并发技术5:死锁问题
1. 同一个goroutine中,使用同一个 channel 读写package mainfunc main(){ ch:=make(chan int) //这就是在main程里面发生的死锁情况 ch<-6 // 这里会发生一直阻塞的情况,执行不到下面一句 <-ch}这是最简单的死锁情况看运行结果1. 2个 以上的go程中, 使用同一个 ...
2018-11-16 10:34:03 388
原创 并发技术4:同步调度
等待组在此之前,我们让主协程等待子协程结束的方式都是睡眠,睡足子协程需要的时间,这种方式显然是不理想的!等待组(sync.WaitGroup)的原理是:每增加一个子协程,就向等待组中+1,每结束一个协程,就从等待组中-1,主协程会阻塞等待直到组中的协程数等于0为止;这种方式可以令主协程恰好结束在最后一个子协程结束的时间点上,Perfect!互斥锁案例1在很多情境中,数据是不允许并...
2018-11-16 10:26:51 372
原创 MySQL数据库6:Go与MySQL事务
事务概念事务是将批量增删改操作视为一个整体,作为一个整体,它们要么全部成功,要么全部失败——这一特性称为事务的原子性(原子是不可再分割的);事务的应用场景很多,例如在一次电商的交易中,只有资金出入表、物流表、交易记录表、订单表、购物车表等一系列表的数据变动全部严丝合缝分毫不差时,才能视为交易成功,此时可以提交事务;只要有一点对不上号的地方,本次交易就不能视为成功,所有的数据应全部回滚至交易...
2018-11-16 10:23:33 389
原创 并发技术3:定时器
定时器概述Go为我们提供了两种不同方式的计时器:定时执行任务的计时器周期性执行任务的计时器固定时间定时器下面的例子演示了如何使用定时器延时2秒执行一项任务func main() { //创建2秒的定时器 timer := time.NewTimer(2*time.Second) //当前时间: 2018-09-25 19:17:16.8050379 +0800 CST m=+...
2018-11-16 10:06:09 291
原创 并发技术4:读写锁
读写锁概述除了上一篇提到的互斥锁以外,Go语言还给我们提供了另一种资源锁——读写锁(sync.RWMutex);读写锁可以锁定和解锁两种模式:只读模式和只写模式:只读模式:多路只读不可写;只写模式:单路只写不可读;只读模式示例//定义读写锁var rwMutex sync.RWMutex/*只读模式:多路只读不可写*/func main() { for i := 0; i...
2018-11-16 10:05:38 267
原创 Redis简介与安装(Windows)
@简介redis是一种高速高性能的内存数据库,存储的是键值对数据;由于极高的存储和访问速度,redis常被用来作为数据缓存服务器;另外redis是支持数据持久化的(即redis会自动将数据写入磁盘)——这是redis大杀四方的重要原因;redis支持多个slave端同时向master端进行写入,这经常被用在分布式爬虫等场景中;2010年以后redis开始大面积流行,关系型数据库(核心数...
2018-11-16 10:02:26 342
原创 Redis数据基本操作
@概述这里列举了键值对和其它数据类型的一些常用操作;更多操作命令和释义可以参考:http://redis.cn/commands.html@字符串操作举例set name bill //设置键值setex name 20 bill //键值20秒后过期mset age 60 gender male //一次性存储多个键值get name //不存在则返回nullmget nam...
2018-11-16 09:56:01 289
原创 Redis管理基本操作
@概述本节列举一些Redis中常见的非数据操作,包括帮助、数据库切换、状态监视等;@启动服务redis-server.exe redis.windows.conf // 使用配置启动redis服务@查看服务状态(非redis命令模式下)redis-cli --stat -a 123456 // 查看服务状态显示如下:共有15个键,占用内存715K,有3个客户端连接(含Desk...
2018-11-16 09:54:36 342
原创 Linux常用命令100
@日常命令cd .. // 返回上一级目录cd - // 返回上一次目录cd或cd ~ // 返回家目录cd / // 进入根目录pwd // 显示当前目录ls // 显示当前目录文件ls localrepo/ // 显示指定目录的文件ll // 查看目录文件的的详细信息la // 查看全部包括隐藏的目录文件tree // 查看当前目录文件树tree mydir // 查看...
2018-11-16 09:50:51 539
原创 Linux常用工具的安装
@安装PyCharm官网下载压缩包解压缩进入压缩目录,运行pycharm.sh@安装MySQLsudo apt-get install mysql-server 无法通过apt安装,应该是兼容性问题sudo apt install mysql-client 安装client端sudo apt install libmysqlclient-dev 安装依赖 netstat...
2018-11-16 09:49:19 334
原创 MySQL数据库5:Go与MySQL的交互
下载第三方依赖go get github.com/jmoiron/sqlxgo get github.com/go-sql-driver/mysql其中github.com/jmoiron/sqlx是我们需要用到的主要类库github.com/go-sql-driver/mysql是作为MySQL的驱动程序存在的,我们只需要执行包的init方法即可引入依赖import ( "g...
2018-11-16 09:46:52 393
原创 Redis数据库4:Go与Redis的交互
1. Redis简介Redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。特点支持更多数据类型和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set 有序集合)和hash(哈希类型)。支持复杂操作这些数据类型都支持push/po...
2018-11-16 09:45:04 679 1
原创 Linux下搭建Go语言开发环境
@安装编译器方案一下载安装包解压到特定目录cd /usr/localtar -zxvf goxxx.tar.gz 配置PATHexport PATH=$PATH:/usr/local/go/bin使配置永久生效sudo gedit /etc/profileexport PATH=$PATH:/usr/local/go/binsource /etc/profile 或 re...
2018-11-16 09:38:49 2274
原创 正则表达式
Go语言标准库内建提供了regexp包. 匹配除换行符以外的任意字符\w 匹配字母或数字或下划线或汉字\s 匹配任意的空白符\d 匹配数字\b 匹配单词的开始或结束^ 匹配字符串的开始$ 匹配字符串的结束重复零次或更多次重复一次或更多次? 重复零次或一次{n} 重复n次{n,} 重...
2018-11-16 09:38:17 407
原创 Go语言项目实战:并发爬虫
导入类库import ( "fmt" "regexp" "net/http" "io/ioutil" "strings" "sync" "time" "strconv")定义全局数据var ( //存放图片链接 chanImgUrls chan string //存放147个任务是否已完成 chanTask cha
2018-11-16 09:37:40 3330
原创 Go语言项目实战:基于开源数据的成语查询
业务需求命令行键入一行诗句启动应用:idiom.exe -cmd start -poem 大王派我来巡山将诗句中的每个字丢入【模糊查询管道】另外再建立【精确查询管道】和【结束管道】,分别存储【成语】(大鹏展翅、占山为王、龟派气功…)和【结束指令】(fuckoff)时钟每秒随机读入一条管道数据:如果是【模糊查询管道】:起协程进行模糊查询,并汇总数据在内存如果是【精确查询管道】:起协程进...
2018-11-16 09:37:03 546
原创 并发技术1:CSP并发理论
异步async并行:多个任务并发执行同步sync串行:多个任务依次执行阻塞block某个并发任务由于拿不到资源没法干活,从而无所事事地干等进程并发-线程并发-协程并发异步回调async callbackA线程唤起B线程,令其干活同时给B一个回调函数命令B在干完活以后,执行这个回调函数这个回调函数会与A线程发生交互A不必阻塞等待B执行的结果,AB两个线程可以并发执行利弊...
2018-11-16 09:34:21 1605
VMware-workstation-full-12.5.0-4352439完美破解版.exe
2016-10-11
codeblocks-16.01mingw_fortran-setup.exe下载
2016-10-10
Java语言程序设计(基础篇)(原书第10版)
2016-09-29
20150329C定义变量->源代码
2016-09-08
20150329C补码->源代码
2016-09-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人