网站首页 成长录 “慢生活”不是懒惰,放慢速度不是拖延时间,而是让我们在生活中寻找到平衡。

47. 访问MySql数据库实现增删改查
2020-06-09 19:03 admin mysql改查

作为服务端程序,对数据库的访问是很常见的操作。我们来熟悉一下go语言访问MySql数据库的基本操作(增删改查)。数据库访问需要用到标准库"database/sql"和mysql的驱动"github.com/go-sql-driver/mysql"。这两个包都需要引用。mysql的驱动因为只是需要它的init()初始化,...
阅读全文

46. 实现一个简单的网络爬虫
2020-06-09 19:03 admin 爬虫网络

只针对链接进行抓取。__packagemainimport("fmt""runtime""log""net/http""math/rand""time""io/ioutil""regexp""strings""encoding/xml")varurlchannel=make(chanstring,200)//chann...
阅读全文

45. sync.Mutex 互斥和互斥锁
2020-06-09 19:03 admin 互斥syncMutex

channel在goroutine中互相通信是非常合适且方便的。如果,我们不需要互相通信,只需要保证同一时刻只能有一个goroutine访问共享变量,以免冲突。我们该怎么做呢?这就需要用到互斥和互斥锁。go语言标准库中提供了sync.Mutex类型及两个方法:Lock和Unlock我们可以通过在代码前加Lock,在代码...
阅读全文

42. select 的默认分支
2020-06-09 19:03 admin select默认

forselect是一个多分支循环,其中select分支如果都没有准备好执行,那么default默认分支就会被执行。为了非阻塞的发送或接收,就可以使用default分支。我们举例一个爆破过程,有读秒、有爆炸、有过程。读秒为每半秒钟读一次,过程为1/4秒一个记录,最后爆炸。完结。先准备两个计时器,分别设定读秒时长和爆炸时...
阅读全文

43. 等价二叉树
2020-06-09 19:03 admin 二叉树等价

实现两个二叉树的比较。二叉树的基本类型和函数来源于“golang.org/x/tour/tree”,为了避免网络问题影响代码运行,我把源码直接加入到了代码中。__//ATreeisabinarytreewithintegervalues.typeTreestruct{Left*TreeValueintRight*Tre...
阅读全文

44. goroutine、channel、time的例子
2020-06-09 19:03 admin goroutinechannel

格式化时间样式,利用goroutine实现获取和格式化当前时间,并且通过channel返回到主函数并打印出来。在go语言中,时间格式化有一个标准时间必须记住2006-01-0215:04:05-0700,为什么是这个时间呢?我们换个样式来看一下“01-0203:04:05pm2006-0700”,这就是1234567啊...
阅读全文

39. channel管道
2020-06-09 19:03 admin channel管道

channel是有类型的管道,channel的操作符是<\-,可以用来发送或接收值。__ch<-v//赋值给管道,管道接收值v:=<-ch//管道发送值管道的使用也是必须创建的。创建的方式是__ch:=make(chanint)管道默认情况下,在另一端准备好之前,发送和接收都会堵塞。这使得goroutine可以在没有明...
阅读全文

40. range和channel的close
2020-06-09 19:03 admin channelRange

一个channel值的发送者可以close这个channel,用以表示没有值会被发送了。接收者可以通过赋值语句的第二个参数来测试channel是否被关闭。当没有值可以接收并且channel已经被关闭,则__v,ok:=<-ch之后,ok会被设置为false。如果是__fori:=rangech会不断从ch接收值,直到c...
阅读全文

41. select阻塞 一个 gorountine 上的多个通讯操作
2020-06-09 19:03 admin selectgorountine

select语句可以使得一个goroutine在多个通讯操作上等待。select会阻塞,直到条件分支中的某个分支可以执行,就执行此分支。当多个分支都准备好的时候,会随机执行一个。这个select还是使用fibonacci函数来实现。__funcfibonacci(c,quitchanint){x,y:=0,1for{s...
阅读全文

56. 上传文件(CS版)
2020-06-09 19:02 admin 上传CS

这个版本的上传文件是服务端和客户端是分离的。也在单机上做了大文件测试。测通。因为走的还是表单提交的模式。所以客户端收不到文件传递的结果。这个还需要抽时间改进。服务端的根上要建立upload和staticfile路径。不然会影响文件上传。服务端代码示例__/***MyFileUpload02*@Author:JianJu...
阅读全文

55. 上传文件(Web版)
2020-06-09 19:02 admin web上传

实现一个简单的页面上传文件功能。单机测试,上传1G以上的MP4电影也没问题。如果是internet环境,你测试一下告我好了。呵呵!__/***MyFileUpload01*@Author:JianJunbo*@Email:junbojian@qq.com*@Create:2017/9/1715:14*Copyright...
阅读全文

54. 心跳的实现
2020-06-09 19:02 admin 心跳实现

在多客户端同时访问服务器的工作模式下,首先要保证服务端的运行正常。因此,Server在和Client建立通讯后,确保连接的及时断开就非常重要。否则,多个客户端长时间占用着连接不关闭,是非常可怕的服务器资源浪费。会使得服务器可服务的客户端数量大幅度减少。因此,针对短连接和长连接,根据业务的需要,配套不同的处理机制。短连接...
阅读全文

53. Socket服务三次握手的示例
2020-06-09 19:02 admin 示例Socket

什么是三次握手呢?这是服务器和客户端之间沟通的过程。首先,客户端对服务器发送了条信息。然后,服务端对客户端说,我收到了。最后,客户端对服务端说,好的,我知道你收到了。怎么样?这就是三次握手。哈哈!服务端,我们先声明本地要监听的地址和端口。__netListent,err:=net.Listen("tcp","local...
阅读全文

go语言交叉编译之win 64位系统编译 win 32位程序
2020-06-09 19:02 admin 编译win

在命令行窗口,输入命令goenv可以看到go环境注意当前的"setGOARCH=amd64"我们输入命令setGOARCH=386setGOARCH=386等待运行完毕。我们再用goenv检查一下已经是setGOARCH=386了这时候,紧接着gobuild***.go你的go程序就好了。然后你就可以得到一个win32...
阅读全文

52. Socket Server 自定义协议的简单实现
2020-06-09 19:02 admin 自定义Socket

在Server和Client通讯中,由于网络等原因很有可能会发生数据丢包的现象。如果数据确实,服务端接收的信息不完整,就会造成混乱。我们就需要在Server和Client之间建立一个通讯协议,通过协议中的规则,判断当前接收到的信息是否完整。根据信息的完整情况,采取不同的处理方法。通讯协议protocol的核心就是设计一...
阅读全文
顶部 底部