当前位置: 首页 > news >正文

北京好网站制作公司wordpress免费电子商务插件

北京好网站制作公司,wordpress免费电子商务插件,wordpress编辑器字体,安阳网络教研平台官网文章目录 前言接口与方法并发-协程项目管理bufio包使用其他代码 前言 上一篇#xff0c;我们通过go语言的hello-world入门#xff0c;搭建了go的编程环境#xff0c;并对go语法有了简单的了解。本文实现一个go的tcp服务端。借用这个示例#xff0c;展示接口、协程、bufio的… 文章目录 前言接口与方法并发-协程项目管理bufio包使用其他代码 前言 上一篇我们通过go语言的hello-world入门搭建了go的编程环境并对go语法有了简单的了解。本文实现一个go的tcp服务端。借用这个示例展示接口、协程、bufio的使用与简单的go项目管理 本文代码见laboratory/14-go-tcp 接口与方法 首先我们需要了解go中接口的语法。首先阅读欢迎使用 Go 指南-方法和接口, 了解基本使用。然后到Go 语言接口-菜鸟教程中看一个简单的示例。最后有个理解 Go interface 的 5 个关键点 (吐槽示例中的变量命名太烂。类似的也可以阅读Go Interfaces 使用教程), 来个小结。 好了有了上面的基础后我们来考虑编程。 假定这里需要实现一个tcp的服务端。拓展考虑下实现一个udp服务端实现一个http服务端实现一个socks5服务端。 从C的角度来考虑创建一个server类其中包含一些虚函数。需要tcp服务器则创建一个继承server类的tcp子类需要udp服务器则创建一个继承server类的udp子类需要http服务端则创建继承tcp类的http子类需要socks5服务器则创建继承tcp和udp类的socks5子类 事情到了go中则有所不同。go中没有类与继承。go不是根据类型可以容纳的数据类型来设计抽象而是根据类型可以执行的操作来设计抽象。interface 是一种具有一组方法的类型。如果一个类型实现了一个 interface 中所有方法我们说类型实现了该 interface。 代码如下。修改自go入门指南-15.1. tcp 服务器、Go语言实现TCP服务端和客户端 package server// tips1: 包中需要导出的内容,需要大写字母开头import (bufiofmtnetstrconv )type Server interface {start() }type TcpServer struct {Ip stringPort int }func (server *TcpServer) Start() {fmt.Println(tcp server start...)// 创建 listenerlistener, err : net.Listen(tcp, server.Ip:strconv.Itoa(server.Port))if err ! nil {fmt.Println(Error listening:, err.Error())return}// 监听并接受来自客户端的连接for {conn, err : listener.Accept()if err ! nil {fmt.Println(Error accepting, err.Error())return}go tcpConnProcess(conn)} }func tcpConnProcess(conn net.Conn) {defer conn.Close()// reader : bufio.NewReader(conn)for {reader : bufio.NewReader(conn) // 错误-应该写在外层var buf [128]byten, err : reader.Read(buf[:])if err ! nil {fmt.Println(Error read, err)break}recvStr : string(buf[:n])fmt.Println(receive:, recvStr)conn.Write([]byte(recvStr))} }并发-协程 上面代码中对于协程的使用倒是很简单使用协程来处理每个连接。下面我们阅读些关于协程的链接。 首先了解基本的goroutine 和 channel的基本概念欢迎使用 Go 指南-并发、Go by Example 中文版: 协程 看过上面任意一个链接我们可以了解到下面内容。协程(goroutine) 是轻量级的执行线程。通道(channels) 是连接多个协程的管道。你可以从一个协程将值发送到通道然后在另一个协程中接收。默认情况下通道是 无缓冲 的这意味着只有对应的接收- chan 通道准备好接收时才允许进行发送chan -。 有缓冲通道 允许在没有对应接收者的情况下缓存一定数量的值。我们可以使用通道来同步协程之间的执行状态。Go 的 选择器select 让你可以同时等待多个通道操作。 将协程、通道和选择器结合是 Go 的一个强大特性… 上面是协程和通道的基本概念更多的可以阅读下面链接 Go语言协程使用最佳实践: 处理协程崩溃除了使用channel进行协程控制sync.WaitGroup也可用来协程的通过(sync本身和协程关系不大?)。 Go编程时光-4.9 学习 Go 协程巧妙利用 Context协程的退出。 看到协程的使用直觉上来说它可能是一个用户线程。进程是不同线程之间共享资源的集合线程是内核调度的单位。假设一个线程的时间片没有用完但是又被一个读取调用阻塞。如果此时这个内核线程中有多个用户线程则可以在用户层进行切换继续占用CPU进行运行。详细见linux进程 项目管理 本文的示例代码使用module进行管理。我在这个上面踩了些坑。项目管理的介绍可以翻看下第三章项目管理。以本文的示例为例简单顺下流程。 go mod init go-tcp-demo初始化一个Modules。这时候可以看到出现一个go.mod文件。它包含模块的引用路径最低的go版本要求依赖包。go-tcp-demo并充当模块中包导入路径的前缀的路径。一个模块中包含多个包(package)但通常只有一个main package。main package中的main函数是程序入口。但是一个mod下也可以有多个main package需要处于不同目录。import导入的是一个路径会导入该路径下所有的包。通常包名是所在目录的名称。变量和函数使用驼峰命名法。如果变量或者函数需要被包外引用变量的首字母需要大写。如果需要同时修改多个存在依赖关系的mod可以参考Go 1.18工作区模式最佳实践 bufio包使用 上面代码中给每个连接套一个用户层的缓冲区。因为从io读取数据可能是耗时/耗资源的操作。使用io用户层的缓冲区可以提高效率。 但使用不当可能也会带来一些问题。比如上面代码中当缓冲区存在超过128字节的时候更多的内容被舍弃。 bufio本身的源码相对比较简单可以阅读下。更多见golang-bufio、Go语言使用buffer读取文件 buffer 是缓冲器的意思Go语言要实现缓冲读取需要使用到 bufio 包。bufio 包本身包装了 io.Reader 和 io.Writer 对象同时创建了另外的 Reader 和 Writer 对象因此对于文本 I/O 来说bufio 包提供了一定的便利性。 其他代码 这里是调用package server创建一个tcp server。 package mainimport (go-tcp-demo/server )func main() {s : server.TcpServer{Ip: 127.0.0.1, Port: 10000}s.Start() }这里是客户端的代码。 package mainimport (bufiofmtnetos )func main() {conn, err : net.Dial(tcp, 127.0.0.1:10000)if err ! nil {fmt.Println(Error dial, err)return}defer conn.Close()inputReader : bufio.NewReader(os.Stdin)for {input, isPrefix, err : inputReader.ReadLine()if isPrefix || err ! nil {fmt.Println(The entered single line content is too long or there is an error, err)continue}_, err conn.Write(input)if err ! nil {fmt.Println(Error in conn write, err)continue}buf : [512]byte{}n, rerr : conn.Read(buf[:])if rerr ! nil {fmt.Println(Error in conn read, err)continue}fmt.Println(string(buf[:n]))} }
http://www.pierceye.com/news/853502/

相关文章:

  • 如何外贸网站推广wordpress默认主题哪个好
  • 设计网站推荐提升审美网站建设的公司
  • 张浦专业做网站网站建设案例百度云
  • 佛山网站如何制作网站建设公司哪家强
  • 韩城市网站建设编程培训机构加盟哪家好
  • 已备案网站更换域名广东工厂网站建设
  • 营销型网站有哪些特点建设官方网站的费用账务处理
  • 区域网站设计WordPress无法发布
  • html网站开发主要涉及哪些技术百度域名的ip
  • 织梦网站数据下载wordpress如何播放百度云视频
  • 建站的费用服务器搭建网站环境
  • 查看公司信息的网站旅游网站效果图
  • 娄底网站制作重庆专题片制作
  • 网站建设佰金手指科杰十七织梦淘客网站
  • 财务系统seo西安
  • 如何做好网站建设的关键重点网站地图那么建设
  • 打开山东城市建设职业学院网站自己网站做优化的有权利卖么
  • 境外电商网站建设sem推广优化
  • 五站合一自建网站制作网站用什么软件有哪些
  • 查法人信息的网站开发公司一季度汇报
  • 国外的购物网站有哪些安徽省住房和城乡建设厅官方网站
  • 网站策划需要什么能力网页游戏平台软件
  • phpmysql网站开发网络结构
  • 微官网和移动网站区别论坛网站建设多少钱
  • 怎么做公司网站优化凡科h5登录入口
  • 做电影网站如何推广方案房产网络平台
  • 站长工具 seo查询python爬数据做网站
  • 网站 底部医院网站建设的要求
  • asp网站静态化seo关键词排名优化软件怎么选
  • wordpress apache版本北京seo招聘