CloudNative 架构

CloudNative|云原生应用架构|云原生架构|容器化架构|微服务架构|平台架构|基础架构


  • 首页

  • 标签

  • 分类

  • 归档

  • k8s离线安装包

  • 搜索

Golang 六种错误处理技术,可帮助您编写优雅的代码

发表于 2020-11-20 | 分类于 golang , error | | 热度: ℃
字数统计: 1,652 字 | 阅读时长 ≈ 7 分钟

概述

当在 GO 中遇到错误时你会怎么做?

处理错误并不简单。在讨论功能性需求时,很少考虑错误处理需求,但是错误处理是软件开发的一个重要部分。

在 GO 中,错误条件以方法返回值的形式返回。在我看来,将错误条件作为主流程的一部分是很有用的 – 它让开发人员在编写功能代码时承担处理错误的责任。这种范例与其他编程语言(如 Java )所提供的非常不同 – 其中异常是完全不同的流程。虽然这种不同的风格使代码更具可读性,但也带来了新的挑战。

本文讨论了六种处理错误、重试和可服务性的技术。虽然很少有想法是琐碎的,但其他想法并不那么受欢迎。

因此,让我们从列表开始!

阅读全文 »

深入理解 kubernetes iptables proxy 模式

发表于 2020-11-19 | 分类于 kuberntes , kube-proxy | | 热度: ℃
字数统计: 1,746 字 | 阅读时长 ≈ 8 分钟

概述

最近在面试的时候问了不少 network request 如何到 k8s service backend 的问题,觉得可以整合一下网络上的资料,这篇主要讨论 iptables proxy mode。大部分的情况没有在使用 userspace proxy modes, ipvs proxy mode 可能要等到下一次讨论。

阅读全文 »

Go 多重错误管理

发表于 2020-11-19 | 分类于 golang , error | | 热度: ℃
字数统计: 851 字 | 阅读时长 ≈ 3 分钟

概述

在年度调查中,关于开发人员在使用 Go 时面临的最大挑战,Go 中的错误管理总是容易引起争论,并且是一个反复出现的话题。然而,当涉及到在并发环境中处理错误或为同一个 goroutine 合并多个错误时,Go 提供了很棒的包,使管理多个错误变得容易。让我们看看如何合并由单个 goroutine 生成的多个错误。

阅读全文 »

Go chan 为啥没有判断 close 的接口

发表于 2020-11-16 | 分类于 golang , channel | | 热度: ℃
字数统计: 3,265 字 | 阅读时长 ≈ 14 分钟

大纲

  • Go 为什么没有判断 close 的接口?
  • Go 关闭 channel 究竟做了什么?
    -closechan
  • 一个判断 chan 是否 close 的函数
    • 思考方法一:通过“写”chan 实现
    • 思考方法二:通过“读”chan 实现
    • chan close 原则
    • 其实并不需要 isChanClose 函数 !!!
  • 怎么优雅关闭 chan ?
    • 方法一:panic-recover
    • 方法二:sync.Once
    • 方法三:事件同步来解决
  • 总结
阅读全文 »

Go Sync.Pool 背后的想法

发表于 2020-11-14 | 分类于 golang , sync | | 热度: ℃
字数统计: 1,001 字 | 阅读时长 ≈ 5 分钟

概述

我最近在我的一个项目中遇到了垃圾回收问题。大量对象被重复分配,并导致 GC 的巨大工作量。使用 sync.Pool,我能够减少分配和 GC 工作负载。

什么是 sync.Pool?

Go 1.3 版本的亮点之一是同步池。它是 sync 包下的一个组件,用于创建自我管理的临时检索对象池。

为什么要使用 sync.Pool?

我们希望尽可能减少 GC 开销。频繁的内存分配和回收会给 GC 带来沉重的负担。sync.Poll 可以缓存暂时不使用的对象,并在下次需要时直接使用它们(无需重新分配)。这可能会减少 GC 工作负载并提高性能。

阅读全文 »
1234…22
icyboy

icyboy

107 日志
96 分类
179 标签
RSS
GitHub 微博 知乎
友情链接
  • 张家港水蜜桃
  • 运维开发
  • DevOps
© 2016 — 2020 icyboy | Site words total count: 318.9k
本站访客数:
博客全站共318.9k字