花开不停 花开不停
首页
  • 追忆杂谈
  • 书信往来
  • 旅行记录
  • 文定之喜
  • 黄金屋-颜如玉
  • 程序化广告
  • 禅茶一味
  • 随写编年
  • 家人物语
  • 追忆青春
  • 大千世界
  • Shell
  • Java
  • Spark
  • Hadoop
  • ClickHouse
  • MySQL
  • PostgreSQL
  • MongoDB
  • 调度器
  • Zookeeper
  • Kafka
  • Flume
  • 学习周刊
关于
  • 分类
  • 标签
  • 归档
开往 (opens new window)

花开不停

此心光明,亦复何言
首页
  • 追忆杂谈
  • 书信往来
  • 旅行记录
  • 文定之喜
  • 黄金屋-颜如玉
  • 程序化广告
  • 禅茶一味
  • 随写编年
  • 家人物语
  • 追忆青春
  • 大千世界
  • Shell
  • Java
  • Spark
  • Hadoop
  • ClickHouse
  • MySQL
  • PostgreSQL
  • MongoDB
  • 调度器
  • Zookeeper
  • Kafka
  • Flume
  • 学习周刊
关于
  • 分类
  • 标签
  • 归档
开往 (opens new window)
  • Shell编程

  • Java编程笔记

    • 开发技巧

      • go日常开发代码片段
        • 获取终端输入
        • 生成一个随机数
        • 获取主机IP
        • 如何获取一周前,一天前的时间
        • 如何判断一个字符串是否在切片列表里
      • 根据FileName获取 要求格式的子File列表对象
      • 计算两个坐标之间的距离
      • 获取配置文件信息
      • Java加密解密
      • RocksDB应用
      • Java IO读写文件
  • Spark

  • Hadoop

  • ClickHouse

  • MySQL

  • PostgreSQL

  • MongoDB

  • 调度器

  • Zookeeper

  • Kafka

  • Flume

  • 编程世界
  • Java编程笔记
  • 开发技巧
花开不停
2023-05-09
目录

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

# 生成一个随机数

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

# 获取主机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

执行效果如下:

[root@ops-eryajf-test-1 test]$go run main.go
10.3.0.41
1
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

上边例子比较有意义的是一周之前,一天之前或者一月之前的算法,更多用如下方式:

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

# 如何判断一个字符串是否在切片列表里

有时候我们会通过遍历拿到数据,但是这些数据当中的部分内容是我们特别关心的,这个时候就出现了一个场景:遍历的时候如何判断字符串是否在自己关心的列表当中?

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

这个时候我们就可以借助于上边的这个小工具来快速过滤或者判断对应的字符串是否是自己想要的了。

#go
上次更新: 2023/06/07, 18:26:58

← linux的压缩与解压(zip、gz、tar.gz) 根据FileName获取 要求格式的子File列表对象→

最近更新
01
2025-05-26当我意识到我变得自私、暴躁、情绪不受控制 原创
05-26
02
clickhouse版本升级的语法变动21.8.9.1至23.8.9.1 原创
04-22
03
2025-03-28拍婚纱照 原创
04-02
更多文章>
Theme by Vdoing | Copyright © 2023-2025 | 京ICP备2023013437号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式