Golang Go语言中 helm 模版或 golang 模版,如何实现 Java 中 stream.map.join 的效果?

发布于 1周前 作者 bupafengyu 来自 Go语言

我的 values 文件中定义了一些接口,这些接口应当被转发给一个服务

values.yaml:

path:

  • /aa
  • /bb
  • /cc

如何实现最终渲染出这样的效果:

router-swap: rule: "PathPrefix(/aa)||PathPrefix(/bb)||PathPrefix(/cc)" service: swap-service middlewares:

我已经看到了 join 但是我不知道如何使 list 中的每个元素增加 PathPrefix router-swap: rule: {{ join "||" .Values.path }} service: swap-service middlewares:


Golang Go语言中 helm 模版或 golang 模版,如何实现 Java 中 stream.map.join 的效果?

更多关于Golang Go语言中 helm 模版或 golang 模版,如何实现 Java 中 stream.map.join 的效果?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

4 回复

如果是 java list.stream().map(it->“PathPrefix(it)”).collect(Collectors.join("||"))就能得到效果
但是 go 语言我找了半天好像没有相应的函数

更多关于Golang Go语言中 helm 模版或 golang 模版,如何实现 Java 中 stream.map.join 的效果?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在 Go 模板里比较麻烦一点,我想到两个方式实现你可以参考下:
plain<br>// templates/_helpers.tpl<br><br>{{- define "rules.join" -}}<br>{{- $rules := list "" -}}<br>{{- range . -}}<br> {{- $rules = append $rules (printf "PathPrefix(%q)" .) -}}<br>{{- end -}}<br>{{- join "||" (compact $rules) -}}<br>{{- end -}}<br>

plain<br>// templates/deployment.yaml<br><br>apiVersion: apps/v1<br>kind: Deployment<br>metadata:<br> name: {{ include "joinexample.fullname" . }}<br> annotations:<br> oneline: '{{- range (initial .Values.paths) -}} {{- printf "PathPrefix(%q)||" . -}} {{- end -}} {{- printf "PathPrefix(%q)" (last .Values.paths) -}}'<br> byblock: {{ include "rules.join" .Values.paths }}<br>

Thanks ! 我认为第一种更干净一点,我采用第一种了

在Go语言中,虽然没有直接等同于Java中stream.map.join的链式API,但你可以通过组合使用Go语言的切片操作、循环以及字符串拼接来实现类似的效果。

对于Helm模板或Go模板,情况略有不同,因为它们主要用于配置管理和文本生成,而非数据处理。不过,你可以通过自定义函数在模板中模拟这种数据处理流程。

在纯Go代码中,你可以这样做:

  1. 使用切片存储数据。
  2. 使用for循环遍历切片,应用映射函数(相当于map)。
  3. 使用字符串拼接(如strings.Join)将结果合并。

示例代码如下:

package main

import (
    "fmt"
    "strings"
)

func main() {
    data := []int{1, 2, 3, 4}
    var results []string

    for _, v := range data {
        results = append(results, fmt.Sprintf("%d*2=%d", v, v*2))
    }

    joined := strings.Join(results, ", ")
    fmt.Println(joined) // 输出: 1*2=2, 2*2=4, 3*2=6, 4*2=8
}

在Helm模板中,你可以通过定义自定义的模板函数来实现类似功能,但这通常用于更复杂的配置管理场景,而非简单的数据处理。对于简单的数据处理,建议在Go代码中处理后再传递给模板。

回到顶部