tcpsock for Golang】的更多相关文章

前记:本文所述的 tcpsock 库托管在 Github. Golang 中的 net 标准库已对 TCP 网络编程作了简洁(却很不简单)的封装,基本上,可直接通过引用其提供的相关接口开发简易的网络应用程序.但我想封装一套简单并提供简洁调用接口的 TCP 网络库(即 tcpsock),以达到所谓组件化的目的,如此用户只需调用几个非常简单的接口(包括设置回调函数等)就能较直观地处理网络收发等逻辑. 一开始设计 tcpsock 时,只打算提供 TcpServer 及 TcpConn 对象而没有考虑加…
golang 版本:1.12.9 简单的HTTP服务器代码: package main import ( "net/http" ) type TestHandler struct { str string } func (th *TestHandler)ServeHTTP(w http.ResponseWriter, r *http.Request){ w.Write([]byte(string(th.str+",welcome"))) } func main(){…
golang版本1.12.9:操作系统:readhat 7.4 golang的底层使用epoll来实现IO复用.netPoll通过pollDesc结构体将文件描述符与底层进行了绑定.netpoll实现了用户层面的与底层网络IO相关的goroutine的阻塞/非阻塞管理. 对netpoll的介绍按照这篇文章的思路按照tcp建链中的listen/accept/read/write/close动作详解过程. 下面以TCP为例完整解析TCP的建链/断链以及读写过程 listen流程: ListenTCP…
(原创出处为本博客:http://www.cnblogs.com/linguanh/) 前序: 因为打算自己搞个基于Golang的IM服务器,所以复习了下之前一直没怎么使用的协程.管道等高并发编程知识.发现自己的channel这块,也就是管道,实在是有些混乱.然后对着文档,边参照官网例子和在编译器测试,总结了下面这17个例子,设置为简短的片段,是为了免得混淆太多,阻碍理解.内含注释丰富,复制粘贴就能编译使用. 这里立个 flag,有错误欢迎指出,只要你跟着敲完这17个例子,channel的基础绝…
13年上半年接触了Golang,对Golang十分喜爱.现在是2015年,离春节还有几天,从开始学习到现在的一年半时间里,前前后后也用Golang写了些代码,其中包括业余时间的,也有产品项目中的.一直有想法写点Golang相关的总结或者感想,决定还是在年前总结下吧.注明下:我只是Golang的喜好者,不是脑残粉,也无意去挑起什么语言之争. 特性少,语法简单.GO是崇尚极简主义的,提倡少即是多.这点在它的Spec上尤其凸显,一下午的时间绝对可以看完.GO的特性很少,很多GO的使用者都反馈,GO的关…
TODO:Golang指针使用注意事项 先来看简单的例子1: 输出: 1 1 例子2: 输出: 1 3 例子1是使用值传递,Add方法不会做任何改变:例子2是使用指针传递,会改变地址,从而改变地址. 在看例子3: 输出: map[a:aa b:bb] map[b:world a:hello] 发现什么了,TestMap前面没有加*,没有用指针,怎么也会改变值呢?因为map提供键值功能,用起来像指针引用的类型.类似这种功能的类型还有,数组切片,channel,interface.Go语言包这种指针…
目录: 前序 效果图 简介 全部代码 前序: 接触 golang 不久,一直是边学边做,边总结,深深感到这门语言的魅力,等下要跟大家分享是最近项目 服务端 用到的图片压缩程序,我单独分离了出来,做成了 exe 程序,可以在 Window 下运行.也可以放到 Linux 环境下编译运行,golang 是一种静态.跨平台的语言. 效果图 - 压缩前 压缩后 开始main: showTips 做了一些有好提示的文字输出,execute 是核心,压缩函数的调用也在里面 func main() { sho…
今天在使用VSCode编写golang代码时,定义一个struct,扩展几个方法,如下: package storage import ( "fmt" "github.com/zsy619/gcommon" ) //ChunkFooter 块Footer type ChunkFooter struct { ChunkDataTotalSize int } //NewChunkFooter 创建一个ChunkFooter func NewChunkFooter(chu…
1.构造函数定义 构造函数 ,是一种特殊的方法.主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中.特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载. 而golang没有相关的构造函数定义,只能通过new来创建构造函数. 2.构造函数声明 声明一个struct结构: 声明一个全局函数,返回*struct ok,到此已经构造函数定义完毕…
TODO:Golang语言TCP/UDP协议重用地址端口 这是一个简单的包来解决重用地址的问题. go net包(据我所知)不允许设置套接字选项. 这在尝试进行TCP NAT时尤其成问题,其需要在同一TCP端口上进行侦听和拨号的过程. 这个包使我有可能实现这个功能. 这是一个非常小众的用例,但也许这个软件包可以随着时间的推移变得更普遍. 此包允许从同一TCP端口侦听和拨号:不能使用同一UDP端口监听,但可以监听同一UDP端口. 这意味着设置了以下sockopts: syscall.SO_REUS…
整理了一下,网上关于golang的安装有三种方式(注明一下,我的环境为CentOS-6.x, 64bit) 方式一:yum安装(最简单) rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm yum install golang 方式二:源码安装: wget http://go.googlecode.com/files/go1.2.linux-amd64.tar.gz tar -xvf…
在c#.java等高级语言中,经常会用到枚举类型来表示状态等.在golang中并没有枚举类型,如何实现枚举呢?首先从枚举的概念入手. 1.枚举类型定义 从百度百科查询解释如下:http://baike.baidu.com/link?url=Lrq57-YIZJ35grERvdg2kh7lfGfxvvLCVsNBMAqjBUOQX3CJUYnJp-9oZ2-rf3JGMqL3e4RbnSRQWs_5nmaI6K 枚举类型在C#或C++,java,VB等一些计算机编程语言中是一种基本数据类型而不是构…
iota是golang语言的常量计数器,只能在常量的表达式中使用. iota在const关键字出现时将被重置为0(const内部的第一行之前),const中每新增一行常量声明将使iota计数一次(iota可理解为const语句块中的行索引). 使用iota能简化定义,在定义枚举时很有用. 举例如下: 1.iota只能在常量的表达式中使用. fmt.Println(iota) 编译错误: undefined: iota 2.每次 const 出现时,都会让 iota 初始化为0.[自增长] con…
我们可以很容易将一个golang程序转变成汇编语言. 比如我写了一个main.go: package main func g(p int) int { return p+1; } func main() { c := g(4) + 1 _ = c } 使用命令: GOOS=linux GOARCH=386 go tool compile -S main.go >> main.S 我们就获取了main.S是main.go的汇编版本. "".g t=1 size=16 valu…
The Laws of Reflection 原文地址 第一次翻译文章,请各路人士多多指教! 类型和接口 因为映射建设在类型的基础之上,首先我们对类型进行全新的介绍. go是一个静态性语言,每个变量都有静态的类型,因此每个变量在编译阶段中有明确的变量类型,比如像:int.float32.MyType... 比如: type MyInt int var i int var j MyInt 变量i的类型为int,变量j的类型为MyInt,变量i.j具有确定的类型,虽然i.j的潜在类型是一样的,但是在…
网上目前还找不到完整的mac下golang环境配置支持,本人配置成功,现在整理分享出来. mac最好装下xcode,好像有依赖关系安装Homebrew打开终端窗口, 粘贴脚本执行/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 安装go语言最新版,去官网 https://golang.org/dl/  下载,需要挂科学上网 推荐一个 58j…
在使用Golang做Web开发时,有时候渲染出来的模板在前台显示时会出现一些奇怪的空白换行,具体特征就是查看css样式表并没有相关定义的空白部分. 分析: 查看出现问题页面的网页源代码,复制空白换行部分转码为Unicode编码,发现其中包含了\u2028这样的字符[图一]. [图一] 另外,直接在浏览器检查里边的html选择Edit as html,也可发现在空白处存在小红点,鼠标移上会直接显示该字符是\u2028[图二].查阅资料发现,这样的换行符在JavaScript中并不支持. [图二]…
Golang, 以17个简短代码片段,切底弄懂 channel 基础 (原创出处为本博客:http://www.cnblogs.com/linguanh/) 前序: 因为打算自己搞个基于Golang的IM服务器,所以复习了下之前一直没怎么使用的协程.管道等高并发编程知识.发现自己的channel这块,也就是管道,实在是有些混乱.然后对着文档,边参照官网例子和在编译器测试,总结了下面这17个例子,设置为简短的片段,是为了免得混淆太多,阻碍理解.内含注释丰富,复制粘贴就能编译使用. 这里立个 fla…
由于对Docker+kubernetes的使用及持续关注,要理解这个平台的原理,势必需要对golang有一定的理解,基于此开始利用业余时间学习go,基础语法看完之后,搭建开发环境肯定是第一步,虽然能g到一大把,go中文社区也有相关帖子很多,但这里还是记录一下方便查找,同时在搭建过程中也遇到两个g出来的帖子没提到的问题,一并记录. Step1:准备各种安装包 1: Visual Studio Code 目前最新版本1.7.2,下载地址:https://code.visualstudio.com/D…
golang的map类型是一个比较特殊的类型,不同于int, string, byte这样的基本类型,在经过一番探究之后得出了一些结论: 1.golang的map类型虽然是内置类型,但和基本类型有很大区别,更像是一个指针,因为他有着跟指针一样行为. 下面这段代码的第三次输出时,尝试了用通过arr[1].c["aaa"] = "lalala",这种方式去修改这个map元素,发现arr[0]同时被改变了.这也就说明了arr里面保存的其实是指向一块内存的指针,所以在通过a…
Golang 语法学习笔记 包.变量和函数. 包 每个 Go 程序都是由包组成的. 程序运行的入口是包 main. 包名与导入路径的最后一个目录一致."math/rand" 包由 package rand 语句开始. import ( "fmt" "math/rand" ) 用圆括号组合了导入,是"打包"导入语句. 在 Go 中,首字母大写的名称是被导出的. 函数 函数可以没有参数或接受多个参数.注意类型在变量名 之后. fu…
go语言在开发效率和运行效率中的优势让很多人青睐,所以有倾向打算转向go语言的开发. 下面介绍在Mac OS X中golang的开发环境配置. 1.安装brew brew是一个mac下的由ruby开发的包管理系统,其官网是http://brew.sh.你只要在你的终端中执行 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)” 便可将其安装完成. 安装完之后输入命令 br…
资料来源 https://github.com/luciotato/golang-notes/blob/master/OOP.md?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io Golang中的概念 Golang中引入了在Golang中独有的struct 和 interface,其意义和传统语言中的不同. 概念清单 Golang Classic OOP struct class with fields, only n…
这几天深入的研究了一下golang 的协程,读了一个好文 http://mp.weixin.qq.com/s?__biz=MjM5OTcxMzE0MQ==&mid=2653369770&idx=1&sn=044be64c577a11a9a13447b373e80082&chksm=bce4d5b08b935ca6ad59abb5cc733a341a5126fefc0e6600bd61c959969c5f77c95fbfb909e3&mpshare=1&sce…
原文地址:http://tchen.me/posts/2014-01-27-golang-chatroom.html?utm_source=tuicool&utm_medium=referral 看了一上午写得很好,可以拿来试试刀 最近在team内部培训golang,目标是看看golang能否被C工程师快速掌握.我定了个一个月,共计20小时的培训计划,首先花10个小时(两周,每天1小时)让大家掌握golang的基本要素,能写一些入门级的程序,之后再花两周时间做一个1000行代码规模的Proof…
golang reflect go语言中reflect反射机制.详细原文:地址 接口值到反射对象 package main import ( "fmt" "reflect" ) func main() { var x int = 1 fmt.Println("type: ", reflect.TypeOf(x)) } type: int TypeOf函数的定义如下,参数为接口类型,返回值为类型 func TypeOf(i interface {}…
TODO:Golang Linux进程退出说明 Golang使用os.Exit(code)进程退出导致当前程序退出并返回给定的状态代码.传统上,code代码为零表示成功退出,非零错误退出. syscall.Exit可以调用不同平台的操作系统的退出. code值为0-255,当code为非0时,os.Exit(code)会返回,对应值当状态码 exit status 128 当code为0,则正常退出.code值可自定义对应当意义进行相应业务场景使用.code的值在自然数是按从0至255的倍数进行…
TODO:Golang UDP连接简单测试慎用Deadline UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范.UDP在IP报文的协议号是17.在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议.在OSI模型中,在第四层--传输层,处于IP协议的上一…
Golang与C#之switch区别 Go是Google开发的一种编译型,可并行化,并具有垃圾回收功能的编程语言. C#是微软公司发布的一种面向对象的.运行于.NET Framework之上的高级程序设计语言. 开发过程虽然主要用的不是C#,但是开发过程难免会阅读到C#代码,下文是两种域名switch的比较 1.Go的switch: 输出: 2.C#的switch 输出: 总结,在Go中每个key对应一个case,没有对应的case,则执行default,没有default这不执行代码,在同一个…
golang获取程序运行路径: /* 获取程序运行路径 */ func getCurrentDirectory() string { dir, err := filepath.Abs(filepath.Dir(os.Args[0])) if err != nil { beego.Debug(err) } return strings.Replace(dir, "\\", "/", -1) }…