mergo 介绍

前言 今天介绍一个 go 库 - mergo, mergo 用来方便的合并 struct 和 map ,可以将结构体的字段赋值到map中,可以将map的值赋值给结构体的字段. Mergo 通过在零值字段中设置默认值来合并同类型的struct 和 map。Mergo 不会合并未导出(私有)字段。它会递归合并任何已导出的字段。它也不会合并map中的结构体(因为它们无法使用 Go 反射寻址)。 Mergo 在很多知名项目中被使用,如 containerd、k8s、loki等。 安装 使用以下命令安装 mergo : go get -u dario.cat/mergo 使用 接下来介绍 mergo 的基础使用和高级用法。 基础使用 mergo 提供了2个主要函数: Merge和Map, Mergo 用来合并2个相同结构的 struct 和 map, Map 用来在结构和map之间赋值。 例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 package main import ( "fmt" "log" "github....

December 16, 2023 · 2 min · overstarry

conc 一个更好的go并发库

前言 本文介绍 conc - 一个更好的 go 并发库, sourcegraph 在日常开发中使用go原生并发出现了问题,由此开发了 conc ,相比标准并发代码更优雅,代码更少,下面展示一个例子,可以看出代码减少了许多. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 type propagatedPanic struct { val any stack []byte } func main() { done := make(chan *propagatedPanic) go func() { defer func() { if v := recover(); v !...

December 9, 2023 · 3 min · overstarry

Kubernetes externaltrafficpolicy 简介

前言 最近在使用 Kubernetes 查看 pod 日志时,发现 pod 日志显示的 ip 不是真实的请求者 ip, 而是 Node 节点的 ip。通过查阅资料发现可以通过设置 externalTrafficPolicy 来显示真实的 IP。 本文对 externaltrafficpolicy 进行一个简单的介绍。 简介 ExternalTrafficPolicy 是 Kubernetes Service 对象的一个属性,它决定了流量如何从集群外部访问 Service。有两个可选值:Cluster 和 Local。 Cluster 模式: 在 Cluster 模式下,流量将通过负载均衡器分发到 Service 的所有 Pod 上。这是传统的负载均衡方式,适用于需要水平扩展和容错的场景。负载均衡器会将流量平均分配给所有可用的 Pod,从而实现负载均衡。 Local 模式: 在 Local 模式下,流量将直接访问与请求最近的节点上运行的 Pod。这种方式避免了负载均衡器的介入,直接将流量定向到本地的 Pod 上。这样可以减少延迟,并且在负载均衡器发生故障时仍然保持可用性。 区别 两种模式有什么区别呢? Cluster 模式 Cluster 模式是默认的模式,Kube-proxy 不管容器在哪个节点上,会公平的转发到某一个节点上,在转发时会替换掉源ip,变成转发的上一个节点的ip.原因是Kube-proxy在做转发的时候,会做一次SNAT (source network address translation),所以源ip变成了上一个节点的ip地址。 这个模式的优点是负载均衡比较好,缺点是由于转发,可能会有性能损耗。 Local 模式 Local 模式下,请求只转发给本机的容器,不会转发给其它节点的容器,保留了源ip。 这个模式的优缺点跟 Cluster 模式恰恰相反:性能好,负载均衡不好。所以如果想要负载均衡就需要一层 LB 来进行控制。 参考 https://github....

December 3, 2023 · 1 min · overstarry

clarity 学习

前言 最近发现了一个新的工具-clarity, clarity 是一种免费工具,用于捕获用户使用网站。安装非常简单,可以在数分钟内开始获取数据。 clarity 有以下功能特点: 热点地图: 为你的所有页面自动生成。查看用户点击的位置、他们忽略的内容以及滚动的距离。 insights: 快速发现用户在何处感到灰心,并将这些问题转化为机会。 Google Analytics: 可以方便的与 Google Analytics 关联。 会话录制: 观看用户如何使用你的网站。了解运行顺畅的地方、需要改进的内容,并测试新想法。 copilot: 使用由 GPT 构建的直观对话体验来理解你的分析数据。 接下来就开始介绍 clarity 的简单使用。 clarity 使用 创建项目 登录成功后, 可以选择网站或者移动项目, 这里选择网站,输入相应的信息。 配置代码 填完信息,需要配置相应的代码信息,可以看到有2种方法,一种是知名第三方平台提供的快捷配置方法另一种是手动添加代码。这里选择手动添加代码。 配置信息 根据导览,可以配置一些信息,例如与ga关联,屏蔽一些隐私信息。 查看数据 根据导览的指引配置完信息后,第二天再次登录系统就可以看到数据了。可以看到有4个主要的模块栏目:仪表盘、录制、热度地图、ga,接下来分别介绍这4个部分。 仪表盘 仪表盘主要就是用户在你网站上访问的整体数据的展现。 录制 录制通过名字就可以得知这个是对用户在你页面上浏览情况的录制,可以看到用户的访问的整体情况,点击了哪些元素等。 热度地图 热度地图可以看到网站的哪些页面经常被访问,被访问的页面哪些部分经常被点击。 Google Analytics Google Analytics 主要就是 ga的数据了。 小结 本文简单的介绍了 clarity 的使用,由于目前数据量较少,不能很好的展示 clarity 的功能。 clarity 的代码已经开源了,有兴趣的可以访问 https://github.com/microsoft/clarity?tab=readme-ov-file 查看。 参考 https://clarity.microsoft.com/ https://clarity.microsoft.com/demo/projects/view/3t0wlogvdz/dashboard https://www.capterra.com/p/236349/Microsoft-Clarity/ https://learn.microsoft.com/en-us/clarity/ https://github.com/microsoft/clarity https://learn.microsoft.com/en-us/clarity/ga-integration/ga-integration#how-to-find-and-add-your-account-id-on-google-analytics

November 24, 2023 · 1 min · overstarry

Postgresql CTE 表达式

前言 本文介绍如何使用 CTE 表达式来简化 PostgreSQL 中的一些复杂查询。那 CTE 表达式是什么呢? CTE 介绍 在 PostgreSql 中 WITH 提供了一种方式来书写在一个大型查询中使用的辅助语句。这些语句通常被称为公共表表达式或CTE(Common Table Expressions),它们可以被看成是定义只在一个查询中存在的临时表。在WITH子句中的每一个辅助语句可以是一个SELECT、INSERT、UPDATE或DELETE,并且WITH子句本身也可以被附加到一个主语句,主语句也可以是SELECT、INSERT、UPDATE或DELETE。在 PostgreSQL 中,WITH 子句提供了一种编写辅助语句的方法,以便在复杂的查询中使用。 使用 该如何创建 CTE 呢, 创建 CTE 的语句如下: 1 2 3 4 5 6 7 8 WITH cte_name AS ( SELECT column1, column2, ... FROM table_name WHERE condition ... ) SELECT * FROM cte_name; 在日常查询中 CTE 用于哪些场景呢: 递归查询:CTE 表达式常用于执行递归查询。通过在 CTE 表达式中引用自身,可以简洁地实现递归操作。 复杂查询:CTE 表达式可以用于构建复杂的查询,将查询逻辑分解为更易于理解和维护的部分。每个 CTE 子查询块可以负责不同的逻辑操作,最终组合成一个完整的查询。 数据转换和重组:CTE 表达式可以用于对数据进行转换和重组。通过在不同的 CTE 子查询块中选择、过滤和连接数据,可以生成新的结果集。 递归查询 WITH 表达式如何实现递归查询呢,可以通过添加 RECURSIVE修饰符来实现。下面是一个示例:...

November 19, 2023 · 1 min · overstarry