首页 后端开发 Golang Golang 将如何解决你的第一个工作任务

Golang 将如何解决你的第一个工作任务

Jul 17, 2024 pm 09:50 PM

Golang,或简称 Go,已被称为 Go gopher 语言。如果你仍然不明白为什么是地鼠,你可以在这篇文章中找到令人惊讶的吉祥物历史。好吧,让我们从头开始吧,Golang 已成为众所周知的最高效的编程语言之一。 与 Java 或 Python 等传统语言不同,Go 在易于编写的代码和快速执行之间取得了独特的平衡,从而加快了开发速度并减少了调试和测试时间。本文将介绍在与缓慢且不稳定的 REST API 微服务交互的项目中使用 goroutine 和上下文的真实示例。

任务
假设您刚刚加入团队,团队负责人要求您将用 Golang 编写的新微服务(例如风险管理器)绑定到通过 REST API 公开的用户微服务。

问题
风险管理者需要与可能缓慢且不稳定的 REST API 进行交互,这要求我们谨慎处理此类请求。我将使用 goroutine 进行异步 HTTP 请求和上下文来管理请求超时和错误处理。

解决方案

在 Golang 中使用 goroutine 和上下文可以有效管理并发任务并处理缓慢或不稳定的外部 API。

用代码解释它的第一步是创建API,我使用了共享软件服务https://mockapi.io/生成REST很方便具有一组基本实体的 API,例如 users.

Image description

假设有人尽力而为,而您的公司有一项列出用户的内部服务。我们的任务是在新的风险管理器中重用用户列表(用户数据结构满足mockapi.io描述的契约)。下面的代码发出请求,处理正文,并生成用户列表或相应的错误。

type User struct {
    CreatedAt string
    Name      string
    Avatar    string
    Id        string
}

// Original slow request
func fetchUsers(ctx context.Context) (*[]User, error) {
    resp, err := http.Get("https://<use your id after sign up>.mockapi.io/api/v1/users")
    if err != nil {
        return nil, err
    }
    defer resp.Body.Close()

    if resp.StatusCode != http.StatusOK {
        return nil, fmt.Errorf("failed to fetch users: %s", resp.Status)
    }

    var users []User
    if err := json.NewDecoder(resp.Body).Decode(&users); err != nil {
        return nil, err
    }

    return &users, nil
}
登录后复制

为了控制操作,我将为所有其他上下文使用最顶层的父上下文 - context.Background。我将用新数据补充此上下文,在本例中是超时 - context.WithTimeout,我将其定义为 2 秒。您可以在本文中阅读有关在 Go 中使用上下文的更多信息。

ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()

usersChan := make(chan *[]User)
errChan := make(chan error)

go func() {
    users, err := fetchUsers(ctx)
    if err != nil {
        errChan <- err
        return
    }
    usersChan <- user
}()

select {
case users := <-usersChan:
    fmt.Printf("Fetched users: %+v\n", users)
case err := <-errChan:
    fmt.Printf("Error fetching users: %v\n", err)
case <-ctx.Done():
    fmt.Println("Request timed out")
}
登录后复制

在示例中,我使用两个通道 - usersChan 记录从内部服务收到的结果,第二个通道 errChan - 记录错误。
如果慢速 API 的响应没有在 2 秒内到达,我们会检测到错误并提供在外部层正确处理它的机会。

在风险管理器的这个实际示例中,goroutines 启用了异步 HTTP 请求,而上下文确保了超时处理,这对于构建可靠且有弹性的微服务至关重要。

附注

本文面向具有基础知识但不知道可以在哪里应用知识的初学者开发人员。我很高兴收到您的反馈,并很乐意回答您的问题。
Go 语言中最基本的东西的工作示例和其他几个实现可以在我的 GitHub 上找到,链接

以上是Golang 将如何解决你的第一个工作任务的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1671
14
CakePHP 教程
1428
52
Laravel 教程
1329
25
PHP教程
1276
29
C# 教程
1256
24
Golang vs. Python:性能和可伸缩性 Golang vs. Python:性能和可伸缩性 Apr 19, 2025 am 12:18 AM

Golang在性能和可扩展性方面优于Python。1)Golang的编译型特性和高效并发模型使其在高并发场景下表现出色。2)Python作为解释型语言,执行速度较慢,但通过工具如Cython可优化性能。

Golang和C:并发与原始速度 Golang和C:并发与原始速度 Apr 21, 2025 am 12:16 AM

Golang在并发性上优于C ,而C 在原始速度上优于Golang。1)Golang通过goroutine和channel实现高效并发,适合处理大量并发任务。2)C 通过编译器优化和标准库,提供接近硬件的高性能,适合需要极致优化的应用。

开始GO:初学者指南 开始GO:初学者指南 Apr 26, 2025 am 12:21 AM

goisidealforbeginnersandsubableforforcloudnetworkservicesduetoitssimplicity,效率和concurrencyFeatures.1)installgromtheofficialwebsitealwebsiteandverifywith'.2)

Golang vs.C:性能和速度比较 Golang vs.C:性能和速度比较 Apr 21, 2025 am 12:13 AM

Golang适合快速开发和并发场景,C 适用于需要极致性能和低级控制的场景。1)Golang通过垃圾回收和并发机制提升性能,适合高并发Web服务开发。2)C 通过手动内存管理和编译器优化达到极致性能,适用于嵌入式系统开发。

Golang的影响:速度,效率和简单性 Golang的影响:速度,效率和简单性 Apr 14, 2025 am 12:11 AM

GoimpactsdevelopmentPositationalityThroughSpeed,效率和模拟性。1)速度:gocompilesquicklyandrunseff,ifealforlargeprojects.2)效率:效率:ITScomprehenSevestAndArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdEcceSteral Depentencies,增强开发的简单性:3)SimpleflovelmentIcties:3)简单性。

Golang vs. Python:主要差异和相似之处 Golang vs. Python:主要差异和相似之处 Apr 17, 2025 am 12:15 AM

Golang和Python各有优势:Golang适合高性能和并发编程,Python适用于数据科学和Web开发。 Golang以其并发模型和高效性能着称,Python则以简洁语法和丰富库生态系统着称。

Golang和C:性能的权衡 Golang和C:性能的权衡 Apr 17, 2025 am 12:18 AM

Golang和C 在性能上的差异主要体现在内存管理、编译优化和运行时效率等方面。1)Golang的垃圾回收机制方便但可能影响性能,2)C 的手动内存管理和编译器优化在递归计算中表现更为高效。

表演竞赛:Golang vs.C 表演竞赛:Golang vs.C Apr 16, 2025 am 12:07 AM

Golang和C 在性能竞赛中的表现各有优势:1)Golang适合高并发和快速开发,2)C 提供更高性能和细粒度控制。选择应基于项目需求和团队技术栈。

See all articles