小编Kos*_*ahb的帖子

如何解析golang中的通用yaml并保留注释?

我正在使用 golang yaml v3 库。目标是从带有注释的文件中解析任何 yaml(这意味着我没有预定义的结构),能够设置或取消设置结果树中的任何值并将其写回文件。

然而,我遇到了相当奇怪的行为。正如您在下面的代码中看到的,如果传递给 Unmarshal 函数的主要类型是interface{},则不会保留任何注释,并且库使用映射和切片来表示 yaml 的结构。另一方面,如果我使用(在本例中)[]yaml.Node结构,它确实在内部将所有节点表示为yaml.Nodeor []yaml.Node。这或多或少是我想要的,因为它允许保留评论。然而,它不是一个通用的解决方案,因为至少有两种不同的场景 - YAML 以数组开头或以映射开头,我不确定如何优雅地处理这两种情况。

您能否为我指出正确的方向并详细说明为什么图书馆会这样做?

package main

import (
    "fmt"
    "reflect"
    "gopkg.in/yaml.v3"
)

type Document interface{} // change this to []yaml.Node and it will work with comments // change it to yaml.Node and it will not work

var data string = ` # Employee records
-  martin:
    name: Martin D'vloper
    job: Developer
    skills:
      - python
      - perl
      - pascal
-  tabitha:
    name: …
Run Code Online (Sandbox Code Playgroud)

yaml go

7
推荐指数
1
解决办法
7211
查看次数

如何告诉gcc指针指向的数据总是对齐?

在我的程序中(用简单的C语言编写)我有一个结构,它保存准备通过矢量化(仅AVX)基数-2 2D快速傅立叶变换进行变换的数据.结构如下所示:

struct data {
    double complex *data;
    unsigned int width;
    unsigned int height;
    unsigned int stride;
};
Run Code Online (Sandbox Code Playgroud)

现在我需要尽快从内存加载数据.据我所知,ymm寄存器(vmovapd和vmovupd指令)存在未对齐和对齐的加载,我希望程序使用对齐版本更快.

到目前为止,我对阵列上的所有操作使用大致相似的结构.当数据和滤波器已经转换到频域并且滤波器通过逐元素乘法应用于数据时,该示例是程序的一部分.

union m256d {
    __m256d reg;
    double d[4];

};

struct data *data, *filter;
/* Load data and filter here, both have the same width, height and stride. */

unsigned int stride = data->stride;
for(unsigned int i = 0; i<data->height; i++) {
    for(unsigned int j = 0; j<data->width; j+=4) {
        union m256d a[2];
        union m256d b[2];
        union m256d r[2];

        memcpy(a, &(  data->data[i*stride+j]), …
Run Code Online (Sandbox Code Playgroud)

c memory gcc avx

5
推荐指数
1
解决办法
315
查看次数

如何在编译时使用常量参数进行gcc优化函数调用?

我试图解析用户输入并根据用户给出的命令执行一些任务.因为,在C中,switch不能用于字符串我决定使用字符串哈希值的切换来比较要执行的命令.

现在,维护所有可用命令的所有哈希列表,如下所示

#define EXIT 6385204799
...
Run Code Online (Sandbox Code Playgroud)

是一个非常繁琐的任务,如果有方法说服gcc在编译时使用常量参数来评估哈希函数,那么我就是在徘徊,所以我可以使用这样的东西

switch(hash(command)){
    case hash("exit"): exit();
    // I know, case labels must be compile time constants
    // but that should be fulfilled in my case
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用例如元编程,但我对gcc的解决方案更感兴趣.

它甚至可能吗?

#include <stdio.h>


unsigned long hash(const char *str)
{
        unsigned long hash = 5381;
        int c;

        while ((c = *str++))
                hash = ((hash << 5) + hash) + c;
        return hash;
}

int main( int argc, char **argv ) {
        char *command=NULL;
        size_t size=0;
        printf("Enter string:"); …
Run Code Online (Sandbox Code Playgroud)

c gcc

4
推荐指数
1
解决办法
571
查看次数

如何将整个JSON字符串传递给Helm图表值?

如何将整个JSON字符串传递给Helm图表值?

我在values.yml哪里config值应包含带有应用程序配置的整个JSON

...
config: some JSON here
...
Run Code Online (Sandbox Code Playgroud)

我需要将此值传递给秘密模板,然后将其作为卷安装到Kubernetes容器中。

{{- $env := default "integration" .Values.env}}
apiVersion: v1
kind: Secret
metadata:
  name: {{ .Release.Name }}-{{ $env }}
type: Opaque
data:
  config.json: {{ .Values.config | b64enc | quote }}
Run Code Online (Sandbox Code Playgroud)

但是,像这样传递单引号字符串的明显方法'{"redis": "localhost:6379"}'失败了,因为Helm出于某种原因删除了字符串中的所有双引号(即使我转义了双引号),因此我最终{redis: localhost:6379}得到的不是有效的JSON。

还有其他任何可能性如何一次将配置全部传递到Pod,而不用加载具有tpl功能的模板文件并使所有需要的字段分别访问values.yml吗?

json kubernetes kubernetes-helm

3
推荐指数
2
解决办法
4345
查看次数

如何用vim突出显示所有小写字母

在简单替换密码的频率分析之后,我已经部分解码了字符串.我想要突出显示所有已经解密的小写字母(所有未解密的字母都是大写的),这样我就可以专注于检测单词.

用vim怎么可能?

vim vim-syntax-highlighting

0
推荐指数
1
解决办法
39
查看次数

标签 统计

c ×2

gcc ×2

avx ×1

go ×1

json ×1

kubernetes ×1

kubernetes-helm ×1

memory ×1

vim ×1

vim-syntax-highlighting ×1

yaml ×1