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/zh-hant/n/134269.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
CLYL的頭像CLYL
上一篇 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

發表回復

登錄後才能評論