随笔分类 - Go
Go相关
摘要:一个比特(bit)可以是0,或者是1,8个比特(bit),组成一个字节(byte)。全为0时代表数字0,全为1时代表数字255。 一个字节可以表示256个数字,两个字节可以表示65536个数字。 更多的字节,可以有更多的组合,就可以表示更大的数值范围。 整数可以这么存,那字符呢?一堆二进制的0和1,
阅读全文
摘要:在Go语言并发编程中,用一个goroutine来处理一个任务,而它又会创建多个goroutine来负责不同子任务的场景非常常见。如下图 这些场景中,往往会需要在API边界之间以及过程之间传递截止时间、取消信号或与其它请求相关的数据 谁是性能卡点呢?得通知它们任务取消了。 这时候就可以使用Contex
阅读全文
摘要:安装Redis客户端 Go语言中使用第三方库https://github.com/go-redis/redis连接Redis数据库并进行操作。使用以下命令下载并安装: go get github.com/go-redis/redis/v8 注:导入时指定了版本v8,忽略版本是一个常见错误 连接red
阅读全文
摘要:对于文件,我们并不陌生,文件是数据源(保存数据的地方)的一种,比如大家经常使用的word文档,txt文件,Excel文件...等等都是文件。文件最主要的作用就是保存数据,它既可以保存一张图片,也可以保存视频,声音...... 文件在程序中是以流的形式来操作的。 流:数据在数据源(文件)和程序(内存)
阅读全文
摘要:当你在浏览器中输入URL时,实际上是在发送一个对Web页面的请求。该请求被发送到服务器。服务器的工作是获取适当的页面并将其作为响应发送回浏览器。 在Web的早期,服务器通常读取服务器硬盘上HTML文件的内容并将该HTML发送回浏览器。 但今天,服务器更常见的是与程序通信来完成请求,而不是读取文件。这
阅读全文
摘要:[TOC] 概述 简而言之,所谓并发编程是指在一台处理器上“同时”处理多个任务。 随着硬件的发展,并发程序变得越来越重要。Web服务器会一次处理成千上万的请求。平板电脑和手机app在渲染用户画面同时还会在后台执行各种计算任务和网络请求。即使是传统的批处理问题 读取数据,计算,写输出 现在也会用并发来
阅读全文
摘要:流程分析 借助TCP完成文件的传输,基本思路如下: 1. 发送方(客户端)向服务端发送文件名,服务端保存该文件名。 2. 接收方(服务端)向客户端返回一个消息ok,确认文件名保存成功。 3. 发送方(客户端)收到消息后,开始向服务端发送文件数据。 4. 接收方(服务端)读取文件内容,写入到之前保存好
阅读全文
摘要:[TOC] 概述 网络协议 从应用的角度出发,协议可理解为“ 规则 ”,是数据传输和数据的解释的规则。假设,A、B双方欲传输文件。规定: 第一次,传输文件名,接收方接收到文件名,应答OK给传输方; 第二次,发送文件的尺寸,接收方接收到该数据再次应答一个OK; 第三次,传输文件内容。同样,接收方接收数
阅读全文
摘要:Go语言中有个概念叫做goroutine, 这类似我们熟知的线程,但是更轻。 以下的程序,我们串行地去执行两次loop函数: go package main import "fmt" func main() { loop() loop() } func loop() { for i := 0; i
阅读全文
摘要:如果你看过 Go 语言标准库,应该有见到过,有一些函数只有签名,没有函数体。你有没有感觉到很奇怪?这到底是怎么回事?我们自己可以这么做吗?本文就来解密它。 首先,函数肯定得有实现,没有函数体,一定是在其他某个地方。Go 中一般有两种形式。 函数签名使用Go,然后通过该包中的汇编文件来实现它 比如,在
阅读全文
摘要:[TOC] strings包实现了用于操作字符的简单函数。 func EqualFold 判断两个utf 8编码字符串(将unicode大写、小写、标题三种格式字符视为相同)是否相同。 示例: HasPrefix 判断s是否有前缀字符串prefix。 示例: func HasSuffix 判断s是否
阅读全文
摘要:[TOC] 结构体转json 结构体转json示例: go package main import ( "encoding/json" "fmt" ) //用户 type User struct { UserName string NickName string Age int Birthday s
阅读全文
摘要:`WaitGroup`在go语言中,用于线程同步,单从字面意思理解,wait等待的意思,group组、团队的意思,WaitGroup就是指等待一组,等待一个系列执行完成后才会继续向下执行。 先说说WaitGroup的用途: 它能够一直等到所有的goroutine执行完成,并且阻塞主线程的执行,直到所
阅读全文
摘要:[TOC] 在上一节中我们介绍了 "数组和切片的实现原理" ,这一节会介绍 Golang 中的另一个集合元素 — 哈希,也就是 Map 的实现原理;哈希表是除了数组之外,最常见的数据结构,几乎所有的语言都会有数组和哈希表这两种集合元素,有的语言将数组实现成列表,有的语言将哈希表称作结构体或者字典,但
阅读全文
摘要:[TOC] 数组和切片是 Go 语言中常见的数据结构,很多刚刚使用 Go 的开发者往往会混淆这两个概念,数组作为最常见的集合在编程语言中是非常重要的,除了数组之外,Go 语言引入了另一个概念 — 切片,切片与数组有一些类似,但是它们的不同之处导致使用上会产生巨大的差别。 这里我们将从 Go 语言 "
阅读全文
摘要:[TOC] Go语言拥有一套单元测试和性能测试系统,仅需要添加很少的代码就可以快速测试一段需求代码。 性能测试系统可以给出代码的性能数据,帮助测试者分析性能问题。 单元测试 概述 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般要根据实
阅读全文
摘要:反射是指在程序运行期对程序本身进行访问和修改的能力。程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息。 支持反射的语言可以在程序编译期将变量的反射信息,如字段名称、类型信息、结构体信息等整合到可执行文件中,并给程序提供接口访问反射信息,这样
阅读全文
摘要:[TOC] 接口是什么? Go 语言不是一种 “传统” 的面向对象编程语言:它里面没有类和继承的概念。 但是 Go 语言里有非常灵活的 接口 概念,通过它可以实现很多面向对象的特性。接口提供了一种方式来 说明 对象的行为:如果谁能搞定这件事,它就可以用在这儿。 简单的说,interface是一组me
阅读全文
摘要:[TOC] 写过C/C++的同学都知道,调用著名的malloc和new函数可以在堆上分配一块内存,这块内存的使用和销毁的责任都在程序员。一不小心,就会发生内存泄露,搞得胆战心惊。 切换到Golang后,基本不会担心内存泄露了。虽然也有new函数,但是使用new函数得到的内存不一定就在堆上。堆和栈的区
阅读全文
摘要:[TOC] Go通过类型别名(alias types)和结构体的形式支持用户自定义类型,或者叫定制类型。一个带属性的结构体试图表示一个现实世界中的实体。结构体是复合类型(composite types),当需要定义一个类型,它由一系列属性组成,每个属性都有自己的类型和值的时候,就应该使用结构体,它把
阅读全文