go日常开发代码片段
文章发布较早,内容可能过时,阅读注意甄别。
# 获取终端输入
一般情况下,我们使用 fmt 包的 scan 方法来获取终端输入内容,但是这可能会有一个问题,如果输入内容有空格或者换行,就不适用了,因此,可以通过 bufio 来实现获取输入的功能。
package main
import (
"bufio"
"fmt"
"os"
)
func input1() {
var s string
fmt.Print("请输入内容:")
fmt.Scanln(&s)
fmt.Printf("输入的内容为:%s\n", s)
}
func input2() {
var s string
reader := bufio.NewReader(os.Stdin)
s, _ = reader.ReadString('\n') //指定获取输入时的分隔标识
fmt.Printf("输入的内容为:%s\n", s)
}
func main() {
//问题在于,当用户输入内容为 a b c时,程序获取到的只有a,亦即空格即被截断
// input1()
input2()
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 生成一个随机数
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
// 设置一个时间种子
rand.Seed(time.Now().UnixNano())
// 表示随机返回一个0到100之间的数字
s := rand.Intn(100)
fmt.Println(s)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 获取主机 IP
package main
import (
"fmt"
"net"
"strings"
)
func GetOutboundIP() (ip string, err error) {
conn, err := net.Dial("udp", "8.8.8.8:80")
if err != nil {
return
}
defer conn.Close()
localAddr := conn.LocalAddr().(*net.UDPAddr)
//fmt.Println(localAddr.String())
ip = strings.Split(localAddr.IP.String(), ":")[0]
return
}
func main() {
ip, err := GetOutboundIP()
if err != nil {
fmt.Println(err)
}
fmt.Println(ip)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
执行效果如下:
[root@ops-eryajf-test-1 test]$go run main.go
10.3.0.41
1
2
2
# 如何获取一周前,一天前的时间
获取一天前或者一周前应该是日常当中经常遇到的场景,这里说一下 go 当中的实现方式:
package main
import (
"fmt"
"time"
)
func main() {
//Add方法和Sub方法是相反的,获取t0和t1的时间距离d是使用Sub
//将t0加d获取t1就是使用Add方法
k := time.Now()
//一天之前
d, _ := time.ParseDuration("-24h")
fmt.Println(k.Add(d))
//一周之前
fmt.Println(k.Add(d * 7))
//一月之前
fmt.Println(k.Add(d * 30))
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
上边例子比较有意义的是一周之前,一天之前或者一月之前的算法,更多用如下方式:
t := time.Now()
// 计算前一天, 当前时间加上0年,0月,-1天
t1 := t.AddDate(0,0,-1)
// 计算上一个月时间,当前时间加上0年,-1月,0天
t1 := t.AddDate(0,-1,0)
1
2
3
4
5
6
2
3
4
5
6
# 如何判断一个字符串是否在切片列表里
有时候我们会通过遍历拿到数据,但是这些数据当中的部分内容是我们特别关心的,这个时候就出现了一个场景:遍历的时候如何判断字符串是否在自己关心的列表当中?
func Find(slice []string, val string) (int, bool) {
for i, item := range slice {
if item == val {
return i, true
}
}
return -1, false
}
func main() {
dataList := []string{"test1", "test2"}
dataStr := "test1"
// 传入切片 和 要查找的字符串
_, flag := Find(dataList, dataStr)
if flag {
fmt.Println("存在 -> ", dataStr)
} else {
fmt.Println("不存在 -> ", dataStr)
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
这个时候我们就可以借助于上边的这个小工具来快速过滤或者判断对应的字符串是否是自己想要的了。
上次更新: 2024/11/19, 23:11:42