GOLANG ROADMAP 社区移动版发布更新,欢迎体验

本次更新了登录页和新增了Go合集功能。效果如下,体验地址:https://m.golangroadmap.com/ 邀请码:Go语言中文网 ![登录页](https://static.golangjob.cn/230901/c1766a1e0023a213d233ae01fec83af0.jpg) ![Go推荐页](https://static.golangjob.cn/230901/ea3eaaa9e5b12e0fd3f0114585b754a4.jpg)阅读全文

2023-09-01 17:05:26

用 Go 编写简洁代码的最佳实践

# 介绍 简洁的代码对于创建可维护、可阅读和高效的软件至关重要。Go 是一种强调简单和代码整洁的语言。在本文中,我们将结合代码示例,探讨编写简洁 Go 代码的最佳实践。 # 有意义的变量和函数名称 使用能表达变量和函数用途的描述性名称。避免使用隐晦或过于简短的名称。 ``` // Bad: func fn(x int) int { // ... } // Good: func calculateFactorial(number int) int {...阅读全文

2023-09-06 10:13:07

如何限制http.HandleFunc并发数量?

func xHandle(w http.ResponseWriter, r *http.Request) { fmt.Printf("new request: %p\n", r) w.Write([]byte("Hello\n")) for {} } func main() { http.HandleFunc("/", xHandle) http.ListenAndServe(":8080", nil) } 对...阅读全文

2023-09-22 09:40:59

Go-Gin开发后台框架升级了、开发速度更快、使用更简单、开发环境一键安装

goflyadmin框架适用于中小型项目,开发人员1-10人团队,探索性项目,业务模式不断变化,更新频繁高,项目周期短,快速交付,需求变更频率高等;适合初创企业项目,小团队开发项目,快速验证可行性项目。选择这个框架让你开发出性能优异的企业级应用,不仅快而且稳,又不用担心后期拓展。我们提供开发到部署运维的技术支持,您无需担心任何环节搞不定,完善的开发文档,不担心人员变更,后来者可以通过社区资料学习继续接手开发。真正做到保姆级支持! goflyadmin已经集成框架基础所需的一切,开发者只需在ap...阅读全文

2023-10-07 16:04:06

golang select 机制

在 Go 语言中,`select` 是一种用于处理多个通道操作的控制结构。它可以用于在多个通道之间进行非阻塞的选择操作。 `select` 语句由一系列的 `case` 子句组成,每个 `case` 子句表示一个通道操作。`select` 语句会按照顺序依次检查每个 `case` 子句,并执行其中可执行的操作。 `select` 的作用主要有以下几个方面: # 多路复用通道 `select` 可以同时监听多个通道上的操作,一旦某个通道可读或可写,就会执行相应的操作。这样可...阅读全文

2023-10-14 10:56:57

Go 重构:尽量避免使用 else、break 和 continueGo 重构:尽量避免使用 else、break 和 continue

今天,我想谈谈相当简单的事情。我不会发明什么,但我在生产代码中经常看到这样的事情,所以我不能回避这个话题。 我经常要解开多个复杂的 `if else` 结构。多余的缩进、过多的逻辑只会加深理解。首先,这篇文章的主要目的是让代码更透明、更易读。不过,在某些情况下还是必须使用这些操作符。 # else 操作 例如,我们有简单的用户处理程序: ```go func handleRequest(user *User) { if user != nil { ...阅读全文

2023-10-18 09:22:17

在 Go 中管理多个数据库连接

# 简介 作为软件工程师,经常会遇到应用程序需要与多个数据库协同工作的情况,而每个数据库都有其独特的要求和配置。在遵守最佳编码实践的同时,有效地处理这些不同的数据库连接对于构建健壮且易于维护的应用程序至关重要。 # 挑战:多个数据库连接 在软件开发过程中,使用 `MySQL`、`PostgreSQL` 或其他数据库是很常见的。由于配置和要求不同,管理这些连接可能具有挑战性。为了有效应对这一挑战,我们将提供一个分步指南和一个实用示例。 ## 步骤 1:数据库配置 首先...阅读全文

2023-10-23 10:05:05

Golang 中的字符串:常见错误和最佳实践

# 1024 在这个对程序员有意义的节日里,希望大家快乐,少加班,开开心心写代码。 # 正题 在这篇文章中,我们将讨论 Golang 中的字符串,并查看一些不同的场景,以避免常见错误。让我们深入探讨! # 1. 字符串是否可以为 nil? 我们已经对 Golang 中的字符串有了基本的了解,但我们可以从 Golang 字符串不能为 `nil` 开始,除非您使用指向字符串的指针。 如下代码所示,当我们创建一个字符串变量时,默认值必须是空的""。如果我们用 `nil` 值...阅读全文

2023-10-24 09:53:49

Golang 中的 String、rune 和 byte

# 解释 ## String Go语言中,`string`就是只读的采用`utf8`编码的字节切片(slice) 因此用`len`函数获取到的长度并不是字符个数,而是字节个数。 for循环遍历输出的也是各个字节。 ## rune `rune`是`int32`的别名,代表字符的Unicode编码,采用4个字节存储,将`string`转成`rune`就意味着任何一个字符都用4个字节来存储其unicode值,这样每次遍历的时候返回的就是unicode值,而不再是字节了,这样就可...阅读全文

2023-10-25 09:38:52

Go语言中的闭包:封装数据与功能的强大工具

闭包是包括 Go 在内的编程语言的一项强大功能。通过闭包,您可以在函数中封装数据,并通过函数的返回值访问这些数据。在本文中,我们将介绍 Go 中闭包的基础知识,包括它们是什么、如何工作以及如何有效地使用它们。 ## 什么是闭包? go官方有一句解释: > Function literals are closures: they may refer to variables defined in a surrounding function. Those variables ar...阅读全文

2023-11-01 15:29:57

[go 面试] 并行与并发的区别及应用场景解析

# 并行与并发的区别及应用场景解析 ## 引言 在现代计算领域,我们经常听说并行与并发这两个概念。它们都与任务处理有关,但具体又有哪些区别呢?本文将深入探讨并行与并发的区别,以及它们在不同场景下的应用。 ## 并行与并发的区别 ### 并行的定义与特点 并行是指同时执行多个任务的能力。在并行计算中,多个任务可以同时进行,互不干扰。这种方式可以充分利用多核处理器等硬件资源,提高任务处理的效率。 ### 并发的定义与特点 并发是指多个任务交替进行的能力。在并发处理中,多个任...阅读全文

2023-11-12 12:07:10

10个令人惊叹的Go语言技巧,让你的代码更加优雅

> 关注公众号【爱发白日梦的后端】分享技术干货、读书笔记、开源项目、实战经验、高效开发工具等,您的关注将是我的更新动力! 在开发生产项目的过程中,我注意到经常会发现自己在重复编写代码,使用某些技巧时没有意识到,直到后来回顾工作时才意识到。 为了解决这个问题,我开发了一种解决方案,对我来说非常有帮助,我觉得对其他人也可能有用。 以下是一些从我的实用程序库中随机挑选的有用且多功能的代码片段,没有特定的分类或特定于系统的技巧。 ### 1. 追踪执行时间的技巧 如果你想追...阅读全文

2023-11-21 00:24:10

Go 命名规范:全面指南

> 关注公众号【爱发白日梦的后端】分享技术干货、读书笔记、开源项目、实战经验、高效开发工具等,您的关注将是我的更新动力! 在软件开发领域中,命名规范在提升代码可读性、可维护性和一致性方面起着至关重要的作用。良好定义的命名规范确保代码具有自解释性,减少开发人员的认知负担,并促进协作。Go语言作为一种流行的编程语言,遵循一套已经确立的命名约定,指导开发人员编写清晰、简洁和一致的代码。 ## 通用命名原则 **清晰性**:使用描述性和有意义的名称,清晰地传达标识符的目的。避免使用晦涩...阅读全文

2023-11-22 00:02:12

Go事件管理器:简单实现

> 关注公众号【爱发白日梦的后端】分享技术干货、读书笔记、开源项目、实战经验、高效开发工具等,您的关注将是我的更新动力! 在编程中,事件管理器是一种常见的工具,用于通过通知来触发操作。在Go语言中,我们可以通过创建事件管理器和监听器来实现事件的处理。本文将介绍一个简单的Go事件管理器的实现,并通过异步改进提高其性能。 ## 监听器 首先,我们需要创建一个监听器。在这个实现中,监听器只是一个接收事件参数的函数。 ```go type Listener[T any] fun...阅读全文

2023-11-25 01:05:48

使用 sync.Cond 来协调并发 goroutine 的访问共享资源

> 关注公众号【爱发白日梦的后端】分享技术干货、读书笔记、开源项目、实战经验、高效开发工具等,您的关注将是我的更新动力! ## 使用 sync.Cond 解决并发访问共享资源问题 在并发编程中,当多个 `goroutine` 需要访问共享资源时,我们需要使用一些机制来协调它们的执行顺序,以避免竞态条件和数据不一致的问题。在 Go 语言中,`sync.Cond` 条件变量就是一种常用的机制,它可以用来等待和通知其他 `goroutine`。 ## sync.Cond 和互斥锁的区...阅读全文

2023-11-28 23:13:31

让 Go 也能注解使用装饰器,切面(AOP)、代理(Proxy)任意函数和方法的神器!

> `go-decorator`, **可以让 Go 通过注释注解使用装饰器的工具,通过装饰器能够切面(AOP)、代理(Proxy)任意的函数和方法,提供观察和控制函数的能力。** `go-decorator` 在八月份发布了初版,经过几个月的多轮迭代,代表着里程碑的版本 v0.20.0 发布了。该版本已经完成了最初开发此工具时设立的目标,即实现比如自由定义函数为装饰器、允许使用装饰器参数、方法集 `type` 快捷注释等等需求,这些最常用的功能现都集成在了这个版本中,同时,保持开发者在使...阅读全文

2023-11-30 22:14:52

协程问题-对同一个变量进行操作为什么不加锁数据不会乱

3个协程对对一个变量进行减法操作,为什么不加锁他也不会出现问题呢?像Java的话 不加锁这个变量就可能是随机数了 ```go package main import ( "fmt" "sync" "time" ) var waitGroup sync.WaitGroup //var lock sync.Mutex var tikect int = 100 // 100张票 func sub(i int) { num := 0 for { if ...阅读全文

2023-12-05 12:50:43