Go基础:理解 Time, Epoch, Time Formatting Parsing, Random Numbers, Number Parsing, URL Parsing, sha256 Hashes, base64 Encoding in Go

让我们深入探索高级数据操作和格式化技术。

full lessons here👇:
https://programmerscareer.com/zh-cn/golang-basic-skill/

由AI生成,可能有错误,仅供参考

Topic 1.1: Golang 中的时间、时钟和 epoch

Golang 中,我们使用 time 包来处理日期和时间。这包提供了一个 Time 类型,让我们可以对日期和时间进行各种操作。

现在,你可能会问,什么是“epoch time”?Epoch 或 Unix 时间是一种描述时间点的系统。它是自 Unix epoch(1970 年 1 月 1 日 00:00:00 UTC)以来经过的秒数,减去跃秒。

让我们快速查看一个示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
package main

import (
"fmt"
"time"
)

func main() {
now := time.Now() // 当前本地时间
fmt.Printf("当前时间:%s\n", now.String())
epoch := now.Unix()
fmt.Printf("自 epoch 的秒数:%v\n", epoch)
}

在上面的代码中,time.Now() 函数返回当前日期和时间,而 Unix() 函数返回本地时间的秒数自 1970 年 1 月 1 日 UTC。

Topic 1.2: Golang 中的时间格式化和解析

Golang 使用独特的方法来格式化和解析时间。GoLang 的 layout 字符串实际上是 Unix 开发者们在 AT&T 选择 epoch 开始的时间(即零时,隐含地 01/02 03:04:05PM '06 -0700)。

如果这看起来有些不寻常,不要担心。你会习惯它。

为了格式化时间,我们使用 Time.Format(layout string) string 函数,而为了解析时间,我们使用 time.Parse(layout, value string) (Time, error) 函数。

下面是一个解释示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package main

import (
"fmt"
"time"
)

func main() {
// 获取当前时间
now := time.Now()
// 格式化日期
fmt.Println("格式化日期:", now.Format("02-Jan-2006"))
// 格式化 datetime
fmt.Println("格式化 datetime:", now.Format("02-Jan-2006 15:04:05"))
// 解析日期
date, _ := time.Parse("02-Jan-2006", "13-Feb-2023")
fmt.Println("解析日期:", date)
}

在上面的示例中,我们将当前日期和时间格式化为 DD-MMM-YYYYDD-MMM-YYYY HH:MI:SS 格式,然后解析一个日期字符串。

事情会变得更清楚。

Topic 1.3: Golang 中的随机数

生成随机数是一种常见的任务。在 GoLang 中,我们使用 math/rand 包来实现这个目的。

下面是一个示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package main

import (
"fmt"
"math/rand"
"time"
)

func main() {
// 种子随机数生成器
rand.Seed(time.Now().UnixNano())
// 生成一个随机整数
fmt.Println(rand.Intn(100))
}

在这个代码中,我们首先种子随机数生成器,以确保每次程序运行时都生成不同的序列。

然后,我们使用 rand.Intn 函数生成一个随机整数。

Topic 1.4: Golang 中的数字解析

Go 提供了内置支持来从字符串中解析数字。我们可以使用 strconv 包中的 Atoi 函数解析整数和 ParseFloat 函数解析浮点数。

下面是一个示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package main

import (
"fmt"
"strconv"
)

func main() {
// 解析字符串到 int
i, _ := strconv.Atoi("10")
fmt.Println("整数:", i)
// 解析字符串到 float64
f, _ := strconv.ParseFloat("3.14", 64)
fmt.Println("浮点数:", f)
}

Atoi 函数尝试将字符串转换为整数。如果成功,它返回整数和 nil 错误。如果失败,它返回零和描述问题的错误。

类似地,ParseFloat 函数尝试将字符串转换为浮点数。第二个参数表示浮点类型的位大小。

需要记住的是,错误处理是解析时非常重要的一方面。

Topic 1.5: GoLang 中的 URL 解析

GoLang 使用 net/url 包来解析 URL。url.Parse() 函数用于解析 URL 并返回一个指向 URL 结构体的指针。如果成功,返回的 URL 对象的 HostPathRawQuery 等字段提供对 URL 的各种部分的访问。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package main

import (
"fmt"
"net/url"
)

func main() {
u, err := url.Parse("http://test.com/path?a=1&b=2")
if err != nil {
panic(err)
}
fmt.Println(u.Scheme)
fmt.Println(u.Host)
fmt.Println(u.Path)
fmt.Println(u.RawQuery)
}

在这个示例中,URL.Parse() 函数解析提供的字符串 URL 并输出结构体。

Working with URLs

在许多应用程序中,处理 URLs 是非常常见的,因此学习这方面是很有必要的。

Topic 1.6: GoLang 中的 SHA256 哈希

GoLang 使用 crypto/sha256 包来实现 SHA256 哈希算法规范,这些规范根据 FIPS 180-4 规定。

哈希函数将任意大小的数据映射到固定大小。哈希函数是确定性的,这意味着它对相同输入始终会产生相同输出。

SHA (Secure Hash Algorithm) 是一系列加密哈希函数之一。加密哈希是一种文本或数据文件的签名。SHA256 算法生成一个几乎唯一的、固定大小 256 位(32 字节)哈希。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package main

import (
"crypto/sha256"
"fmt"
)

func main() {
s := "hello world"
h := sha256.New()
h.Write([]byte(s))
bs := h.Sum(nil)
fmt.Println(s)
fmt.Printf("%x\n", bs)
}

在上面的示例中,我们首先创建一个新的哈希对象。然后,我们将输入字符串写入它,并最终调用其 Sum 方法以获取 SHA256 检查和字节。 %x 指令在 Printf 中格式化字节 slice 为十六进制字符串,这给我们提供了可读的哈希字符串。

Hashing

哈希主要用于比较和存储敏感数据,如密码,并确保数据完整性。

Topic 1.7: GoLang 中的 Base64 编码

Base64 编码方案通常在需要将二进制数据存储和传输到文本媒体时使用。这可以确保数据在传输过程中保持不变和无损。

GoLang 使用 encoding/base64 包提供编码/解码函数。

示例

1
2
3
4
5
6
7
8
9
10
11
12
package main

import (
"encoding/base64"
"fmt"
)

func main() {
data := "Hello, World!"
sEnc := base64.StdEncoding.EncodeToString([]byte(data))
fmt.Println(sEnc)
}

在这个示例中,我们将输入字符串编码为 Base64,并将其输出到控制台。

Base64 编码

Base64 编码广泛应用于电子邮件中的 MIME、存储复杂数据的 XML 或 JSON 中,以及 web 应用程序中的用户凭证存储。

Topic 1.8: Review and Practice

对于 Time、Epoch、Time Formatting 和 Parsing、Random Numbers、Number Parsing 和 URL Parsing 等主题,我有许多练习可以让你实践:

  • 创建一个 Go 程序,打印当前时间的格式为“Mon Jan 2 15:04:05 MST 2006”。
  • 写一个 Go 程序,将用户提供的日期和时间字符串转换为 Epoch 时间。
  • 创建一个 Go 脚本,生成 ’n’ 个随机数,其中 ’n’ 可以是任何整数。
  • 写一个函数,在 Go 中将字符串解析成一组整数。
  • 创建一个 Go 程序,将 URL 解析并输出各种组件(scheme、domain、path 等)。
  • 对于 SHA256 哈希和 Base64 编码主题:
    • 写一个 Go 函数,计算输入字符串的 SHA256 哈希,并将其返回为 Base64 格式。
    • 创建一个 Go 程序,将输入字符串编码为 Base64,解码它,然后验证解码后的字符串是否与原始输入匹配。

记住,这些练习旨在帮助你熟悉这些概念和它们在 Go 中的实现。不能等待看到你的解决方案!

English post: https://programmerscareer.com/go-basic-12/
作者:Wesley Wei – Twitter Wesley Wei – Medium
注意:本文为作者原创,转载请注明出处。

15节课帮助你更好地理解Golang- Golang基本技能树 Go Basic:理解Go中的测试和基准测试

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×