Golang中字符串操作的有趣场景,需要解释[重复]

brccelvz  于 2023-02-17  发布在  Go
关注(0)|答案(1)|浏览(101)
    • 此问题在此处已有答案**:

strings.Trim is removing the letter "i" (golang)(2个答案)
Why TrimLeft doesn't work as expected?(2个答案)
2天前关闭。
有这样一个非常奇怪的场景,我使用strings.trimLeft函数从字符串的左侧开始计算块的时间,但是得到了一个意外的结果。
下面是代码

query := "INSERT INTO order (data_enum,id) VALUES (1,1);"
firstPart := "INSERT INTO order ("

// unexpected output
q := strings.TrimLeft(query, firstPart)
fmt.Println(q) // ata_enum,id) VALUES (1,1);

// expected output
q = query[len(firstPart):]
fmt.Println(q) // data_enum,id) VALUES (1,1);

这只发生在这种特定情况下,如果原始查询不同,那么输出是正确的。

query := "INSERT INTO order (id,data_enum) VALUES (1,1);"
firstPart := "INSERT INTO order ("

q := strings.TrimLeft(query, firstPart)
fmt.Println(q) // id,data_enum) VALUES (1,1);

q = query[len(firstPart):]
fmt.Println(q) // id,data_enum) VALUES (1,1);

所以我想知道这背后的原因是什么?
下面是代码段的Go Playground链接

oogrdqng

oogrdqng1#

以下是TrimLeft的文档:
TrimLeft返回字符串s的一个切片,其中割集中包含的所有前导Unicode码点都被移除。
所以它也删除了查询中的第一个d,因为d在割集中。
解决方案也来自文档:
要删除前缀,请改用TrimPrefix。

相关问题