首页 > 解决方案 > 通过分隔符拆分字符串,但提供指向应该拆分的字符串的指针

问题描述

我正在研究将自定义日志格式转换为 .csv 的 ETL 流程。整个事情都在 lambda 内部运行,因此内存受到严重限制。

我正在使用strings.Split(s, sep),它工作正常,但字符串没有作为指针传递,这意味着每次创建新副本并在strings.Split其他函数的内部实现中调用,而所有这些函数都在创建一个新的字符串的副本。

正因为如此,我正在寻找一种方法来用“”(双空格)分割我的日志,并且只提供字符串作为指针。

标签: go

解决方案


您可以改用bytes包,因为它使用字节切片而不是指针本身。

文档

切片是数组段的描述符。它由指向数组的指针、段的长度及其容量(段的最大长度)组成。

据我了解,将字符串转换为字节不会导致复制数据。

bytes.Split示例:

sep := []byte("  ")
s := "my looooong string"

result := bytes.Split([]byte(s), sep)
for _, part := range result {
    fmt.Println(string(part))
}

推荐阅读