• 【golang】建议收藏的golang瑞士军刀-9个工具方法


    1.检查数组中是否存在元素

    golang没有内置的检测元素存在的函数。遍历切片并将过滤元素与数组匹配,如果它存在于数组中,它将返回否则为 false。

    1. import "fmt"
    2. func main() {
    3. // create an array of strings
    4. slice := []string{"apple", "orange", "mango"}
    5. // You can check by changing element to "orange"
    6. if Contains(slice, "mango") {
    7. fmt.Println("Slice contains element")
    8. } else {
    9. fmt.Println("Slice doesn't contain element")
    10. }
    11. }
    12. func Contains(slice []string, element string) bool {
    13. for _, i := range slice {
    14. if i == element {
    15. return true
    16. }
    17. }
    18. return false
    19. }
    20. output:
    21. Slice contains element

    2.检查给定时间是否属于两个时间戳之间

    使用下面的函数检查给定的时间是否属于两个时间戳之间。

    1. import (
    2. "time"
    3. "fmt"
    4. )
    5. func main() {
    6. currentTime := time.Now()
    7. // Time after 18 hours of currentTime
    8. futureTime := time.Now().Add(time.Hour * 18)
    9. // Time after 10 hours of currentTime
    10. intermediateTime := time.Now().Add(time.Hour * 10)
    11. if intermediateTime.After(currentTime) && intermediateTime.Before(futureTime) {
    12. fmt.Println("intermediateTime is between currentTime and futureTime")
    13. } else {
    14. fmt.Println("intermediateTime is not in between currentTime and futureTime")
    15. }
    16. }
    17. output:
    18. intermediateTime is between currentTime and futureTime

    给定两个时间戳,用于检查当前时间是否位于两者之间。Golang 时间包提供了一个内置的功能来检查它。我们用过After Before方法如果两者都为真,那么当前时间在给定时间之间。

    3. 查找特定时区的当前时间戳

    1. import (
    2. "time"
    3. "fmt"
    4. )
    5. func main() {
    6. timeZone := "Asia/Shanghai"
    7. location, _ := time.LoadLocation(timeZone)
    8. kKLocation, _ := time.LoadLocation("Asia/Kolkata")
    9. fmt.Println(time.Now())
    10. fmt.Println(time.Now().In(location))
    11. fmt.Println(time.Now().In(kKLocation)) // "Asia/Kolkata" 加尔各答 印度著名港口
    12. }
    13. output:
    14. 2022-08-27 09:44:40.674908 +0800 CST m=+0.001288835
    15. 2022-08-27 09:44:40.675057 +0800 CST
    16. 2022-08-27 07:14:40.675063 +0530 IST

    4. 用一个较小的数字除以一个较大的数字

    如果将一个较小的整数除以一个较大的整数,结果是0,可以使用下面的备选方案作为解决方案。

    1. import "fmt"
    2. func main() {
    3. smallerNo := 5
    4. largerNo := 25
    5. result := float32(smallerNo) / float32(largerNo)
    6. fmt.Println("result : ", result)
    7. }
    8. output:
    9. result : 0.2

    5. 从数组中删除重复项

    新定义了一个分片,并通过检查该值是否已经存在于新分片中来分配,返回没有重复的分片。

    1. import "fmt"
    2. func main() {
    3. // define array of strings
    4. fruits := []string{"Mango", "Grapes", "Kiwi", "Apple", "Grapes"}
    5. fmt.Println("Array before removing duplicates : ", fruits)
    6. // Array after duplicates removal
    7. dulicatesRemovedArray := RemoveDuplicatesFromSlice(fruits)
    8. fmt.Println("Array after removing duplicates : ", dulicatesRemovedArray)
    9. }
    10. func RemoveDuplicatesFromSlice(intSlice []string) []string {
    11. keys := make(map[string]struct{})
    12. list := []string{}
    13. for _, entry := range intSlice {
    14. if _, ok := keys[entry]; !ok {
    15. keys[entry] = struct{}{}
    16. list = append(list, entry)
    17. }
    18. }
    19. return list
    20. }
    21. output:
    22. Array before removing duplicates : [Mango Grapes Kiwi Apple Grapes]
    23. Array after removing duplicates : [Mango Grapes Kiwi Apple]

     6. 如何对数组进行洗牌

    Golang 没有一个内置的洗牌数组元素的功能,找到下面的代码片段来执行洗牌。

    1. import "fmt"
    2. func main() {
    3. // shuffle array
    4. array := []string{"India", "US", "Canada", "UK"}
    5. Shuffle(array)
    6. }
    7. func Shuffle(array []string) {
    8. // seed random for changing order of elements
    9. random := rand.New(rand.NewSource(time.Now().UnixNano()))
    10. for i := len(array) - 1; i > 0; i-- {
    11. j := random.Intn(i + 1)
    12. array[i], array[j] = array[j], array[i]
    13. }
    14. fmt.Println("Shuffled array : ", array)
    15. }
    16. output:
    17. Shuffled array : [US India Canada UK]

    要在数组中洗牌元素,我们必须使用随机的,然后交换元素。

    7. 反转一个数组

    1. import "fmt"
    2. func main() {
    3. a := []int{1, 2, 3, 4, 5, 6} // input int array
    4. reverseArray := ReverseSlice(a)
    5. fmt.Println("Reverted array : ", reverseArray) // print output
    6. }
    7. func ReverseSlice(a []int) []int {
    8. for i := len(a)/2 - 1; i >= 0; i-- {
    9. pos := len(a) - 1 - i
    10. a[i], a[pos] = a[pos], a[i]
    11. }
    12. return a
    13. }
    14. output:
    15. Reverted array : [6 5 4 3 2 1]

    从中间除数组(长度/2) ,并在 pos 变量的帮助下跨越边界线交换两个位置。也就是说,如果数组的长度为6,那么交换将按照array[2] <-> array [3]、array[1] <-> array [4]和array[0] <-> array [5]的顺序进行。

    8. 将一个切片转换为逗号分隔的字符串

    1. import (
    2. "fmt"
    3. "strings"
    4. "strconv"
    5. )
    6. func main() {
    7. result := ConvertSliceToString([]int{10, 20, 30, 40})
    8. fmt.Println("Slice converted string : ", result)
    9. }
    10. func ConvertSliceToString(input []int) string {
    11. var output []string
    12. for _, i := range input {
    13. output = append(output, strconv.Itoa(i))
    14. }
    15. return strings.Join(output, ",")
    16. }
    17. output:
    18. Slice converted string : 10,20,30,40

    给定一个切片作为输入,循环它并将其添加到字符串数组中,然后用逗号(,) strings.Join将生成的字符串数组连接起来。

    9. 将给定的字符串转换为蛇形字符串(这个很有用)

    下面的代码片段将把给定的字符串转换为蛇形格式。然而,它可以在lib库的帮助下完成,也可以在不使用lib库的情况下完成。

    1. import (
    2. "fmt"
    3. "strings"
    4. "regexp"
    5. )
    6. func main() {
    7. snakeCase := ConvertToSnakeCase("ILikeProgrammingINGo123")
    8. fmt.Println("String in snake case : ", snakeCase)
    9. }
    10. func ConvertToSnakeCase(input string) string {
    11. var matchChars = regexp.MustCompile("(.)([A-Z][a-z]+)")
    12. var matchAlpha = regexp.MustCompile("([a-z0-9])([A-Z])")
    13. snake := matchChars.ReplaceAllString(input, "${1}_${2}")
    14. snake = matchAlpha.ReplaceAllString(snake, "${1}_${2}")
    15. return strings.ToLower(snake)
    16. }
    17. output:
    18. String in snake case : i_like_programming_in_go123
    var matchChars = regexp.MustCompile("(.)([A-Z][a-z]+)")   // 匹配 ${1}=(前面任意字符) ${2}=(大写+小写...) 分割
    var matchAlpha = regexp.MustCompile("([a-z0-9])([A-Z])")  // 匹配 ${1}=(数字或者小写) ${2}=(大写) 分割

    使用字母、数字和特殊字符编译正则表达式,然后用已编译的正则表达式替换给定的字符串以下划线(_),它将在所需位置添加 _。

    10. 小结

    9个工具日常编程中应该是比较常用的,建议收藏。

  • 相关阅读:
    Javashop多用户商城系统源码
    制作一个简单HTML大学生抗疫感动专题网页(HTML+CSS)
    java编程基础总结——23.Set接口及其实现子类
    Python学习笔记-语言基础
    Python 笔记03(多线程)
    20_ue4实现键盘控制物体自转(蓝图通讯2)
    【sfu】回调接收测拼装的H264 帧
    prompt(1) to win -xss学习
    代码随想录算法训练营第四十五天丨 动态规划part08
    Django视图与路由
  • 原文地址:https://blog.csdn.net/qfzhangwei/article/details/126554053