golang中的一些实用功能
0.1、索引
https://waterflow.link/articles/1663921524839
通过使用一些通用代码来节省时间,而无需单独实现它们。以下是一些开发中经常会用到的函数实现的列表。
1、检查数组中元素是否存在
Golang 没有预定义的函数来检查数组中元素的存在。以下代码片段为您完成相同的工作。
很简单,遍历一遍数组检查元素是否存在。
package main
import "fmt"
func main() {
slice := []string{"apple", "grapes", "mango"}
if Contains(slice, "mango") {
fmt.Println("元素存在")
} else {
fmt.Println("元素不存在")
}
}
func Contains(slice []string, element string) bool {
for _, i := range slice {
if i == element {
return true
}
}
return false
}
2、检查给定的时间是否在两个时间戳之间
给定两个时间戳,用于检查当前时间是否位于两者之间。 Golang 时间包提供了一个内置函数来检查它。我们使用了 .After() 和 .Before() 方法,如果两者都为真,那么我们可以承认当前时间在给定时间之间。
package main
import (
"fmt"
"time"
)
func main() {
currentTime := time.Now()
// 当前时间的18小时后
rightTime := time.Now().Add(time.Hour * 18)
// 当前时间的10小时之前
leftTime := time.Now().Add(-time.Hour * 10)
if IsBetweenTime(currentTime, leftTime, rightTime) {
fmt.Println("当前时间在范围内")
} else {
fmt.Println("当前时间不在范围内")
}
}
func IsBetweenTime(curTime, leftTime, rightTime time.Time) bool {
if curTime.After(leftTime) && curTime.Before(rightTime) {
return true
}
return false
}
3、查找特定时区的当前时间戳
首先使用 time.LoadLocation() 加载给定时区的位置,然后将其与 time.Now.In() 一起使用,以获取给定时区的当前时间。您可以将 timeZone 变量的值修改为所需的值。
package main
import (
"fmt"
"time"
)
func main() {
timeZone := "Asia/Kolkata"
currentTime := CurrentTimeByTimeZone(timeZone)
fmt.Println("currentTime : ", currentTime)
timeZone = "Asia/ShangHai"
currentTime = CurrentTimeByTimeZone(timeZone)
fmt.Println("currentTime : ", currentTime)
}
func CurrentTimeByTimeZone(timeZone string) time.Time {
loc, _ := time.LoadLocation(timeZone)
return time.Now().In(loc)
}
4、从数组中删除重复项
我们定义了另一个切片并通过检查新切片中是否已存在该值来分配第一个值。它返回没有重复的切片。
package main
import (
"fmt"
)
func main() {
fruits := []string{"Mango", "Grapes", "Kiwi", "Apple", "Grapes"}
fmt.Println("删除重复项之前 : ", fruits)
dulicatesRemovedArray := SliceUnique(fruits)
fmt.Println("删除重复项之后 : ", dulicatesRemovedArray)
}
func SliceUnique(intSlice []string) []string {
keys := make(map[string]bool)
list := make([]string, 0)
for _, entry := range intSlice {
if _, value := keys[entry]; !value {
keys[entry] = true
list = append(list, entry)
}
}
return list
}
5、随机打乱数组
要打乱数组中的元素,我们必须使用随机数然后交换元素。
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
array := []string{"India", "US", "Canada", "UK"}
fmt.Println("Origin array : ", array)
shuffleArr := Shuffle(array)
fmt.Println("Shuffled array : ", shuffleArr)
}
func Shuffle(array []string) []string {
// New 返回一个使用来自 src 的随机值的新 Rand 生成其他随机值
random := rand.New(rand.NewSource(time.Now().UnixNano()))
for i := len(array) - 1; i > 0; i-- {
// Intn 以 int 形式返回半开区间 [0,n) 中的非负伪随机数。
j := random.Intn(i + 1)
array[i], array[j] = array[j], array[i]
}
return array
}
6、反转数组
将数组从中间(长度/ 2)分开,并在 pos 变量的帮助下交换两个跨边界的位置。即如果有长度为 6 的数组,则交换将按数组 [2] <-> 数组 [3]、数组 [1] <-> 数组 [4] 和数组 [0] <-> 数组 [5] 的顺序进行]。
package main
import (
"fmt"
)
func main() {
a := []int{1, 2, 3, 4, 5, 6, 7}
reverseArray := ReverseSlice(a)
fmt.Println("反转后 : ", reverseArray)
}
func ReverseSlice(a []int) []int {
for i := len(a)/2 - 1; i >= 0; i-- {
pos := len(a) - 1 - i
a[i], a[pos] = a[pos], a[i]
}
return a
}
7、将切片转换为某个分隔符分隔的字符串
package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
result := ConvertSliceToString("&", []int{10, 20, 30, 40})
fmt.Println("Slice converted string : ", result)
}
func ConvertSliceToString(separator string, input []int) string {
var output []string
for _, i := range input {
output = append(output, strconv.Itoa(i))
}
return strings.Join(output, separator)
}
8、将给定的字符串转换为snake_case
package main
import (
"fmt"
"regexp"
"strings"
)
func main() {
snakeCase := ConvertToSnakeCase("ILikeProgrammingINGo")
fmt.Println("String in snake case : ", snakeCase)
}
func ConvertToSnakeCase(input string) string {
var matchChars = regexp.MustCompile("(.)([A-Z][a-z]+)")
var matchAlpha = regexp.MustCompile("([a-z0-9])([A-Z])")
snake := matchChars.ReplaceAllString(input, "${1}_${2}")
snake = matchAlpha.ReplaceAllString(snake, "${1}_${2}")
return strings.ToLower(snake)
}
golang中的一些实用功能的更多相关文章
- golang中的race检测
golang中的race检测 由于golang中的go是非常方便的,加上函数又非常容易隐藏go. 所以很多时候,当我们写出一个程序的时候,我们并不知道这个程序在并发情况下会不会出现什么问题. 所以在本 ...
- 基础知识 - Golang 中的正则表达式
------------------------------------------------------------ Golang中的正则表达式 ------------------------- ...
- golang中的reflect包用法
最近在写一个自动生成api文档的功能,用到了reflect包来给结构体赋值,给空数组新增一个元素,这样只要定义一个input结构体和一个output的结构体,并填写一些相关tag信息,就能使用程序来生 ...
- Golang中的坑二
Golang中的坑二 for ...range 最近两周用Golang做项目,编写web服务,两周时间写了大概五千行代码(业务代码加单元测试用例代码).用Go的感觉很爽,编码效率高,运行效率也不错,用 ...
- Golang 中的坑 一
Golang 中的坑 短变量声明 Short variable declarations 考虑如下代码: package main import ( "errors" " ...
- google的grpc在golang中的使用
GRPC是google开源的一个高性能.跨语言的RPC框架,基于HTTP2协议,基于protobuf 3.x,基于Netty 4.x. 前面写过一篇golang标准库的rpc包的用法,这篇文章接着讲一 ...
- Golang中Struct与DB中表字段通过反射自动映射 - sqlmapper
Golang中操作数据库已经有现成的库"database/sql"可以用,但是"database/sql"只提供了最基础的操作接口: 对数据库中一张表的增删改查 ...
- Golang中WaitGroup使用的一点坑
Golang中WaitGroup使用的一点坑 Golang 中的 WaitGroup 一直是同步 goroutine 的推荐实践.自己用了两年多也没遇到过什么问题.直到一天午睡后,同事扔过来一段奇怪的 ...
- Golang中使用lua进行扩展
前言 最近在项目中需要使用lua进行扩展,发现github上有一个用golang编写的lua虚拟机,名字叫做gopher-lua.使用后发现还不错,借此分享给大家. 数据类型 lua中的数据类型与go ...
随机推荐
- Chapter 02 - Let's Get Started(C#篇)
详细解释,书上有哈.直接上代码和结果. Xcode下的自定义类 (通过new file-> cocoa class创建,保持和书中名字一样RandomController),自定义的fields ...
- redis安装与连接
安装(centos7): yum install redis 启动与停止: systemctl start redis. service systemctl stop redis.service 修改 ...
- Taurus.MVC 微服务框架 入门开发教程:项目集成:1、服务端:注册中心、网关(提供可运行程序下载)。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
- python九周周末总结
python九周周末总结 UDP协议 udp协议的交互模式服务端不需要考虑客户端是否退出,你发多少那么他就会按照你发的东西直接去传输给客户端不存在黏包现象 服务端: import socket ser ...
- Find-Vulnerability 自动化探测扫描工具简介
Fvuln 简介 F-vuln(全称:Find-Vulnerability)是一款自动化探测扫描工具,主要适用于日常安全服务.渗透测试人员和RedTeam红队人员使用 它集合的功能包括: 存活IP探测 ...
- CF1511G Chips on a Board (倍增)
题面 原题题面 转化方便版题意: 有 n n n 堆石子,第 i i i 堆有 c i ∈ [ 1 , m ] c_i\in [1,m] ci∈[1,m] 个石子,有 q q q 次询问,每次询问给 ...
- LOJ#6089 小 Y 的背包计数问题 - DP精题
题面 题解 (本篇文章深度剖析,若想尽快做出题的看官可以参考知名博主某C202044zxy的这篇题解:https://blog.csdn.net/C202044zxy/article/details/ ...
- vsftpd 操作手册 - 完整版
vsftpd # 目录 - ftp 简介 - vsftpd 简介 - vsftpd 安装&卸载 - vsftpd 配置文件 - vsftpd 认证模板 - vsftpd 配置模板 # 目录详解 ...
- 【读书笔记】15《The Bridge of Madison County》
廊桥遗梦(梅丽尔·斯特里普主演) 罗伯特·詹姆斯·沃勒 99个笔记 The Beginning 美[|diˈklainz]v 辞谢,谢绝(邀请等)( decline的第三人称单数 );(道路.物体 ...
- KingbaseES触发器介绍
触发器及其作用 触发器(trigger)是用户定义的由事件驱动的特殊过程.一旦定义,所有用户的对应操作均会由服务器自动激活相应的触发器,在DBMS核心层进行集中的完整性控制. 触发器类似于约束,但是比 ...