
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
使用下面的函数检查给定的时间是否属于两个时间戳之间。
- 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方法如果两者都为真,那么当前时间在给定时间之间。
- 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
如果将一个较小的整数除以一个较大的整数,结果是0,可以使用下面的备选方案作为解决方案。
- import "fmt"
-
- func main() {
- smallerNo := 5
- largerNo := 25
- result := float32(smallerNo) / float32(largerNo)
- fmt.Println("result : ", result)
- }
-
-
- output:
- result : 0.2
新定义了一个分片,并通过检查该值是否已经存在于新分片中来分配,返回没有重复的分片。
- 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]
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]
要在数组中洗牌元素,我们必须使用随机的,然后交换元素。
- 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]的顺序进行。
- 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将生成的字符串数组连接起来。
下面的代码片段将把给定的字符串转换为蛇形格式。然而,它可以在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}=(大写) 分割
使用字母、数字和特殊字符编译正则表达式,然后用已编译的正则表达式替换给定的字符串以下划线(_),它将在所需位置添加 _。
9个工具日常编程中应该是比较常用的,建议收藏。