Go

GO实现Redis:GO实现Redis协议解析器(2)

本文实现Redis的协议层,协议层负责解析指令,然后将指令交给核心database执行 echo database用来测试协议层的代码 https://github.com/csgopher/go-redis RESP协议 RESP是客户端与服务端通信的协议,格式有五种:正常回复:以“+”开头,以“ ......
Redis

使用go语言实现并发网络爬虫

go语言做爬虫也是很少尝试,首先我的思路是看一下爬虫的串行实现,然后通过两个并发实现:一个使用锁,另一个使用通道 这里不涉及从页面中提取URL的逻辑(请查看Go框架colly的内容)。网络抓取只是作为一个例子来考察Go的并发性。 我们想从我们的起始页中提取所有的URL,将这些URL保存到一个列表中, ......
爬虫 语言 网络

GO实现Redis:GO实现TCP服务器(1)

本文实现一个Echo TCP Server interface/tcp/Handler.go type Handler interface { Handle(ctx context.Context, conn net.Conn) Close() error } Handler:业务逻辑的处理接口 H ......
服务器 Redis TCP

Go语言并发编程(2):channel 通道介绍和使用

一、简介 channel 不仅可以用于 goroutine 间进行安全通信,还可以用于同步内存访问。 而且 Go 社区强烈推荐使用 channel 通道实现 goroutine 之间的通信, 不要通过共享内存来通信,而应该通过通信来共享内存。 Go 从语言层面保证了同一时间只有一个 goroutin ......
通道 channel 语言

Go语言并发编程(4):sync包介绍和使用(下)-Once,Pool,Cond

sync包下:Once,Pool,Cond 一、sync.Once 执行一次 Once 简介 sync.Once 是 Go 提供的让函数只执行一次的一种实现。 如果 once.Do(f) 被调用多次,只有第一次调用会调用 f。 常用场景: 用于单例模式,比如初始化数据库配置 Once 提供的方法: ......
语言 sync Once Cond Pool

Go语言并发编程(3):sync包介绍和使用(上)-Mutex,RWMutex,WaitGroup,sync.Map

一、sync 包简介 在并发编程中,为了解决竞争条件问题,Go 语言提供了 sync 标准包,它提供了基本的同步原语,例如互斥锁、读写锁等。 sync 包使用建议: 除了 Once 和 WaitGroup 类型之外,大多数类型旨在供低级库程序使用。更高级别的同步最好用 channel 通道和通信来完 ......
sync WaitGroup RWMutex 语言 Mutex

go各框架的log日志

1.kratosLog: type Logger interface { Log(level Level, keyvals ...interface{}) error } type logger struct { logger Logger prefix []interface{} hasValue ......
框架 日志 log

Go语言学习——gin的使用1

gin作为Go语言中非常受欢迎的一个web后端框架有着十分好的性能表现和易用性。下面记录一下学习使用gin完成一个最简单的服务器程序: package main //声明所属的包 import "github.com/gin-gonic/gin" //导入gin框架的包 func sayHello( ......
语言学习 语言 gin

Go语言 是如何调用 chatGpt openai api 接口的 ?

Go语言 是如何调用 chatGpt openai api 接口的 ? 学习与分享 Go语言圈 2023-03-23 08:30 发表于广东 收录于合集#学Go语言哪些事儿161个 用编码工具,建议用最新版Goland,因为这里有正式版激活账号 https://web.52shizhan.cn/ac ......
接口 chatGpt 语言 openai api

Go语言:利用 TDD 逐步为一个字典应用创建完整的 CRUD API

前言 在数组这一章节中,我们学会了如何按顺序存储值。现在,我们再来看看如何通过键存储值,并快速查找它们。 Maps 允许你以类似于字典的方式存储值。你可以将键视为单词,将值视为定义。 所以,难道还有比构建我们自己的字典更好的学习 map 的方式吗? 正文 首先编写测试 在 dictionary_te ......
字典 语言 CRUD TDD API

go 标准包flag的基本用法

相关用法见代码 flag.Type() # 通过 flag.Type() 返回对应类型的指针,姐应用后使用该值 package main import ( "flag" "fmt" "time" ) func main() { // 通过 flag.Type() 返回对应类型的指针,姐应用后使用该值 ......
标准 flag go

Go web 一种常用的脚手架模板

Go web 使用Gin框架一个比较通用的脚手架模板。 代码地址:https://github.com/KpiHang/Go-Web-Learn-2/tree/master/web_app CLD分层 分层设计模式,如MVC为了能够对GUI类型的应用进行方便扩展,将程序划分为: 控制器(Contro ......
脚手架 模板 常用 web Go

Go HTTP编程

Go 语言标准库内建提供了 net/http 包,涵盖了 HTTP 客户端和服务端的具体实现,使得我们可以很方便地编写 HTTP 客户端或服务端的程序。 HTTP 服务端 示例: package main import ( "fmt" "net/http" ) //服务端编写的业务逻辑处理程序 —— ......
HTTP Go

go sort.Sort排序

package main import ( "fmt" "sort" ) type IntSlice []int func main() { int1 := IntSlice{3, 4, 1, 2, 9, 0, 8, 2, 6} sort.Sort(int1) fmt.Println(int1) } ......
Sort sort go

version "go1.16.4" does not match go tool version "go1.20.2"

1、访问golang中国官网,下载适用于Linux的Go1.20.2安装包。 2、打开终端并导航到下载的安装包所在的目录。 3、解压缩安装包,例如:tar -C /usr/local -xzf go1.20.2.linux-amd64.tar.gz。 4、将Go二进制文件的路径添加到PATH环境变量 ......
quot version go1 go match

go 网络编程

1.网络编程基本介绍 Golang的主要设计目标之一就是面向大规模后端服务程序,网络通信这块是服务端程序必不可少也是至关重要的一部分 网络编程有两种: 1)TCP socket编程,是网络编程的主流。底层是基于TCP/IP协议的,例如QQ等客户端。 2)b/s结构(Browser/Server,浏览 ......
网络编程 网络 go

Go语言:利用 TDD 驱动开发测试 学习结构体、方法和接口

环境安装: (新手向)在Linux中使用VScode编写 "Hello,world"程序,并编写测试-Ubuntu20.4 上一篇相关随笔: Go语言:利用 TDD 测试驱动开发帮助理解数组与动态数组(切片)的区别 正文👇 先来点简单的: 假设我们需要编程计算一个给定高和宽的长方形的周长。我们可以 ......
接口 语言 结构 方法 TDD

Go's work-stealing scheduler 新建goroutine 与饥饿模式

小结: 1、多核处理器 从其他核的任务队列中偷取任务 新建goroutine 与饥饿模式 Go's work-stealing scheduler · rakyll.org https://rakyll.org/scheduler/ Go's work-stealing scheduler Sun, ......

使用 go tool pprof 跟踪优化 cpu 和 内存

搜了一些文章来看 实在是没有重点,自己归纳一下。 其实直接看文档已经比较清楚但是文档部分似乎没有一些介绍如何看火焰图之类的细节,这里一并归纳总结一下。 收集性能数据 在看数据之前首先要收集数据,我们需要在需要测试性能的代码中插入 pprof 库和启动一个 http server。 这个 server ......
内存 pprof tool cpu go

go结构体随笔

1.类型定义和类型别名 //类型定义 定义了自己 可以给自定义类型添加方法 type NewInt int func (i *NewInt) getInt() int { return 100 } //类型别名 就是个int类型 换了个名字 叫MyInt类型 type MyInt = int fun ......
随笔 结构

IOS 不支持this.$router.go解决办法

在使用Vue路由实例对象$router.go进行页面切换时ios是不起作用得,可以使用 location.href = "javascript:history.go(-2);" 解决 ......
办法 router this IOS go

Go 并发编程(二):锁、Select、Context、定时器

Sync(锁) 在前面讲 channel 的时候,我们说到在 Go 语言并发编程中,倡导使用通信共享内存,不要使用共享内存通信,即 goroutine 之间尽量通过 channel 来协作。 而在其他的传统语言中,都是通过共享内存加上锁机制来保证并发安全的,同样 Go 语言也提供了对共享内存并发安全 ......
定时器 Context Select Go

调试 Go 中简单的内存泄漏

内存泄漏 是一种即使当某块内存不再使用之后仍然没有被释放而产生的 bug。通常来说,它们是非常明显的,高度可见的,这使得它们成为学习程序调试的最佳选择。Go 是一门特别适合识别定位内存泄漏的语言,因为它有一套强大的工具链,这套工具链配备了非常强大的工具(pprof),它可以非常轻松地查明内存的使用情 ......
内存 Go

基于go/pprof用于常用排序场景下的性能分析

我们常用的排序常见的有: 冒泡 选择 插入 希尔 快排 归并 堆排 计数 基数 桶排序 关于排序算法的时间复杂度、空间复杂度这里不加赘述,今天主要分享通过 go 性能分析工具 pprof 看看几种常见排序的性能情况。 sort.go 点击查看代码 package sort import "math" ......
性能分析 场景 性能 常用 pprof

go语法基础

Go语言语法类似于C语言,因此熟悉C语言及其派生语言([C++]、[C#]、Objective-C 等)的人都会迅速熟悉这门语言。 C语言的有些语法会让代码可读性降低甚至发生歧义。Go语言在C语言的基础上取其精华,弃其糟粕,将C语言中较为容易发生错误的写法进行调整,做出相应的编译提示。 去掉循环冗余 ......
语法 基础

go语言的并发

并发编程在当前软件领域是一个非常重要的概念,随着CPU等硬件的发展,我们无一例外的想让我们的程序运行的快一点、再快一点。Go语言在语言层面天生支持并发,充分利用现代CPU的多核优势,这也是Go语言能够大范围流行的一个很重要的原因。 基本概念 首先我们先来了解几个与并发编程相关的基本概念。 串行、并发 ......
语言

go 常用设计模式-创建型模式

本次分享的创建型模式主要包括: 单例模式 简单工厂模式 工厂模式 抽象共工厂模式 1.单例模式 package singleton import "sync" /* 创建型模式 */ var ( instance Singleton once sync.Once ) type Singleton s ......
模式 设计模式 常用 go

go 常用设计模式-行为型模式

本次分享的行为型模式,主要包含: 责任链模式 策略模式 观察者模式 模板模式 访问者模式 1.责任链模式 package chainOfResponsibility import "fmt" /* 行为模式: 通过账目报销的例子说明,不同的级别领导,其权限不同,如100元级别,100元级别等 */ ......
模式 设计模式 常用 行为 go

go 常用设计模式-结构型模式

本次分享结构型模式,主要包括: 代理模式 装饰器模式 适配器模式 享元模式 1.代理模式 package proxy import "fmt" /* 结构型模式 代理,代表打理,以他人的名义代表委托人打理其本职工作之外或不所能及的事务,达成合作关系并更高效地促成事务完成的目的。 强调的是对被代理对象 ......
结构型 模式 设计模式 常用 结构

go mongo 设置查询结果只返回

filter := bson.D{{"字段1", 1113}, {"字段2", 1111}} // 设置查询结果只包含 _id 字段 opts := options.FindOne().SetProjection(bson.M{"_id": 1}) err := mongodb.Conn().Col ......
结果 mongo go