golang邮箱,golangorg

本文目录一览:

弱弱的问下golang跟erlang区别大吗

1. 对锁的态度不同;

2. 对异步IO的态度不同;

3. 消息机制不同;

4. Erlang对锁非常反感,认为变量不可变可以很大程度避免锁;而Golang的观点是锁确实有很大的负担,但锁基本上是无法避免的,一旦有人共享状态并且互相抢占去改变他,这时候锁是必须存在的。

Erlang服务器是单进程的,是逻辑上没有并发的东西,一个Process就是一个执行体,所以Erlang的服务器和Golang的服务器是不一样的,Golang的服务器是多进程的一起构成的一个服务器,每个请求建立一个独立的进程。

而Erlang不同,一个服务器就是一个单进程的,所以并发的请求都进入到了进程的邮箱,然后这个服务器从进程邮箱里取邮件处理,Erlang的服务器并没有并发的请求,所以不需要锁。

为什么在gomail申请邮箱,验证码老是错误?

输入时候注意大小写,并且不要刷新页面,另外请注意网络延迟,当你注册点下确定以后耐心等待,千万不要连续点下确定,否则会造成错误出现

网络:什么是 MIME TYPE?

最近在读 Golang 的源码,看到 mime.go 这个文件时,有点看不懂了。

MIME, Mutipurpose Internet Mail Extensions,多用途 Internet 邮箱扩展。MIME 是描述消息内容类型的 internet 标准。在创建之初,是为了在发送电子邮件时附加多媒体数据,让邮件客户程序根据其类型进行处理。现在 MIME TYPE 被 HTTP 协议支持后,使得HTTP能够传输各种各样的文件。

浏览器通过 MIME TYE,也就是该资源的媒体类型,来决定以什么形式显示数据。

媒体类型通常是通过 HTTP 协议,由 Web 服务器请求头中的 Content-Type 来告知浏览器数据类型的,比如:

表示内容是 text/HTML 类型,也就是超文本文件。注意,必须是 “text/HTML” 而不是 “HTML/text”.因为 MIME 是经过 ietf 组织协商,以 RFC 的形式发布在网上的。

需要注意的是: 只有一些在互联网上获得广泛应用的格式才会获得一个 MIME Type ,如果是某个客户端自己定义的格式,一般只能以 application/x- 开头。

Internet 中有一个专门组织来对 MIME 标准进行修订,但是由于 Internet 发展过快,很多应用程序便使用在类别中以 x- 开头的方法标识这个类别还没有成为标准,例如 x-gzip,x-tar等。

其实是不是标准无关紧要,只要客户端和服务器都能识别这个格式就可以了。在 app 端会使用自定义标准来保证数据安全。

MIME类型与文档的后缀相关,因此服务器使用文档的后缀来区分不同文件的 MIME 类型,服务器中必须规定文件后缀和MIME类型之间的对应关系。而客户端从服务器上接收数据的时候,它只是从服务器接收数据流,并不了解文档的名字,因此服务器需要使用附加信息来告诉客户程序数据的 MIME 类型。服务器将首先发送以下两行 MIME 标识信息,这个信息并不是真正的数据文件的一部分。

注意,第二行为一个空格,这是必须的,使用这个空行的目的是将 MIME 信息与真正的数据内容分离开。

通用结构: type/subtype

MIME 类型对大小写不敏感,但是通常传统写法是小写。

分类

对于 text 文件类型若是没有特定的 subtype,就使用 text/plain, 类似的二进制文件如果没有特定或已知的 subtype,就使用 application/octet-stream.

还有非MIME 类型,但是比较通用的 icon 类型,image/x-icon

golang正则表达式 分组命名

正则中有分组这个功能,在golang中也可以使用命名分组。

一次匹配的情况

场景还原如下:

有一行文本,格式为:姓名 年龄 邮箱地址

请将其转换为一个map

代码实现如下:

str := `Alice 20 alice@gmail.com`

// 使用命名分组,显得更清晰

re := regexp.MustCompile(`(?Pname[a-zA-Z]+)\s+(?Page\d+)\s+(?Pemail\w+@\w+(?:\.\w+)+)`)

match := re.FindStringSubmatch(str)

groupNames := re.SubexpNames()

fmt.Printf(“%v, %v, %d, %d\n”, match, groupNames, len(match), len(groupNames))

result := make(map[string]string)

// 转换为map

for i, name := range groupNames {

if i != 0 name != “” { // 第一个分组为空(也就是整个匹配)

result[name] = match[i]

}

}

prettyResult, _ := json.MarshalIndent(result, “”, ” “)

fmt.Printf(“%s\n”, prettyResult)

输出为:

[Alice 20 alice@gmail.com Alice 20 alice@gmail.com], [ name age email], 4, 4

{

“age”: “20”,

“email”: “alice@gmail.com”,

“name”: “Alice”

}

注意 [ name age email]有4个元素, 第一个为””。

多次匹配的情况

接上面的例子,实现一个更贴近现实的需求:

有一个文件, 内容大致如下:

Alice 20 alice@gmail.com

Bob 25 bob@outlook.com

gerrylon 26 gerrylon@github.com

更多内容

和上面一样, 不过这次转出来是一个slice of map, 也就是多个map。

代码如下:

// 文件内容直接用字符串表示

usersStr := `

Alice 20 alice@gmail.com

Bob 25 bob@outlook.com

gerrylon 26 gerrylon@github.com

`

userRe := regexp.MustCompile(`(?Pname[a-zA-Z]+)\s+(?Page\d+)\s+(?Pemail\w+@\w+(?:\.\w+)+)`)

// 这里要用FindAllStringSubmatch,找到所有的匹配

users := userRe.FindAllStringSubmatch(usersStr, -1)

groupNames := userRe.SubexpNames()

var result []map[string]string // slice of map

// 循环所有行

for _, user := range users {

m := make(map[string]string)

// 对每一行生成一个map

for j, name := range groupNames {

if j != 0 name != “” {

m[name] = strings.TrimSpace(user[j])

}

}

result = append(result, m)

}

prettyResult, _ := json.MarshalIndent(result, “”, ” “)

fmt.Println(string(prettyResult))

输出为:

[

{

“age”: “20”,

“email”: “alice@gmail.com”,

“name”: “Alice”

},

{

“age”: “25”,

“email”: “bob@outlook.com”,

“name”: “Bob”

},

{

“age”: “26”,

“email”: “gerrylon@github.com”,

“name”: “gerrylon”

}

]

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

总结

使用命名分组可以使正则表示的意义更清晰。

转换为map更加符合人类的阅读习惯,不过比一般的根据索引取分组值麻烦一些。

————————————————

版权声明:本文为CSDN博主「butterfly5211314」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:

Go 使用 gomail 发送邮件

我们使用 gomail 这个库来发送邮件

使用 Goruntine 来并发发送邮件。

原创文章,作者:CLYL,如若转载,请注明出处:https://www.506064.com/n/134269.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
CLYLCLYL
上一篇 2024-10-04 00:04
下一篇 2024-10-04 00:04

相关推荐

  • 使用Golang调用Python

    在现代软件开发中,多种编程语言的协作是相当普遍的。其中一种使用场景是Golang调用Python,这使得在使用Python库的同时,可以利用Golang的高性能和强大并发能力。这篇…

    编程 2025-04-29
  • Git config命令用法介绍:用正确的邮箱保障开发工作

    本文将详细介绍如何使用git config命令配置Git的全局和本地用户信息,特别是如何正确使用用户邮箱,保障Git操作的正常进行。 一、git config命令介绍 Git中的每…

    编程 2025-04-29
  • 使用Golang创建黑色背景图片的方法

    本文将从多个方面介绍使用Golang创建黑色背景图片的方法。 一、安装必要的代码库和工具 在开始创建黑色背景图片之前,我们需要先安装必要的代码库和工具: go get -u git…

    编程 2025-04-29
  • Akka 设置邮箱大小的方法和注意事项

    为了保障系统的稳定性和可靠性,Akka 允许用户设置邮箱大小。本文将介绍如何在 Akka 中设置邮箱大小,并且提供一些注意事项,以帮助读者解决可能遇到的问题。 一、设置邮箱大小 A…

    编程 2025-04-28
  • 阿里云邮箱主机名

    阿里云邮箱主机名是指在阿里云购买并绑定域名后,为邮件服务配置的一个记录类型。在这篇文章中,我们将从多个方面对阿里云邮箱主机名进行详细阐述,帮助您更好地了解它的作用、使用方法和注意事…

    编程 2025-04-27
  • Golang中使用strings.Split函数进行字符串分割的方法

    一、Split函数的基本用法 字符串是编程中常见的数据类型,它们可以在程序中被处理、存储和传输。在Go语言中,字符串也是一个基本的数据类型,而strings包提供了一些操作字符串的…

    编程 2025-04-23
  • Golang环境变量全面解析

    Golang是一门非常流行的开发语言,拥有高效的CGO、简单易懂的语法、高并发能力等优点,然而它也需要使用环境变量来配置一些参数。在本篇文章中,我们将从多个方面对Golang环境变…

    编程 2025-04-23
  • 深入下探golang http server

    Go语言已经成为了软件开发领域的热门语言,它的高性能、应用广泛、安全性好,使得它成为了众多开发者心目中的首选编程语言。在众多应用场景中,golang http server的应用非…

    编程 2025-04-23
  • Compacted:一个高性能的Golang缓存库

    一、简介 Compacted是一个使用Golang编写的缓存库,旨在提供高性能的内存缓存功能。相对于其他常见的缓存库,Compacted在内存使用和性能方面都做了一定的优化。 缓存…

    编程 2025-04-23
  • Golang nil解析

    一、什么是nil Nil是Golang语言中的一个预定义标识符,表示一个零值对象,通常表示一个空指针。Nil被定义为指针类型、函数类型、接口类型、map类型、Slice类型、Cha…

    编程 2025-04-23

发表回复

登录后才能评论