拥有golang标签的文章

【Golang】网络开发:net包(TCP和UDP)

之前写出了2个简单的demo,这里阅读以下完整的手册 TCP type TCPAddr```shelltype TCPAddr struct { IP IP Port int Zone string // IPv6范围寻址域}```TCPAddr代表一个TCP终端地址。1. `TCPAddr` 是一个TCP地址结构体`func ResolveTCPAddr(net, addr string) (TCPAddr, e
阅读全文

【Golang】网络开发:UDP

UDPUDP就比较简单了,因为UDP是有消息边界的,所以不需要处理粘包,只需要关心怎么收数据发数据即可 net包UDP相关函数在net包中有专门分类```shelltype UDPConn struct { // 内含隐藏或非导出字段}```客户端使用`func DialUDP(net string, laddr, raddr UDPAddr) (UDPConn, error)`服务端使用`func ListenUDP(net str
阅读全文

【Golang】网络开发:TCP粘包

粘包说到TCP就必须得处理它的粘包了。关于粘包的知识可以查看往期的内容: 制造一个粘包情景粘包的产生情况就是TCP发送数据太快在缓冲区积累导致的。所以要制造一个粘包,只要将之前的发送数据操作模拟并发多次即可修改```shell_, err = conn.Write(byte(cname + ": " + inputInfo)) // 发送数据```为```shellfor i := 0; i < 10; i++ { _, e
阅读全文

【Golang】网络开发:TCP

有关网络编程网络编程在之前的文章中有提过,可以自行查看: 使用GO完成TCP通信 net包有关网络通信的相关处理需要使用到 `net` 包,包中内容比较多,下次再详细阅读,先来创建简单的tcp和udp网络通信吧net包提供了可移植的网络I/O接口,包括TCP/IP、UDP、域名解析和Unix域socket。虽然本包提供了对网络原语的访问,大部分使用者只需要Dial、Listen和Accept函数提供的基本接口;以及相关的Conn和Liste
阅读全文

【Golang】并发之锁

锁众所周知,并发需要处理的最大的问题就是锁,因为并发情况下可能会重复访问同一个变量导致变量污染,这个时候就需要用锁来保证变量不会被重复操作 变量污染的例子首先串行的执行一个加法运算:```shellvar x intfunc main() { add() add() add() fmt.Println(x) // 150015000}func add() { for i := 1; i <= 10000; i++ { x
阅读全文

【Golang】并发之channel

channel通道其实在swoole中也说过了。其实两者是差不多的,毕竟swoole是模仿golang写的一个扩展。上一篇中说到了协程,但是单纯为了协程而协程的情况很少,大部分情况下协程内需要和协程外或者其他协程交互的。在swoole中有提过,协程之间互相交互可以使用以下3种方式:1. 共享内存1. 使用系统消息队列1. 使用通道这里最不推荐的就是使用共享内存了,因为多协程使用共享内存进行数据交互很容易出现内存污染的问题。消息队列本篇也直接跳过,这里我们单
阅读全文

【Golang】并发之协程

协程golang之所以开始愈发流行,就是因为他原生支持协程。至于协程是什么,在swoole中也提到过:协程就是用户级的线程。有了协程就可以在一个进程中跳过io的等待时间进行异步回调,更有效的利用cpu。所以,协程非常适合io密集型的业务场景并发,例如文件读写,数据库读写,频繁的网络访问等。在java/c++中我们要实现并发编程的时候,我们通常需要自己维护一个线程池,并且需要自己去包装一个又一个的任务,同时需要自己去调度线程执行任务并维护上下文切换,这一切通常会耗费程序员大量的心智
阅读全文

【从零开始捡起GO】14. 结构体和json

jsonjson格式可以算我们日常最常用的序列化格式之一了,在开发中,经常需要将json和结构体互相转换。go作为一个强类型语言,在转换上需要注意一些事项和设置,今天来总结一下常见的json和结构体之间互相转换的要点。 json转化的相关包和方法go语言为json转化提供了一个`json`包:`func Marshal(v interface{}) (byte, error)`使用`json.Marshal`将一个数据转化为json`func Unmars
阅读全文

【GO的标准包】7. strconv

strconv strconv包实现了基本数据类型和其字符串表示的相互转换。简单的说就是其他数据类型和字符串之间互相转换的包 字符串的某些处理`func IsPrint(r rune) bool` 返回一个字符是否是可打印的,和unicode.IsPrint一样,r必须是:字母(广义)、数字、标点、符号、ASCII空格。`func CanBackquote(s string) bool`返回字符串s是否可以不被修改的表示为一个单行的、没有空格和tab之
阅读全文

【GO的标准包】6. log

Logger```shellconst ( // 字位共同控制输出日志信息的细节。不能控制输出的顺序和格式。 // 在所有项目后会有一个冒号:2009/01/23 01:23:23.123123 /a/b/c/d.go:23: message Ldate = 1 << iota // 日期:2009/01/23 Ltime // 时间:01:23:23 Lmicrosec
阅读全文