主要就是借助了原始的数组类型以及 toByteArray/toString
字节数组和字符串的转换函数实现的 。
class Strings{// concatenates the elements of its first argument to create a single string. The separator// string sep is placed between elements in the resulting string.string join(string[] elems, string sep){if (len(elems) == 0) {return "";}if (len(elems) == 1) {return elems[0];}byte[] bs = toByteArray(sep);int n = len(bs) * (len(elems) -1);for (int i=0; i < len(elems); i++) {string s = elems[i];byte[] bs = toByteArray(s);n = n + len(bs);}StringBuilder sb = StringBuilder();sb.grow(n);string first = elems[0];sb.writeString(first);string[] remain = elems[1:len(elems)];for(int i=0; i < len(remain); i++){sb.writeString(sep);string r = remain[i];sb.writeString(r);}return sb.String();}// tests whether the string s begins with prefix.bool hasPrefix(string s, string prefix){byte[] bs = toByteArray(s);byte[] bp = toByteArray(prefix);return len(bs) >= len(bp) && toString(bs[0:len(bp)]) == prefix;}}
Strings
工具类也是类似的 , 都是一些内置函数的组合运用;
在写标准库的过程中还会有额外收获,可以再次阅读一遍 Go 标准库的实现流程,换了一种语法实现出来,会加深对 Go 标准库的理解 。
所以欢迎感兴趣的朋友向 GScript
贡献标准库,由于我个人精力有限,实现过程中可能会发现缺少某些内置函数或数据结构,这也没关系 , 反馈 issue
后我会尽快处理 。
由于目前本文相关资源链接GScript
还不支持包管理,所以新增的函数可以创建Class
来实现,后续支持包或者是namespace
之后直接将该Class
迁移过去即可 。
- GScript 源码:https://github.com/crossoverJie/gscript
- Playground 源码:https://github.com/crossoverJie/gscript-homepage
- GScript Docker地址:https://hub.docker.com/r/crossoverjie/gscript
推荐阅读
- k8s 中的 service 如何找到绑定的 Pod 以及如何实现 Pod 负载均衡
- 小米手环如何正确使用(小米手环怎么用教程)
- 小米手环的功能及如何使用(小米一代手环功能)
- DNF中如何获取传说徽章(dnf普通徽章怎么获取)
- 如何用手机数据连接电脑(怎么直接用手机连接电脑)
- 手机如何连接电脑界面(手机连接电脑设置界面)
- 如何使用 pyqt 读取串口传输的图像
- 我的世界如何驯马(我的世界里马如何驯骑)
- 我的世界马怎么驯服怎么判断马被完全驯服(我的世界如何驯服马教程)
- 如何更新电脑的显卡驱动(笔记本显卡驱动要不要更新)