Golang学习
文章平均质量分 80
Golang学习
catkin_ws
后端研发工程师
展开
-
【操作系统】同步互斥与Golang互斥锁实现
使用临界区的思想,问题就可以较好的解决。有了临界区的代码之后,就可以确保任何时候只有一个对象在临界区中执行,其他对象在外面等待,知道临界区中的对象离开,其他进程中的一个会进入临界区去执行。执行这种可屏蔽中断的指令,只是把自身的响应中断的能力屏蔽了,并不意味着也将其他cpu的响应中断能力屏蔽,所以其实其他的cpu还是可以继续产生中断,所以在多cpu的情况下是无法解决互斥问题的。有些看上去是原子操作,实际不是,连x++这样简单的语句,实际上是由3条指令造成的,有时候甚至连条单条机器指令都不是原子的。原创 2024-09-02 15:43:23 · 1442 阅读 · 1 评论 -
Go设计模式学习——开闭原则
1 开闭原则对扩展开放、修改关闭 (Open Closed Principle)software entities (modules, classes, functions, etc.) should be open for extension , but closed for modification直译: 软件实体(模块、类、方法等)应该 “ 对扩展开放、对修改关闭 ”。白话: 添加一个新的功能应该是,在已有代码基础上扩展代码(新增模块、类、方法等),而非修改已有代码(修改模块、类、方法等)。.原创 2022-01-12 12:12:43 · 489 阅读 · 0 评论 -
Go设计模式学习——单一职责原则
1单一职责原则1.1 含义单一职责原则 (Single Responsibility Principle)(SRP)A class or module should have a single responsibility.一个类或者模块只负责完成一个职责(或者功能)。把模块看作比类更加粗粒度的代码块,模块中包含多个类,多个类组成一个模块1.2 理解一个类只负责完成一个职责或者功能。不要设计大而全的类,要设计粒度小、功能单一的类。单一职责原则是为了实现代码高内聚、低耦合,提高代码的复用性、可原创 2021-12-29 22:02:51 · 428 阅读 · 0 评论 -
go语言实现设计模式—单例模式
go语言实现设计模式—单例模式1 背景2 什么是单例3 应用场景&优势4 如何创建单例4.1 饿汉式4.2 懒汉式-非线程4.3 懒汉式-线程安全4.4 双重检查4.5 once优雅写法5 其他1 背景2 什么是单例3 应用场景&优势4 如何创建单例4.1 饿汉式4.2 懒汉式-非线程4.3 懒汉式-线程安全4.4 双重检查4.5 once优雅写法5 其他...原创 2021-08-02 17:25:14 · 1042 阅读 · 0 评论 -
go context实现多协程树型调用
背景在实际编程中goroutine会拉起新的goroutine,新goroutine又会拉出另一个新goroutine,单纯使用退出通知机制会比较复杂,采用context标准库的做法,对“树型”的goroutine调用,提供退出通知和元数据传递。实现例子package mainimport ( "context" "fmt" "time")type otherContext struct { context.Context}func work(ctx context.Conte原创 2021-06-18 20:37:07 · 281 阅读 · 0 评论 -
goroutine计算自然数的和——拆分task、channel、WaitGroup、线程池、done
goroutine计算自然数的和——拆分task、channel、WaitGroup功能程序逻辑代码功能计算100个自然数的和。程序逻辑InitTask函数构建task并发送到task通道。分发任务函数DistributeTask为每个task启动goroutine处理任务,并等待其处理完成,然后关闭通道。ProcessResult函数读取并统计所有的值。这几个函数在不同的goroutine中运行,它们通过通道和sync.WaitGroup进行通信与同步。整个流程如图:代码packa原创 2021-06-16 16:51:03 · 300 阅读 · 0 评论 -
go操作mysql数据库
go操作mysql数据库0 简介1 获取数据库连接2 增删改操作3 单元测试4 查询一条数据5 获取多条记录总代码0 简介Go 语言中database/sql包定义了对数据库的一系列操作database/sql/driver包定义了应被数据库驱动实现的接口,这些接口会被 sql 包使用。但是 Go 语言没有提供任何官方的数据库驱动,所以我们需要导入第三方的数据库驱动。连接数据库之后对数据库操作的大部分代码都使用 sql 包1 获取数据库连接package utilsimport (原创 2020-12-06 20:32:27 · 809 阅读 · 0 评论 -
go搭建HTTP服务-http基础
go搭建HTTP服务-http基础1 HTTP 协议简介2 发展历程3 HTTP 协议的会话方式4 HTTP1.0 和 HTTP1.1 的区别5 报文5.1 报文格式5.2 请求报文5.3 响应报文6 响应状态码1 HTTP 协议简介HTTP 超文本传输协议 (HTTP-Hypertext transfer protocol),是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于 1990年提出,经过几年的使用与发展,得到不断地完善和扩展。它是一种详细规定了浏览器原创 2020-12-04 21:53:17 · 1980 阅读 · 0 评论 -
多种方法实现Web 服务器的创建-采用go语言
Web 服务器的创建-采用go语言介绍1 使用默认的多路复用器(DefaultServeMux)1.1 使用处理器函数1.2 使用处理器处理请求1.3 通过 Server 结构对服务器进行更详细的配置2 通过 NewServeMux 方法创建多路复用器介绍Go 提供了一系列用于创建 Web 服务器的标准库,而且通过 Go 创建一个服务器的步骤非常简单。net/http 包调用 ListenAndServe 函数并传入网络地址以及负责 处理请求的处理器handler 作为参数就可以了如果网络地址原创 2020-12-02 22:11:59 · 555 阅读 · 0 评论 -
采用go自带的net/http实现最简单的http服务
如何在Go中创建基本的HTTP服务器。1 基本的HTTP服务器2 处理动态请求3 提供静态资源4 介绍连接源代码1 基本的HTTP服务器基本的HTTP服务器需要处理几个关键的任务:处理动态请求:处理来自浏览网站、登录帐户或发布图片的用户的请求。提供静态资源:为浏览器提供JavaScript、CSS和图像,为用户创建动态体验。接受连接:HTTP服务器必须监听一个特定的端口,以便能够接受来自internet的连接。2 处理动态请求net/http包 包含接受请求和动态处理请求所需的所有工具。原创 2020-11-30 21:18:53 · 1077 阅读 · 0 评论 -
Golang学习记录(六)
Golang学习记录六递归函数类型转换接口Go 并发递归函数package mainimport "fmt"func fibonacci(n int) int { if n < 2 { return n } return fibonacci(n-2) + fibonacci(n-1)}func main() { var i int for i = 0; i < 10; i++ { fmt.Printf("%d\t", fibona原创 2020-11-30 19:40:11 · 200 阅读 · 0 评论 -
Golang学习记录(五)
Golang学习记录五切片Slice范围(Range)Map(集合)切片SliceGo 语言切片是对数组的抽象。Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片(“动态数组”),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。package mainimport "fmt"func main() { var qiepian = make([]int, 3, 5) fmt.Printf("length :原创 2020-11-29 22:42:06 · 170 阅读 · 0 评论 -
Golang学习记录(四)
Golang学习记录四数组指针结构体数组package mainimport "fmt"func main() { var n [10]int var i, j int for i = 0; i < 10; i++ { n[i] = i + 100 } for j = 0; j < 10; j++ { fmt.Println(n[j]) }}指针package mainimport "fmt"func main() { var a int =原创 2020-11-29 21:51:19 · 179 阅读 · 0 评论 -
Golang学习记录(三)
@TOC9 循环语句for循环package mainfunc main() { sum := 0 for i := 0; i <= 10; i++ { sum += i } println(sum)}package mainfunc main() { sum := 1 for sum <= 10 { sum += sum } println(sum)}For-each range 循环package mainimport "fmt"原创 2020-11-28 21:59:28 · 185 阅读 · 0 评论 -
Golang学习记录(二)
Golang学习记录6 语言变量6 语言变量package mainimport "fmt"func main() { var a string = "Runoob" fmt.Println(a) var b, c int = 1, 2 fmt.Println(b, c)}根据值自行判定变量类型package mainimport "fmt"func main() { var d = true fmt.Println(d)}省略 v原创 2020-11-27 22:09:08 · 255 阅读 · 0 评论 -
Golang学习记录(一)
记录自己的学习之路Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。Golang学习记录1 简介2 环境安装3 语言结构1 简介语言特点简洁、快速、安全并行、有趣原创 2020-11-27 21:02:26 · 207 阅读 · 0 评论