Golang 的高级特性
文章平均质量分 66
qq_34893654
这个作者很懒,什么都没留下…
展开
-
按位与操作
例如,可以使用 & 运算符来获取本地 IP 地址或设置 socket 的地址。在多线程编程中,& 运算符可以用于同步线程之间的数据访问。例如,可以使用 & 运算符来创建线程安全的数据结构或者进行线程间的互斥访问。例如,可以使用 & 运算符来将一个整数的某些位设置为 0 或 1,或者获取某些位的值。例如,可以使用 & 运算符来控制电子设备的某些位,或者读取传感器的数据。& 是 Golang 中的位运算符,主要用于按位与操作。在算法和数据结构中,& 运算符可以用于位运算的算法和数据结构,例如位图和哈希表等。原创 2023-03-10 14:29:38 · 152 阅读 · 0 评论 -
移位操作场景
移位操作。原创 2023-03-10 14:25:54 · 42 阅读 · 0 评论 -
GC内存回收
分代收集(Generational Garbage Collection)。节点复制(Copying Garbage Collection)引用计数(reference counting)标记-清除(mark & sweep)原创 2023-03-10 13:58:35 · 36 阅读 · 0 评论 -
死锁检测工具
go tool trace 分析器可以显示 goroutine 的创建和销毁情况,以及 goroutine 之间的依赖关系,从而帮助我们分析死锁问题。使用 sync 包中的 WaitGroup 和 Mutex 类型:在编写代码时,可以使用 sync 包中的 WaitGroup 和 Mutex 类型来避免死锁问题。race 检测器会监控程序运行时的内存访问和 goroutine 调度情况,如果检测到死锁问题,就会输出相应的警告信息。因此,在编写代码时,应该确保加锁和解锁的次数相等。是需要检测的文件名。原创 2023-03-09 14:10:31 · 1298 阅读 · 0 评论 -
内存泄漏的场景
例如,在使用 goroutine 时,如果没有及时停止不再需要的 goroutine,那么这些 goroutine 占用的内存将一直存在,无法被垃圾回收。例如,如果一个对象 A 持有一个指向对象 B 的指针,而对象 B 又持有一个指向对象 A 的指针,那么这两个对象将无法被垃圾回收,从而导致内存泄漏。例如,在使用切片时,如果频繁地追加元素,但是没有及时删除不再需要的元素,那么切片占用的内存将一直增加,无法被垃圾回收。例如,在使用缓冲区时,如果代码中存在死循环,可能会导致缓冲区一直被占用,从而无法释放。原创 2023-03-09 11:40:45 · 241 阅读 · 0 评论 -
空结构体的使用场景
struct{}空结构体是一个非常有用的 Golang 特性,因为它既可以减小内存开销,又可以用来表示某些状态或者信号。原创 2023-03-09 11:37:26 · 163 阅读 · 0 评论 -
database/sql库
是 Go 语言中一个标准库,用于处理关系型数据库的操作。它是一个轻量级的 SQL 数据库抽象,提供了一些基本的接口,包括连接、查询、事务等。使用 SQL 驱动程序的方式连接不同的数据库,让我们可以使用统一的 API,而不用考虑底层数据库驱动的差异性。连接数据库使用连接数据库通常需要先安装相应的驱动程序,例如 MySQL、PostgreSQL 等,然后使用sql.Open()函数打开一个数据库连接。sql.Open()函数的第一个参数是驱动程序名称,第二个参数是连接字符串。连接字符串中的。原创 2023-02-27 10:06:06 · 764 阅读 · 0 评论 -
testing库
testing 包是一个内置的测试框架,它提供了用于编写和运行测试的工具。本文将介绍 testing 包的主要功能和用法。1. 编写测试函数测试函数是一个以 "Test" 开头的函数,它接受一个 *testing.T 类型的参数。在测试函数中,我们调用需要测试的函数 Add,并使用断言方法 t.Errorf 来检查 Add 函数的输出是否符合预期。如果测试失败,t.Errorf 方法将会记录一个错误信息。2. 运行测试$ go test。原创 2023-02-27 10:05:04 · 320 阅读 · 0 评论 -
encoding/json库
类型最常见的用途是在处理 JSON 数据时,当你想要将未知的 JSON 数据解码为一个通用的数据类型时。例如,在处理一些 JSON API 的响应时,你可能会遇到不同结构的 JSON 数据,此时就可以使用。JSON 解码器和编码器的主要用途是在网络通信和数据存储中,将结构化的数据转换为可传输或可存储的格式,或者将从网络或存储中读取的数据转换为可用的数据结构。函数用于检查两个不同的 JSON 字符串,一个是有效的 JSON 数据,另一个是无效的 JSON 数据。原创 2023-02-27 10:05:54 · 844 阅读 · 0 评论 -
context库
context库提供了一种机制,用于跨 API 边界传递请求范围的值、取消信号以及请求超时等信息。通过使用context,我们可以优雅地管理应用程序中的并发和 goroutine,并避免可能会导致死锁的竞争条件。为什么需要 context在实际的应用中,我们通常会有一些需要处理请求的操作,例如发送请求、访问数据库、调用其他 API 等。这些操作往往会使用 goroutine 并发执行,因此在进行这些操作时,我们需要协调它们之间的同步和协作。原创 2023-02-27 10:04:10 · 107 阅读 · 0 评论 -
net网络库
net包是一个非常常用的网络库,提供了对网络通信的支持。本教程将介绍net包的一些基本概念、API 和示例用法。网络模型net包中实现了一些基础网络模型,包括 TCP、UDP 和 Unix domain socket,这些模型是通信双方使用的协议。这些协议的实现方式都是非常类似的,它们之间的差异在于通信协议和交互的特征。下面我们来简要介绍一下这些网络模型。TCP。原创 2023-02-26 16:29:11 · 511 阅读 · 0 评论 -
http库
当我们使用 Go 语言进行 Web 开发时,不可避免地要使用到 http 包。该包提供了 HTTP 客户端和服务器的实现,可以轻松地编写 HTTP 服务器和客户端。在本节中,我们将学习如何使用 Go 语言中的 http 包来编写 Web 服务器和客户端。基本使用使用 http 包创建 Web 服务器很容易。下面是一个简单的 Web 服务器示例,它将响应客户端请求并返回 "Hello, World!该示例中,我们使用函数将 URL 根路径与一个匿名函数关联起来。原创 2023-02-26 16:10:38 · 189 阅读 · 0 评论 -
time时间库
time库提供了对时间和日期的处理,包括获取当前时间、时间戳、时间格式化、时区转换、定时器等功能。时间获取时间戳1645600484时间格式化时区转换定时器定时器用于在指定的时间执行某个操作。例如,可以使用定时器定期执行一些任务。原创 2023-02-26 13:09:34 · 106 阅读 · 0 评论 -
fmt输入输出库
fmt包是一个格式化输入输出的包,它提供了很多与C语言类似的格式化字符串方式来格式化输出内容。fmt包可以用于向控制台、文件、网络等输出内容基本用法格式化输出这些函数的区别在于输出的方式不同:Print:直接将字符串输出到控制台,不换行Printf:格式化输出字符串到控制台,不换行Println:输出字符串到控制台并换行规律:后面的f :format格式化字符串使用fmt.Sprintf可以将格式化的字符串赋值给变量,例如:规律:前面的f :file,s:string打印变量。原创 2023-02-26 12:53:30 · 195 阅读 · 0 评论 -
实现ORM框架的实例
映射结构体和数据库表通过反射获取结构体的字段信息,根据数据库表的列名和结构体字段名的映射关系,将结构体和数据库表进行映射。可以通过 struct tag 实现自定义映射关系。CRUD 操作根据映射关系,可以实现基本的 CRUD 操作。通过反射获取结构体的字段值,动态生成 SQL 语句执行数据库操作。数据库连接池ORM 框架应该支持数据库连接池。可以使用 Go 语言自带的数据库连接池实现。数据库事务ORM 框架应该支持数据库事务。可以使用 Go 语言自带的事务处理机制实现。原创 2023-02-26 08:43:03 · 66 阅读 · 0 评论 -
反射和接口
反射的概念反射(reflection)是 Golang 中一个非常强大的特性,它允许程序在运行时动态地访问和修改对象的属性和方法。在 Golang 中,所有的类型都实现了空接口 interface{},因此可以使用反射机制来获取对象的类型信息和属性信息,还可以动态地调用对象的方法。反射的基本操作Golang 中的反射主要通过 reflect 包来实现,它提供了一些方法来获取对象的类型信息、属性信息和方法信息等。原创 2023-02-26 08:42:44 · 40 阅读 · 0 评论 -
atomic(原子操作)
Golang中的atomic(原子操作)包提供了一组用于进行低级别原子操作的函数,以确保在多个goroutine中对共享变量的读写操作是线程安全的。在并发程序中,有时需要对共享变量执行简单的读写操作,这些操作不能被打断或中断,否则可能导致数据竞争或内存泄漏等问题。在这种情况下,使用atomic包可以确保这些操作的原子性。原创 2023-02-25 10:41:19 · 285 阅读 · 0 评论 -
读写锁并发场景应用案例
连接池中的连接可以被多个并发请求共享,但是每个请求在使用连接时需要先获取一个可用的连接,然后在使用完成后释放连接。读写锁可以通过在获取连接时使用写锁,释放连接时使用写锁或读锁,以实现对连接池中的连接资源的安全访问。例如,在一个并发计算密集型的应用中,多个 goroutine 可以对一个共享的数组进行计算,使用读写锁可以允许多个 goroutine 同时进行读操作,在写操作时使用写锁进行互斥。需要注意的是,在使用读写锁时需要考虑到锁的粒度,不要让锁的粒度太大,否则会影响并发性能。结构体中包含一个连接池数组。原创 2023-02-25 10:41:49 · 385 阅读 · 0 评论 -
锁Mutex
在 Golang 的并发编程中,锁是一种常用的同步机制,用于确保同一时间只有一个 goroutine 访问共享资源。Golang 中提供了两种锁:sync.Mutex 和 sync.RWMutex。sync.Mutex 是一种互斥锁,只允许一个 goroutine 获得锁。当一个 goroutine 获得锁后,其他 goroutine 必须等待该 goroutine 释放锁后才能继续执行。原创 2023-02-25 10:41:00 · 113 阅读 · 0 评论 -
并发组件--waitGroup
Golang中提供了多种并发组件,这些组件可以帮助我们更方便地实现并发编程。本篇教程将详细介绍这些并发组件。原创 2023-02-25 10:29:35 · 114 阅读 · 0 评论 -
并发Goroutine
goroutine channel ,select原创 2023-02-24 12:12:33 · 47 阅读 · 0 评论 -
接口interface
inteface 接口的定义 、实现、断言原创 2023-02-24 11:44:45 · 43 阅读 · 0 评论