1.检查数组中是否存在元素
golang没有内置的检测元素存在的函数。遍历切片并将过滤元素与数组匹配,如果它存在于数组中,它将返回否则为 false。
import "fmt"
func main() {
// create an array of strings
slice := []string{"apple", "orange", "mango"}
// You can check by changing element to "orange"
if Contains(slice, "mango") {
fmt.Println("Slice contains element")
} else {
fmt.Println("Slice doesn't contain element")
}
}
func Contains(slice []string, element string) bool {
for _, i := range slice {
if i == element {
return true
}
}
return false
}
output:
Slice contains element
2.检查给定时间是否属于两个时间戳之间
使用下面的函数检查给定的时间是否属于两个时间戳之间。
import (
"time"
"fmt"
)
func main() {
currentTime := time.Now()
// Time after 18 hours of currentTime
futureTime := time.Now().Add(time.Hour * 18)
// Time after 10 hours of currentTime
intermediateTime := time.Now().Add(time.Hour * 10)
if intermediateTime.After(currentTime) && intermediateTime.Before(futureTime) {
fmt.Println("intermediateTime is between currentTime and futureTime")
} else {
fmt.Println("intermediateTime is not in between currentTime and futureTime")
}
}
output:
intermediateTime is between currentTime and futureTime
给定两个时间戳,用于检查当前时间是否位于两者之间。Golang 时间包提供了一个内置的功能来检查它。我们用过After Before方法如果两者都为真,那么当前时间在给定时间之间。
3. 查找特定时区的当前时间戳
import (
"time"
"fmt"
)
func main() {
timeZone := "Asia/Shanghai"
location, _ := time.LoadLocation(timeZone)
kKLocation, _ := time.LoadLocation("Asia/Kolkata")
fmt.Println(time.Now())
fmt.Println(time.Now().In(location))
fmt.Println(time.Now().In(kKLocation)) // "Asia/Kolkata" 加尔各答 印度著名港口
}
output:
2022-08-27 09:44:40.674908 +0800 CST m=+0.001288835
2022-08-27 09:44:40.675057 +0800 CST
2022-08-27 07:14:40.675063 +0530 IST
4. 用一个较小的数字除以一个较大的数字
如果将一个较小的整数除以一个较大的整数,结果是0,可以使用下面的备选方案作为解决方案。
import "fmt"
func main() {
smallerNo := 5
largerNo := 25
result := float32(smallerNo) / float32(largerNo)
fmt.Println("result : ", result)
}
output:
result : 0.2
5. 从数组中删除重复项
新定义了一个分片,并通过检查该值是否已经存在于新分片中来分配,返回没有重复的分片。
import "fmt"
func main() {
// define array of strings
fruits := []string{"Mango", "Grapes", "Kiwi", "Apple", "Grapes"}
fmt.Println("Array before removing duplicates : ", fruits)
// Array after duplicates removal
dulicatesRemovedArray := RemoveDuplicatesFromSlice(fruits)
fmt.Println("Array after removing duplicates : ", dulicatesRemovedArray)
}
func RemoveDuplicatesFromSlice(intSlice []string) []string {
keys := make(map[string]struct{})
list := []string{}
for _, entry := range intSlice {
if _, ok := keys[entry]; !ok {
keys[entry] = struct{}{}
list = append(list, entry)
}
}
return list
}
output:
Array before removing duplicates : [Mango Grapes Kiwi Apple Grapes]
Array after removing duplicates : [Mango Grapes Kiwi Apple]
6. 如何对数组进行洗牌
Golang 没有一个内置的洗牌数组元素的功能,找到下面的代码片段来执行洗牌。
import "fmt"
func main() {
// shuffle array
array := []string{"India", "US", "Canada", "UK"}
Shuffle(array)
}
func Shuffle(array []string) {
// seed random for changing order of elements
random := rand.New(rand.NewSource(time.Now().UnixNano()))
for i := len(array) - 1; i > 0; i-- {
j := random.Intn(i + 1)
array[i], array[j] = array[j], array[i]
}
fmt.Println("Shuffled array : ", array)
}
output:
Shuffled array : [US India Canada UK]
要在数组中洗牌元素,我们必须使用随机的,然后交换元素。
7. 反转一个数组
import "fmt"
func main() {
a := []int{1, 2, 3, 4, 5, 6} // input int array
reverseArray := ReverseSlice(a)
fmt.Println("Reverted array : ", reverseArray) // print output
}
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
}
output:
Reverted array : [6 5 4 3 2 1]
从中间除数组(长度/2) ,并在 pos 变量的帮助下跨越边界线交换两个位置。也就是说,如果数组的长度为6,那么交换将按照array[2] <-> array [3]、array[1] <-> array [4]和array[0] <-> array [5]的顺序进行。
8. 将一个切片转换为逗号分隔的字符串
import (
"fmt"
"strings"
"strconv"
)
func main() {
result := ConvertSliceToString([]int{10, 20, 30, 40})
fmt.Println("Slice converted string : ", result)
}
func ConvertSliceToString(input []int) string {
var output []string
for _, i := range input {
output = append(output, strconv.Itoa(i))
}
return strings.Join(output, ",")
}
output:
Slice converted string : 10,20,30,40
给定一个切片作为输入,循环它并将其添加到字符串数组中,然后用逗号(,) strings.Join将生成的字符串数组连接起来。
9. 将给定的字符串转换为蛇形字符串(这个很有用)
下面的代码片段将把给定的字符串转换为蛇形格式。然而,它可以在lib库的帮助下完成,也可以在不使用lib库的情况下完成。
import (
"fmt"
"strings"
"regexp"
)
func main() {
snakeCase := ConvertToSnakeCase("ILikeProgrammingINGo123")
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)
}
output:
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个工具日常编程中应该是比较常用的,建议收藏。