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中的一些实用功能的更多相关文章

  1. golang中的race检测

    golang中的race检测 由于golang中的go是非常方便的,加上函数又非常容易隐藏go. 所以很多时候,当我们写出一个程序的时候,我们并不知道这个程序在并发情况下会不会出现什么问题. 所以在本 ...

  2. 基础知识 - Golang 中的正则表达式

    ------------------------------------------------------------ Golang中的正则表达式 ------------------------- ...

  3. golang中的reflect包用法

    最近在写一个自动生成api文档的功能,用到了reflect包来给结构体赋值,给空数组新增一个元素,这样只要定义一个input结构体和一个output的结构体,并填写一些相关tag信息,就能使用程序来生 ...

  4. Golang中的坑二

    Golang中的坑二 for ...range 最近两周用Golang做项目,编写web服务,两周时间写了大概五千行代码(业务代码加单元测试用例代码).用Go的感觉很爽,编码效率高,运行效率也不错,用 ...

  5. Golang 中的坑 一

    Golang 中的坑 短变量声明  Short variable declarations 考虑如下代码: package main import ( "errors" " ...

  6. google的grpc在golang中的使用

    GRPC是google开源的一个高性能.跨语言的RPC框架,基于HTTP2协议,基于protobuf 3.x,基于Netty 4.x. 前面写过一篇golang标准库的rpc包的用法,这篇文章接着讲一 ...

  7. Golang中Struct与DB中表字段通过反射自动映射 - sqlmapper

    Golang中操作数据库已经有现成的库"database/sql"可以用,但是"database/sql"只提供了最基础的操作接口: 对数据库中一张表的增删改查 ...

  8. Golang中WaitGroup使用的一点坑

    Golang中WaitGroup使用的一点坑 Golang 中的 WaitGroup 一直是同步 goroutine 的推荐实践.自己用了两年多也没遇到过什么问题.直到一天午睡后,同事扔过来一段奇怪的 ...

  9. Golang中使用lua进行扩展

    前言 最近在项目中需要使用lua进行扩展,发现github上有一个用golang编写的lua虚拟机,名字叫做gopher-lua.使用后发现还不错,借此分享给大家. 数据类型 lua中的数据类型与go ...

随机推荐

  1. WebGPU的计算着色器实现冒泡排序

    大家好~本文使用WebGPU的计算着色器,实现了奇偶排序. 奇偶排序是冒泡排序的并行版本,在1996年由J Kornerup提出.它解除了每轮冒泡间的串行依赖以及每轮冒泡内部的串行依赖,使得冒泡操作可 ...

  2. flutter系列之:flutter架构什么的,看完这篇文章就全懂了

    目录 简介 Flutter的架构图 embedder engine Flutter framework Widgets Widgets的可扩展性 Widgets的状态管理 渲染和布局 总结 简介 Fl ...

  3. 60行自己动手写LockSupport是什么体验?

    60行自己动手写LockSupport是什么体验? 前言 在JDK当中给我们提供的各种并发工具当中,比如ReentrantLock等等工具的内部实现,经常会使用到一个工具,这个工具就是LockSupp ...

  4. Dynamic CRM使用FetchXML在js中查询与调用传递编码问题

    在页面交互脚本js中实现窗体交互逻辑是很常见的crm场景,一般情况下使用拓展工具RESTBuilder编辑器,可以很方便的进行操作,增删改查均能实现,但在某些较为特殊的场景下,需要根据条件去拼接查询过 ...

  5. C# 使用SIMD向量类型加速浮点数组求和运算(1):使用Vector4、Vector<T>

    作者: 目录 一.缘由 二.使用向量类型 2.1 基本算法 2.2 使用大小固定的向量(如 Vector4) 2.2.1 介绍 2.2.2 用Vector4编写浮点数组求和函数 2.3 使用大小与硬件 ...

  6. DataRow修改某一Cell的值

    发现ItemArray并不能改变DataRow的值,之前用ItemArray来复制整行数据的操作. 实际上可以直接用DataRow[]就可以直接改变对应Cell的值.

  7. PTA C语言作业

    6-1 使用函数输出一个整数的逆序数 (20 分) 本题要求实现一个求整数的逆序数的简单函数. 函数接口定义: int reverse( int number );  其中函数reverse须返回用户 ...

  8. flutter系列之:flutter中常用的container layout详解

    目录 简介 Container的使用 旋转Container Container中的BoxConstraints 总结 简介 在上一篇文章中,我们列举了flutter中的所有layout类,并且详细介 ...

  9. Kubernetes 监控:Prometheus Adpater =》自定义指标扩缩容

    使用 Kubernetes 进行容器编排的主要优点之一是,它可以非常轻松地对我们的应用程序进行水平扩展.Pod 水平自动缩放(HPA)可以根据 CPU 和内存使用量来扩展应用,前面讲解的 HPA 章节 ...

  10. kubeoperator 使用外部mysql

    1.导出 kubeoperator 的数据库 sql 文件,然后导入到外部mysql 2.正常关闭 kubeoperator 3.关闭 kubeoperator 不会影响已经部署的 k8s 集群 4. ...