avatar
Go语言SOLID实践系列一之单一职责原则

Go语言SOLID实践系列一之单一职责原则

星期四,十二月 23 日,2021 年

什么是SOLID?

以下引用wikipedia上的解释:

SOLID指面向对象编程和面向对象设计的五个基本原则。当这些原则被一起应用时,它们使得一个程序员开发一个容易进行软件维护和扩展的系统变得更加可能。SOLID所包含的原则是通过引发编程者进行软件源代码的代码重构进行软件的代码异味清扫,从而使得软件清晰可读以及可扩展时可以应用的指南。SOLID被典型的应用在测试驱动开发上,并且是敏捷开发以及自适应软件开发的基本原则的重要组成部分

avatar归零
3 分钟阅读
Kubernetes最佳实践

Kubernetes最佳实践

星期三,十二月 22 日,2021 年

容器的使用越来越多,导致对Kubernetes等容器编排平台的需求随之上升。使用容器来打包应用程序,极大地简化了应用程序从开发到生产的部署过程。毫无疑问,Kubernetes作为一个平台协调器,通过引入其深奥的方式,进一步简化了这个过程。

今天,我想谈谈我在使用Kubernetes时学到的一些好的做法,这些做法可以实现安全部署并推动集群的效率。 那么,让我们开始吧。

avatar归零
1 分钟阅读
在Kubernetes上gRPC是如何通过Headless Service负载均衡

在Kubernetes上gRPC是如何通过Headless Service负载均衡

星期一,十二月 20 日,2021 年

gRPC 是用于进程间通信的最流行的现代 RPC 框架之一。 它是微服务架构的绝佳选择。 而且,毫无疑问,部署微服务应用程序最流行的方式是 Kubernetes。

Kubernetes部署可以具有相同的后端实例,为许多客户端请求提供服务。 Kubernetes 的 ClusterIP 服务提供负载均衡的IP地址。 但是这种默认的负载平衡不适用于gRPC开箱即用。

如果你使用gRPC并在 Kubernetes 上部署了许多后端服务,那么本文档适合你。

avatar归零
3 分钟阅读
关于Go1.18你想知道的都在这里

关于Go1.18你想知道的都在这里

星期日,十二月 19 日,2021 年

原文:https://betterprogramming.pub/golang-1-18-what-you-need-to-know-a5701f7e14ab 在Go 1.18中,有两件大事是你需要知道的。类型参数(在其他语言中称为泛型)和模糊测试,但为什么它们如此重要? Golang团队正在努力开发Go1.18,该版本将于2022年2月发布,它将是一个大的版本。Go1.18将引入泛型和模糊测试,这有可能彻底改变我们开发和测试Go程序的方式。我们将在下面看一下这两个新特性。 类型参数 类型参数将允许Go程序员用占位符类型名称定义函数和方法。这将允许开发人员编写可以在项目的不同部分重复使用的代码,但仍然可以对他们期望支持的所有数据类型进行通用处理。 让我们来看看一个普通的Go函数(在1.18之前),计算两个数中较小的一个数。 func min(a, b int) int { if a < b { return a } return b } 上面这个方法中,我们把两个整数作为参数,min(1,2)和min(2,1)都将返回1。到目前为止还不错,但是当你想得到两个浮点数的较小值时,怎么办呢?我们将不得不写一个新的函数,它需要两个浮点数作为参数,而且我们不能重复使用第一个函数的代码。函数的主体仍然是完全相同的代码。如果我们想得到两个float64数的较小值,我们将不得不再次编写相同的函数,以float64作为参数。 现在让我们来看看Go的泛型。你现在可以用一个任意的占位符类型名称来定义函数,这个名称将作为其他类型的参数。在Go中,泛型是以类型T的形式来写的。 这意味着你可以用任何占位符类型的名字来定义一个函数,这个名字以后会被另一个参数填入。现在我们用新的泛型方法重构之前的例子。 type numeric interface { type int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64, float32, float64 } func min[T numeric](a, b T) T { if a < b { return a } return b } 如上,这段代码有点长。首先,我们定义一个接口,它将所有的数字类型声明为numeric的新类型。这意味着我们可以在泛型中使用float64和int。然后,像之前一样,我们定义一个新的min函数。 不同的是,现在这个函数在头部有一个类型参数:min[T numeric]…. 这告诉Go,类型T应该是一个数字类型,所以是我们在接口中声明的任何类型。然后,像以前一样我们声明一个函数,只不过我们用T代替了int。 如果新的函数现在被调用,Go会检查用户提供的类型是否符合接口的要求。如果是的话,它将在整个函数中用该类型替换Tw。因此,如果我们输入一个int类型的数字,我们也会得到一个整数的回报。如果我们输入一个float64,我们将得到一个float64的返回值,以此类推。因此,我们现在有了一个单一的 “全能 “函数,而不是写12个内容完全相同的函数,但对Go中的每个数字类型都有不同的参数类型。
@ 归零
1 分钟阅读
Kubernetes中Go服务的远程debug

Kubernetes中Go服务的远程debug

星期二,十二月 7 日,2021 年

作为开发人员,我们总是会遇到一些bug本地无法模拟,需要在通过远程方式排查,本教程介绍如何配置远程debug Kubernetes上的Go服务,通过本教程,你会学到:

  • 通过dlv工具远程debug 用Go写的服务
  • vscode配置远程debug
avatar归零
1 分钟阅读
Dapr中的Actor模型

Dapr中的Actor模型

星期四,四月 22 日,2021 年

原文链接:https://docs.dapr.io/developing-applications/building-blocks/actors/actors-overview/

介紹

Actor模型将Actor描述为最低层次的 “计算单元”。换句话说,你把代码写在一个独立的单元(称为Actor)中,这个单元每次接收消息并处理它们,没有任何并发或线程。

当你的代码处理一条消息时,它可以发送一条或多条消息给其他Actor,或者创建新的Actor。底层运行时管理每个Actor的运行方式、时间和地点,并在角色之间路由消息。

大量的actor可以同时执行,而且actor之间可以独立执行。

Dapr包括一个专门实现虚拟Actor模式的运行时。通过Dapr的实现,你可以根据Actor模式编写Dapr的actors,Dapr利用底层平台提供可扩展性和可靠性保证。

avatar归零
1 分钟阅读
Arthas反编译更新线上代码

Arthas反编译更新线上代码

星期一,四月 12 日,2021 年

很多时候,出现线上问题,我们需要紧急修复程序并立马生效,使线上问题影响最小,所以我们需要线上更新部分程序,今天就以热更新com.example.demo.arthas.user.UserController为例,介绍Arthas工具如何热更新线上代码。

1. 下载arthas工具并运行

curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar
avatar归零
1 分钟阅读
Jupyter Notebook添加conda环境

Jupyter Notebook添加conda环境

星期六,六月 27 日,2020 年

本篇博客介绍如何将conda中python环境添加到Jupyter notebook中.

1. 安装ipykernel

conda install ipykernel
@ 归零
1 分钟阅读
如何修改mongo文档中数组元素的内容

如何修改mongo文档中数组元素的内容

星期一,三月 30 日,2020 年

在平时开发中,我们可能会遇到修改mongodb文档数组里边元素的值,那如何修改数组中元素的值呢? 其实mongodb 提供了update set指令, 可以实现我们的需求,具体如下:

比如,我们的文档格式如下:

{
    "categories": ["新闻","图片"]
}
@ 归零
1 分钟阅读

© 2014 - 2022 Lionel's Blog

Powered by Hugo with theme Dream.