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 ...
随机推荐
- Jittered采样类定义和测试
抖动采样算法测试,小图形看不出什么明显区别,还是上代码和测试图吧. 类声明: #pragma once #ifndef __JITTERED_HEADER__ #define __JITTERED_H ...
- redis安装与连接
安装(centos7): yum install redis 启动与停止: systemctl start redis. service systemctl stop redis.service 修改 ...
- 基于webgl(threejs)的路面编辑
楔子 在很多应用中,特别是一些园区类的应用. 都需要对园区的地面 环境进行展示,路面就是地面的一部分. 通常的做法是,都是建模的时候把相关的元素都建好,然后导入到展示系统中进行展示. 不过有些情况下, ...
- LuoguP5022 旅行 (割点,基环树)
// luogu-judger-enable-o2 #include <cstdio> //#include <iostream> #include <cstring&g ...
- TypeScript 项目报错 Unknown file extension ".ts"
下图是该问题的详细报错截图,经过多次捣鼓,初步猜测是模块有问题,要用 ES Module 还真是曲折,最不容易出错的就是 CommonJS 模块: 在百度.Bing 上搜索了好久的帖子也都没有相关的解 ...
- Spring源码-xml解析
Spring使用SAX解析xml.SAX的全称是Simple APIs for XML,也即XML简单应用程序接口.与DOM不同,SAX提供的访问模式是一种顺序模式,这是一种快速读写XML数据的方式. ...
- 学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(上)
学习ASP.NET Core Blazor编程系列一--综述 一.概述 Blazor 是一个生成交互式客户端 Web UI 的框架: 使用 C# 代替 JavaScript 来创建信息丰富的交互式 U ...
- 开发个RTMP播放器居然这么难?RTMP播放器对标和考察指标
好多开发者提到,RTMP播放器,不知道有哪些对标和考察指标,以下大概聊聊我们的一点经验,感兴趣的,可以关注 github: 1. 低延迟:大多数RTMP的播放都面向直播场景,如果延迟过大,严重影响体验 ...
- HDFS 高可用分布式环境搭建
HDFS 高可用分布式环境搭建 作者:Grey 原文地址: 博客园:HDFS 高可用分布式环境搭建 CSDN:HDFS 高可用分布式环境搭建 首先,一定要先完成分布式环境搭建 并验证成功 然后在 no ...
- EntityFrameworkCore 模型自动更新(下)
话题 上一篇我们讨论到获取将要执行的迁移操作,到这一步为止,针对所有数据库都通用,在此之后需要生成SQL脚本对于不同数据库将有不同差异,我们一起来瞅一瞅 SQLite脚本生成差异 在上一篇拿到的迁移操 ...