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. 从零搭建云原生技术kubernetes(K8S)环境-通过kubesPhere的AllInOne方式

    前言 k8s云原生搭建,步骤有点多,但通过kubesphere,可以快速搭建k8s环境,同时有一个以 Kubernetes 为内核的云原生分布式操作系统-kubesphere,本文将从零开始进行kub ...

  2. screen -中断保留-屏幕同步

    工作中经常用到 screen 用处: 中断保留 和屏幕同步. yum install screen screen -S name 创建 -ls 查看 -r 恢复 -x 同屏

  3. Linux上安装jdk 1.8

    1.下载jdk1.8 这里贴个oracle官网链接 https://www.oracle.com/java/technologies/downloads/  里面的jdk版本基本都有 2.将压缩包上传 ...

  4. python进阶__struct数据处理详解

    一.此模块可以执行 Python 值和以 Python bytes 对象表示的 C 结构之间的转换 二.打包解包时,需要按照特定的方式来打包或者解包.该方式就是格式化字符串,它指定了数据类型,除此之外 ...

  5. openstack中Nova组件简解

    一.Nova组件概述 计算节点通过Nova Computer进行虚拟机创建,通过libvirt调用kvm创建虚拟机,nova之间通信通过rabbitMQ队列进行通信. Nova位于Openstack架 ...

  6. Centos_yum使用

    安装应用 yum install -y xxx -y 表示自动yes 卸载应用 yum -y remove xxx -y 表示自动yes 查看已安装的应用 yum list installed

  7. 干货分享!JAVA诊断工具Arthas在Rainbond上实践~

    别再担心线上 Java 业务出问题怎么办了,Arthas 帮助你解决以下常见问题: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 ...

  8. ThreadLocal源码学习笔记

    系列文章目录和关于我 一丶ThreadLocal结构 每一个Thread对象都有一个名为threadLocals类型为ThreadLocal.ThreadLocalMap的属性,ThreadLocal ...

  9. winform,xml读取与写入

    创建两个xml文件,一个 xml做为模板配置项,另一个做为临时接收数据. private static string localPath = System.Environment.CurrentDir ...

  10. SQL语句中过滤条件放在on、where、having的区别和联系

    摘要:SQL语句中,过滤条件放在不同筛选器on.where和having的区别和联系. 综述   在<SQL语句中过滤条件放在on和where子句中的区别和联系>中,介绍了多表关联SQL语 ...