

使用 strings.TrimLeft app- 的a哪去了?
1 loveuer 2023-08-29 18:44:50 +08:00 看文档。。。 |
2 hsfzxjy 2023-08-29 18:46:28 +08:00 via Android 热知识:TrimLeft 不等于 RemovePrefix ,在任何语言都是 |
3 deplivesb 2023-08-29 18:49:56 +08:00 给你贴一个 GPT 的回答: `strings.TrimLeft` 函数在 Go 语言( Golang )的标准库中用于从字符串的左侧(开头)移除一组指定的字符。这个函数接受两个字符串参数:第一个是原始字符串,第二个是包含所有需要从原始字符串左侧移除的字符的字符串。 下面是一个简单的示例: ```go package main import ( "fmt" "strings" ) func main() { originalString := " Hello, world! " trimmedString := strings.TrimLeft(originalString, " ") fmt.Printf("Original: '%s'\n", originalString) fmt.Printf("Trimmed: '%s'\n", trimmedString) } ``` 在这个例子中,`strings.TrimLeft` 函数会移除 `originalString` 左侧的所有空格字符。输出将是: ``` Original: ' Hello, world! ' Trimmed: 'Hello, world! ' ``` 注意,该函数并不会修改原始字符串。相反,它会返回一个新的字符串。 此外,第二个参数是一个字符集,不是一个前缀字符串。也就是说,`strings.TrimLeft` 函数会从左侧移除所有在该字符集中的字符,而不是移除一个特定的前缀。例如: ```go result := strings.TrimLeft("123abc456", "123") ``` `result` 的值会是 `"abc456"`,因为所有在 `"123"` 字符集中的字符都会从 `"123abc456"` 的左侧被移除。 |
4 deplivesb 2023-08-29 18:53:05 +08:00 都“后端高级研发工程师” 了,我不信你不会查文档。 https://pkg.go.dev/strings#TrimLeft |
5 bruce0 2023-08-29 19:19:03 +08:00 你想要的 应该是 `strings.TrimPrefix()` 这个 `strings.TrimLeft()` 我以前也没注意到 看了一下文档才了解 |
6 jiang1234321 2023-08-29 19:20:33 +08:00 没复现,能贴一下源码吗 |
7 j0hnj 2023-08-29 19:52:34 +08:00 文档不看,issue 倒是提的很快 https://github.com/golang/go/issues/62344 |
8 PlG5sBkXD1ziLeGB 2023-08-29 20:17:10 +08:00 via iPhone 有这发帖和提 issue 的时间,但凡你点进去看看文档呢。。。无语 |
9 lsk569937453 2023-08-29 20:18:49 +08:00 @j0hnj 笑死。。。。 |
10 Ericcccccccc 2023-08-29 20:29:47 +08:00 这些函数的源码都挺短的吧. |
11 yuk1no 2023-08-29 20:39:38 +08:00 via iPhone RTFM |
12 slowman 2023-08-29 20:41:29 +08:00 离谱,也太水了吧/div> |
13 Xusually 2023-08-29 20:46:03 +08:00 Doc 里直接写了:To remove a prefix, use TrimPrefix instead. 假如你的 authorization 是"Bearer aeerrr"的话,你会更 rz 的 |
15 nulIptr 2023-08-29 20:56:47 +08:00 哈哈哈这种事情我肯定会先反思反思自己的问题,而不是直接去开个 issue |
16 zlstone 2023-08-29 20:58:52 +08:00 这就是后端高级研发工程师吗 |
17 Baloneo 2023-08-29 21:27:09 +08:00 fmt.Println(strings.TrimLeft("Abc123-c12456", "Abc123-")) >> 456 |
18 orangie 2023-08-29 21:44:50 +08:00 Goland 都提示你了,第二个参数叫做 cutset ,当作字符集合,不是当作字符串。 |
19 realpg PRO 程序员懂简单英语的重要性: cutset |
20 skywalkerfc 2023-08-29 22:32:30 +08:00 |
21 learningman 2023-08-29 22:51:14 +08:00 via Android 居然有人发现行为不符合预期的第一反应是怀疑标准库,也许这就是大师吧 |
22 realpg PRO @learningman #21 好不容易学会了 github 提 issue 总得找个地方试试 |
23 dyllen 2023-08-29 23:24:10 +08:00 这么基础的库,用了那么多年了,怎么可能有这样低级的错误 |
24 dobelee 2023-08-29 23:47:06 +08:00 trim 都是用字符集合吧,golang 之外也是一样的。 这么常用且实现简单的标准库函数,开局就是一个 issue 。 |
25 Jirajine 2023-08-30 01:40:01 +08:00 via Android @dobelee #24 不一样。把 string 当做 char set ,要么是 API 设计有问题,要么是语言类型系统不足是这种设计成为常规做法。 比如 rust 里类似的函数就没有这种坑 https://doc.rust-lang.org/std/string/struct.String.html#method.trim_start_matches 它的参数类型是 Pattern ,可以是 char/&[char]/&str/fn ,而不是一个当做 char set 的 string 。 |
26 flyqie 2023-08-30 02:49:59 +08:00 你但凡翻下函数签名。。。 func TrimLeft(s, cutset string) string 是 cutset 而不是 prefix 。。。 |
28 iseki 2023-08-30 05:21:07 +08:00 @dobelee 反正我的话确实只在 Go 里见到了这样的设计,以至于 Go 里所有的文本相关函数我都长了个心眼,其它语言有哪些类似的设计吗?可以举一下,确实没见过 |
29 westoy 2023-08-30 05:45:12 +08:00 @iseki php 的 trim c#的 Trim python 的 str.strip ruby 的 str.delete java apache commons 的 StringUtils.strip koltin 的 trim |
30 largezhou 2023-08-30 08:22:32 +08:00 trim 都是这样的,不过我们之前代码中也出现了类似的错误用法 |
31 ysz1121 OP 感谢大佬们的讲解,学习了! |
32 bruce0 2023-08-30 09:04:55 +08:00 |
33 PTLin 2023-08-30 09:09:21 +08:00 @bruce0 op 这种人其实不少,我以前见过一个人碰到问题第一反应就是去论坛,issues 里提问,而不是自己尝试解决,甚至没人给他解决的话他就喷这个东西设计的有问题,喷这个东西垃圾。。。 |
34 strong>bruce0 2023-08-30 09:45:00 +08:00 @PTLin 参与过几个开源社区, 这种遇到的不多, 大多数人还是挺友好的, 如果帮助他们解决了问题, 一般都会感谢, 没解决也不会抱怨, 毕竟大多数社区都是用爱发电的. 上上周吧, 我在用 redis 的时候, 发现 acl 的 rule 重写有点问题, 全网 acl 相关的文章太少了(不论中文还是英文) 官方文档也没有 相关的解答, 我就去 redis 社区, 提了一个 issue 先把我遇到的问题,redis 版本, 复现路径 描述了一下, 然后说了我预期的结果, 就怕不是 bug 闹了乌龙, 丢人丢到国外去, 社区的那个大佬 回复挺快的, 第二天就回复 是个 bug, 晚上顺手就给修了 |
36 flyqie 2023-08-30 11:56:53 +08:00 via Android @bruce0 #32 哈哈哈,issue 提了也没啥用啊,标准库都已经这样了提 issue 也改变不了设计啊,不然兼容性直接打破了。 我唯一能想到的不用切片的理由就是。。字符串可能性能比较好容易做 cache ?但好像标准库也没 cache 啊。。 |
37 cooltechbs 2023-08-30 12:04:20 +08:00 via Android 楼主写 Go 多久了? Go 相比 C++、Java 之类的语言,一大好处就是标准库代码都摆在明面上(安装就有),也含有和官网一样的文档,查阅非常方便。RTFSC 对于 Go 开发者应该不是玩笑,是日常。 |