发布于 2026-01-06 0 阅读
0

尝试学习围棋——模块化入门!mailgunner 尝试学习围棋

尝试学习 Go 语言——让我们开始模块化学习吧!

让我们采用模块化设计

邮件枪手

尝试学习围棋

让我们采用模块化设计

还记得这个吗?

mkdir $GOTPATH/github.com/shindakun/mailgunner
mkdir $GOTPATH/github.com/shindakun/mailgunner/client
Enter fullscreen mode Exit fullscreen mode

如果你没看过之前那篇关于用 MailGun 发邮件的文章,可能就看不懂了。那篇文章写得确实很粗糙,我当时那样写只是为了方便大家在本地使用这个包,提供一个合适的示例。我自己不太满意,所以那篇文章至今还没上传到 GitHub。因此,我想我们先写一篇简短的文章,介绍一下如何创建mailgunner一个规范的 Go 模块。


准备工作

我们首先要做的就是在$GOPATH. 目录之外创建一个目录。您可以使用GO111MODULE=on环境变量在 . 目录内使用模块,但由于我们的目标是摆脱 . 目录,所以$GOPATH我们将在 . 目录之外进行操作。

mkdir ~/Code/mailgunner
Enter fullscreen mode Exit fullscreen mode

现在,创建一个文件main.go并在 VS Code 中打开它。

touch main.go
code .
Enter fullscreen mode Exit fullscreen mode

代码已经写好了,所以我直接粘贴进去。注意,我已经把包名从 ` client<package_name>`更新mailgunner为 `<package_name>`。我还给导出的函数添加了一些简单的注释。这样我们就能在 VS Code 中使用 IntelliSense 获取一些细节信息。不过我应该让这些注释更有用一些。

智能感知在实际应用中

我不会再赘述代码了,只是把它放在这里,这样您就不用跳转到代码仓库或之前的文章了。*注:事后我对代码做了一些小修改,并将函数重命名NewMgClient为更正确的名称New()

package mailgunner

import (
  "net/http"
  "net/url"
  "strings"
)

// MgClient struct holds our URL and API key
type MgClient struct {
  MgAPIURL string
  MgAPIKey string
  Client   *http.Client
}

// New returns our MgClient with the proper settings
func New(apiurl, apikey string) MgClient {
  return MgClient{
    apiurl,
    apikey,
    http.DefaultClient,
  }
}

// FormatEmailRequest puts everything together for sending
func (mgc *MgClient) FormatEmailRequest(from, to, subject, body string) (r *http.Request, err error) {
  data := url.Values{}
  data.Add("from", from)
  data.Add("to", to)
  data.Add("subject", subject)
  data.Add("text", body)

  r, err = http.NewRequest(http.MethodPost, mgc.MgAPIURL+"/messages", strings.NewReader(data.Encode()))
  if err != nil {
    return nil, err
  }
  r.SetBasicAuth("api", mgc.MgAPIKey)
  r.Header.Add("Content-Type", "application/x-www-form-urlencoded")
  return r, nil
}
Enter fullscreen mode Exit fullscreen mode

为了使其成为一个真正的模块,我们需要对其进行初始化。

$ go mod init github.com/shindakun/mailgunner
go: creating new go.mod: module github.com/shindakun/mailgunner
Enter fullscreen mode Exit fullscreen mode

现在,我们来设置 Git 代码仓库。如果您还不熟悉 Git,我建议您花些时间了解一下。Pro Git可以免费在线获取。

git init
git add .
git commit -m "Initial commit"
git remote add origin https://github.com/shindakun/mailgunner.git
git push -u origin master
Enter fullscreen mode Exit fullscreen mode

为了充分利用 Go 模块,我们需要为我们的版本添加版本号。我们将遵循语义化版本控制,将版本标记为 1 或更高版本,v1.0.0并将该标签推送到 GitHub。

git tag v1.0.0
git push --tags
Enter fullscreen mode Exit fullscreen mode

GitHub 标志 shindakun / mailgunner

用 Go 语言实现的 Mailgun 客户端,功能极其简单,仅支持发送邮件。

邮件枪手

用 Go 语言实现的Mailgun客户端,功能极其简单,仅支持发送邮件

安装

作为模块使用,导入github.com/shindakun/mailgunner/v2后运行

go mod init module
go build
Enter fullscreen mode Exit fullscreen mode

如果你是模块新手,可以查看我在Dev.to 上的帖子了解更多详情

go get github.com/shindakun/mailgunner
Enter fullscreen mode Exit fullscreen mode

用法

请参阅example/main.go获取使用示例。

变更日志

  • 已更新New(),支持 http.Client,这样我们就不必依赖于http.DefaultClient





使用模块

好的,太棒了——但是,我们该如何使用它呢?Git 仓库中包含一段示例代码。请将仓库克隆到您当前目录之外的一个目录中$GOPATH。然后导航到示例目录。接下来,我们将初始化它以使用该模块。最后,运行该命令go build,它应该类似于以下输出。

$ go mod init example
go: creating new go.mod: module example
$ go build
go: finding github.com/shindakun/mailgunner v1.0.0
go: downloading github.com/shindakun/mailgunner v1.0.0
Enter fullscreen mode Exit fullscreen mode

瞧,这样就不用再用了go get

下次

我想花点时间研究一下 Go 语言的 Web 服务器,所以我们可能会先做一些简单的服务器。它们可能还达不到生产环境的要求,但把它们放到网上看看实际运行效果应该也挺有意思的。我还有一些其他的小项目想尝试一下,也许我会先做这些,到时候看情况吧。

在此之前……


你可以在 GitHub 上的代码库中找到这篇文章以及大多数其他“尝试学习 Go”系列文章的代码。



喜欢这篇文章吗?
要不要请我喝杯咖啡?

文章来源:https://dev.to/shindakun/attempting-to-learn-go---lets-get-modular-390i