首先复习一下go的基本语法
1:变量定义
val 变量 变量类型
val v1 int val v2 string val v3 [10]int //定义一个int10的数组 val v4 map[string] string //定义一个字典 key为string value也为string val v5 func(a int) int //v5指向一个函数
可以更简单一些,根据数据推断类型,如下:
v6 := 90 v7 := "hello china"
匿名变量 _,_,name := GetName()
如果调用一个方法返回多个变量,有些变量不使用,可以用——代替
常量 const mark = 1<<3
go server
package main /* *go server *can be serve as chat,game,file trans server *also can be serve as proxy server *surpport protocal :http tcp udp ftp https sock5 and so on * *************************************************************************/ import ( "fmt" "io" "log" ) import "net" const addr = "127.0.0.1:1080" const bufferSize = 4096 const maxConn = 1000 type bundle struct { clientNO int64 //current client num clients map[string]serverClient //store client in the map,key:client name,value: serverClient } func (s bundle) init() { } func (s bundle) startNewClient(clientName string, client serverClient) { s.clients[clientName] = client s.clientNO++ client.startProcess() } type serverClient struct { clientName string //client username Conn net.Conn //send chan []byte //reply io.Writer } //process client data func (client serverClient) startProcess() { data := make([]byte, bufferSize) n, _ := io.ReadFull(client.Conn, data) if n > 0 { fmt.Println(string(data[0:n])) } client.Conn.Write([]byte("hello ")) } //start server,when accept ,let gorountine to process func startServer() { b := new(bundle) b.clients = make(map[string]serverClient) a, err := net.ResolveTCPAddr("tcp", addr) if err != nil { log.Fatal(err) } l, err2 := net.ListenTCP("tcp", a) if err2 != nil { log.Fatal(err2) } for { c, err3 := l.Accept() if err3 != nil { log.Fatal(err3) } fmt.Print("new client from :") fmt.Println(c.RemoteAddr()) ch := serverClient{"1", c} go b.startNewClient(c.RemoteAddr().String(), ch) } } func main() { fmt.Println("start server") startServer() }
go client
package main import ( "fmt" "io" "log" ) import "net" const svrAddr = "127.0.0.1:1080" const clientAddr = "127.0.0.1:2090" const bufferSize = 4096 type clientBundle struct { conn net.Conn } func startClient(ch chan int) { conn, err := net.Dial("tcp", svrAddr) if err != nil { log.Fatal(err) } defer conn.Close() b := clientBundle{conn} //conn.Write([]byte("hello server")) io.WriteString(conn, "sfsf") //io.Writer. b.processRead() } func (b clientBundle) processRead() { //data := make([]byte, bufferSize) //n, _ := io.ReadFull(b.conn, data) //if n > 0 { // fmt.Println(data[:n]) //} } func main() { fmt.Println("start client") for { conns := make(chan int) startClient(conns) } //<-conns fmt.Println("finish send") }
相关推荐
Go语言网络编程-v0.0.1
golang网络编程,内容非常好,值得推荐,下载看看增加
go网络编程都是网络搜索到的资料.对于go开发者有点参考作用
go网络测试代码.go Go网络编程 【核心代码】 └── go网络测试代码.go go网络测试代码.go Go网络编程
Go语言网络编程-v0.0.2 Go语言网络编程-v0.0.2 Go语言网络编程-v0.0.2
Go网络编程:Go网络编程
Go 编程语言是一个使得程序员更加有效率的开源项目。 Go 是有表 达力、简洁、清晰和有效率的。它的并行机制使其很容易编写多核 和网络应用,而新 的类型系统允许构建有 性的模块化程序。Go 编译到机器码非常快速,同时...
同时交叉演练使用C++,Python和Go语言进行编码。 课程亮点 1.Google分布式系统专家陈硕担纲主讲 讲师历任摩根士丹利工程师及Google大规模分布式系统专家,同时也是开源C++ 网络库muduo 作者。 2.科学、系统的课程...
Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于...
Go语言的网络编程简介
1.网络编程概要.mkv2.一个TCP的简单实验.mkv3.课程内容大纲.mkv4.回顾基础的Sockets API.mkv5.TTCP代码概览.mkv6.使用TTCP进行网络传输性能测试.mkv7.阻塞IO下的TTCP实验.mkv8.TCP自连接.mkv9.扩展练习.mkv10.时钟...
《go语言中文教程及手册》包含了语言结构、基础语法、数据类型、语言变量、语言常量以及运算符等内容的介绍,可以让你快速进阶为go语言编程高手。简洁,一句废话没有,对于初学者可以让大家快速掌握GO语言!
本书首先介绍了Go语言的优秀特性、安装设置方法、工程结构、标准命令和工具、语法基础、数据...最后通过一个完整实例——网络爬虫框架进一步阐述Go语言的哲学和理念,同时分享作者在多年编程生涯中的一些见解和感悟。
包括以下书籍(html): go标准库文档 Go语言标准库 go指南 go_web编程 Go_基础教程 go语言圣经 Go入门指南 Go网络编程 深入解析Go 通过例子学习Go Go语言博客实践 (pdf书籍) Go 1.5 源码剖析.pdf Go 学习笔记 第四版....
网络编程是Go语言的一大亮点,课程将教授如何使用Go进行HTTP协议编程,创建RESTful API,并探索WebSocket和TCP/UDP编程。此外,课程还将涵盖测试与调试技巧,包括单元测试、基准测试和代码覆盖率分析,以及如何使用...
go微服务框架网络编程并行编程评论系统架构设计异常处理等网课,超d老师讲课