一个高效的go语言字符串转驼峰命名算法实现函数

在go语言的开发中我们经常需要对各种命名进行规范, 今天给大家介绍的是一个高效的将字符串转 驼峰命名 (即 首字母大写的命名方式)的函数。


// 字符串转驼峰命名
// @author tekintian <tekintian@gmail.com>
func CamelStr(str string) string {// 如果有 - 链接,统一将其替换为 _if strings.IndexByte(str, '-') != -1 {str = strings.Replace(str, "-", "_", -1)}//按下划线切割字符串为单词tmp := strings.Split(str, "_")for i, w := range tmp {// 判断第一个单词字母是否为小写字母if w[0] >='a' && w[0] <='z' {// 这个地方的 w[0]-32 即将单词的第一个字母转换为大写.// 利用ascii码值差来转换, 小写字母的ascii码值比大写字母的ascii码值大32tmp[i] = fmt.Sprintf("%v%v", string(w[0]-32), string(w[1:]))}// 单词首字母非大写字母的情况不需要处理}return strings.Join(tmp, "") // 将切片拼接为字符串后返回
}


   另外给大家看一个效率较低,且代码冗长的一个字符串转驼峰命名函数, 看看你能找出多少个效率低下和不规范的地方?

// 驼峰命名  问题代码
func CamelStrX(s string) string {data := make([]byte, 0, len(s))j := falsek := falsenum := len(s) - 1for i := 0; i <= num; i++ {d := s[i]if k == false && d >= 'A' && d <= 'Z' {k = true}if d >= 'a' && d <= 'z' && (j || k == false) {d = d - 32j = falsek = true}if k && d == '_' && num > i && s[i+1] >= 'a' && s[i+1] <= 'z' {j = truecontinue}data = append(data, d)}return string(data)
}

怎么样,你能看出上面代码中有多少个问题吗?  如果是你你会如何做呢?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/20948.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【python学习】Anaconda的介绍、下载及conda和pip换源方式(切换到国内镜像源)

什么是Anaconda Anaconda 是一个专为数据科学和机器学习预装了多种库的Python发行版。 提供了包管理与环境管理的功能解决了多个版本python并存的问题解决了第三方包安装问题 如何下载Anaconda 官网地址&#xff1a;https://www.anaconda.com/ 点击右上角的 Free Download …

PostgreSQL 和Oracle锁机制对比

PostgreSQL 和Oracle锁机制对比 PostgreSQL 和 Oracle 都是业界广泛使用的关系型数据库管理系统&#xff0c;它们在锁机制方面都有独到的设计来控制并发访问&#xff0c;确保数据的一致性和完整性。下面我们详细比较一下这两个数据库系统的锁机制。 1. 锁类型 PostgreSQL P…

C语言王国——选择与循环(1)

目录 一、引言 二、选择结构 1&#xff0c;if语句 1.1&#xff0c;if...else...语句 1.2&#xff0c;多分支语句 1.3悬空else的问题 2&#xff0c;switch语句 2.1&#xff0c;switch 2.2&#xff0c;break 2.3&#xff0c;default 一、引言 写了几个C语言代码我发现C语…

ReduceTask工作机制

&#xff08;1&#xff09;Copy阶段 ReduceTask从各个MapTask上远程拷贝一片数据&#xff0c;并针对某一片数据&#xff0c;如果其大小超过一定阈值&#xff0c; 则写到磁盘上 &#xff0c;否则直接放到内存中。 &#xff08;2&#xff09;Merge阶段 在远程拷贝数据的同时 &a…

go模拟经典面试题

讲下MySQL事务 &#xff08;1&#xff09;事务的概念 事务就是对数据库执行一系列操作&#xff0c;这些操作要么全部成功执行&#xff0c;要么全部失败&#xff0c;不会存在部分成功的情况。 &#xff08;2&#xff09;事务的ACID特点 原子性&#xff1a;一个事务中的所有操…

def用法 Python:深度解析函数定义与调用的奥秘

def用法 Python&#xff1a;深度解析函数定义与调用的奥秘 在Python的编程世界中&#xff0c;def 关键字如同一座神秘的灯塔&#xff0c;照亮了我们探索函数定义与调用的道路。它不仅是创建函数的起点&#xff0c;更是构建高效、可维护代码的关键所在。本文将通过四个方面、五…

华为坤灵交换机S300, S500, S210,S220, S200, S310 如何WEB抓包

通过S系列交换机配置端口镜像实现抓包 1、应用场景 端口镜像是指将经过指定端口(源端口或者镜像端口)的报文复制一份到另一个指定端口(目的端口或者观察端口)。在网络运营与维护的过程中&#xff0c;为了便于业务监测和故障定位&#xff0c;网络管理员时常要获取设备上的业务报…

FFmpeg中视频 Filters 使用文档介绍

FFmpeg中Filters 简介 FFmpeg是一个强大的多媒体框架,它支持多种音视频编解码器、容器格式、协议等。其中,FFmpeg的Filters(过滤器)是FFmpeg中一个非常强大的功能,它允许用户对音视频数据进行各种处理,包括但不限于视频滤镜、音频效果、视频转换等。 到目前为止,FFmpeg…

Lua使用方式介绍

背景 Lua是C语言开发的脚本语言&#xff0c;设计的目的是为了嵌入到程序中&#xff0c;因此被设计得轻量小巧。Nginx配置中可以直接嵌入Lua 代码或引入Lua 文件&#xff0c;Redis支持运行Lua语句和脚本&#xff0c;Wireshark中使用Lua脚本自定义协议。 本文用于收集常用的语法…

JMeter源码解析之SplashScreen.java

JMeter源码解析之SplashScreen.java完结 SplashScreen.java主要作用 JMeter GUI启动加载界面。 文件路径 路径地址&#xff1a;…\apache-jmeter-5.1\src\core\org\apache\jmeter\SplashScreen.java 关于SplashScreen内容中的代码解析 package org.apache.jmeter;import …

队列——一种操作受限的线性表

队列 队列&#xff08;Queue&#xff09;简称队&#xff0c;也是一种操作受限的线性表&#xff0c;只允许在表的一端进行插入&#xff0c;而在表的另一端进行删除。向队列中插入元素称为入队或进队&#xff0c;删除元素称为出队或离队。队列中的元素是先进先出&#xff08;Fir…

大聪明教你学Java | 深入浅出聊 Stream.parallel()

前言 &#x1f34a;作者简介&#xff1a; 不肯过江东丶&#xff0c;一个来自二线城市的程序员&#xff0c;致力于用“猥琐”办法解决繁琐问题&#xff0c;让复杂的问题变得通俗易懂。 &#x1f34a;支持作者&#xff1a; 点赞&#x1f44d;、关注&#x1f496;、留言&#x1f4…

MySQL学习——选项文件的使用

MySQL 的许多程序都可以从选项文件&#xff08;有时也被称为配置文件&#xff09;中读取启动选项。选项文件提供了一种方便的方式来指定常用的选项&#xff0c;这样你就不必每次运行程序时都在命令行上输入这些选项。 要确定一个程序是否读取选项文件&#xff0c;你可以使用 -…

man命令的作用

man命令是Linux操作系统中一个非常实用的命令&#xff0c;它用于查看命令的手册页面&#xff0c;帮助用户了解特定命令的用法、选项和参数。这不仅对新用户在学习如何使用新命令时很有帮助&#xff0c;也方便了经验丰富的用户快速查找命令的详细信息。以下是具体介绍&#xff1…

[论文精读]Supervised Community Detection with Line Graph Neural Networks

论文网址:[1705.08415] Supervised Community Detection with Line Graph Neural Networks (arxiv.org) 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 ⭐内涵大量可视…

高速模拟信号链的设计学习

目录 概述&#xff1a; 定义&#xff1a; 断开&#xff1a; 链路设计&#xff1a; 结论&#xff1a; 概述&#xff1a; 由于对共模参数及其与设备之间的关联缺乏了解&#xff0c;客户仍然会提出许多技术支持问题。ADC数据表指定了模拟输入的共模电压要求。关于这方面没有太…

jenkins应用2

1.jenkins应用 1.jenkins构建的流程 1.使用git参数化构建&#xff0c;用标签区分版本 2.git 拉取gitlab远程仓库代码 3.maven打包项目 4.sonarqube经行代码质量检测 5.自定义制作镜像发送到远程仓库harbor 6.在远程服务器上拉取代码启动容器 这个是构建的整个过程和步骤…

C# 反射类Assembly 程序集(Assembly)用法

常见的两种程序集&#xff1a; 可执行文件&#xff08;.exe文件&#xff09;和 类库文件&#xff08;.dll文件&#xff09;。 在VS开发环境中&#xff0c;一个解决方案可以包含多个项目&#xff0c;而每个项目就是一个程序集。 他们之间是一种从属关系&#xff0c;也就是说&…

java —— 匿名内部类与 Lambda 表达式

一、匿名内部类 匿名内部类是一种没有名称的类&#xff0c;多用于只使用一次的情况&#xff0c;本质上就是其所继承的父类或接口的一个子类。 &#xff08;一&#xff09;继承普通类的情况 public class Test{public void method(){System.out.println("通用方法"…

Python与Android连接:深入探索与实现

Python与Android连接&#xff1a;深入探索与实现 在现代移动应用开发领域&#xff0c;Python和Android的结合使用为开发者带来了无限的可能性。这种跨平台的组合不仅拓宽了开发者的视野&#xff0c;也极大地提升了应用的灵活性和可扩展性。本文将从四个方面、五个方面、六个方…