- 此问题在此处已有答案**:
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链接
1条答案
按热度按时间oogrdqng1#
以下是
TrimLeft
的文档:TrimLeft返回字符串s的一个切片,其中割集中包含的所有前导Unicode码点都被移除。
所以它也删除了查询中的第一个
d
,因为d
在割集中。解决方案也来自文档:
要删除前缀,请改用TrimPrefix。