您现在的位置是:网站首页> Go语言
Go优秀的开源库及软件项目
- Go语言
- 2025-02-07
- 791人已阅读
Go优秀的开源库及软件项目
gopay微信、支付宝、通联支付、拉卡拉、PayPal、Apple 的Go版本SDK
goproxy,高性能http,https,websocket,tcp,socks5代理服务器
go-fastdfs 是一个简单的分布式文件系统(私有云存储)
aliyunpan阿里云盘命令行客户端,支持JavaScript插件,支持同步备份功能
gowebsocket基于websocket单台机器支持百万连接分布式聊天(IM)系统
TangSengDaoDaoServer高颜值 IM 即时通讯,聊天
Linux上如何安装webkit2gtk-4.0给出详细步骤
k8s介绍
Kubernetes (K8S) 3 小时快速上手 + 实践,无废话纯干货
虚拟机属于虚拟化技术。而Docker这样的容器技术,也是虚拟化技术,属于轻量级的虚拟化。
虚拟机虽然可以隔离出很多“子电脑”,但占用空间更大,启动更慢,虚拟机软件可能还要花钱(例如VMWare)。
而容器技术恰好没有这些缺点。它不需要虚拟出整个操作系统,只需要虚拟一个小规模的环境(类似“沙箱”)。
它启动时间很快,几秒钟就能完成。而且,它对资源的利用率很高(一台主机可以同时运行几千个Docker容器)。此外,它占的空间很小,虚拟机一般要几GB到几十GB的空间,而容器只需要MB级甚至KB级。
想要搞懂Docker,其实看它的两句口号就行。
第一句,是,“搭建、发送、运行”,三板斧。
举个例子:
我来到一片空地,想建个房子,于是我搬石头、砍木头、画图纸,一顿操作,终于把这个房子盖好了。
结果,我住了一段时间,想搬到另一片空地去。这时候,按以往的办法,我只能再次搬石头、砍木头、画图纸、盖房子。
但是,跑来一个老巫婆,教会我一种魔法。
这种魔法,可以把我盖好的房子复制一份,做成“镜像”,放在我的背包里。
等我到了另一片空地,就用这个“镜像”,复制一套房子,摆在那边,拎包入住。
怎么样?是不是很神奇?
所以,Docker的第二句口号就是:“Build once,Run anywhere(搭建一次,到处能用)”。
Docker技术的三大核心概念,分别是:
镜像(Image)
容器(Container)
仓库(Repository)
我刚才例子里面,那个放在包里的“镜像”,就是Docker镜像。而我的背包,就是Docker仓库。我在空地上,用魔法造好的房子,就是一个Docker容器。
说白了,这个Docker镜像,是一个特殊的文件系统。它除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(例如环境变量)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
也就是说,每次变出房子,房子是一样的,但生活用品之类的,都是不管的。谁住谁负责添置。
每一个镜像可以变出一种房子。那么,我可以有多个镜像呀!
也就是说,我盖了一个欧式别墅,生成了镜像。另一个哥们可能盖了一个中国四合院,也生成了镜像。还有哥们,盖了一个非洲茅草屋,也生成了镜像。。。
这么一来,我们可以交换镜像,你用我的,我用你的,岂不是很爽
于是乎,就变成了一个大的公共仓库。
负责对Docker镜像进行管理的,是Docker Registry服务(类似仓库管理员)。
不是任何人建的任何镜像都是合法的。万一有人盖了一个有问题的房子呢?
所以,Docker Registry服务对镜像的管理是非常严格的。
最常使用的Registry公开服务,是官方的Docker Hub,这也是默认的 Registry,并拥有大量的高质量的官方镜像。
好了,说完了Docker,我们再把目光转向K8S。
中国最可靠的 Go 模块代理Goproxy.cn
Goproxy.cn 完全实现了 GOPROXY 协议。并且它是一个由中国备受信赖的云服务提供商七牛云支持的非营利性项目。我们的目标是为中国的 Gopher 们提供一个免费的、可靠的、持续在线的且经过 CDN 在全球范围内加速的模块代理。请在 status.goproxy.cn 订阅我们的有关系统性能的实时和历史数据。
请注意,Goproxy.cn 只专注于服务在 https://goproxy.cn 的 Web 应用本身的开发。如果你正在寻找一种极其简单的方法来搭建你自己的 Go 模块代理,那么你应该看一下 Goproxy,Goproxy.cn 就是基于它开发的。
用法
Go 1.13 及以上(推荐)
打开你的终端并执行
$ go env -w GO111MODULE=on
$ go env -w GOPROXY=https://goproxy.cn,direct
完成。
macOS 或 Linux
打开你的终端并执行
$ export GO111MODULE=on
$ export GOPROXY=https://goproxy.cn
或者
$ echo "export GO111MODULE=on" >> ~/.profile
$ echo "export GOPROXY=https://goproxy.cn" >> ~/.profile
$ source ~/.profile
完成。
Windows
打开你的 PowerShell 并执行
C:\> $env:GO111MODULE = "on"
C:\> $env:GOPROXY = "https://goproxy.cn"
或者
1. 打开“开始”并搜索“env”
2. 选择“编辑系统环境变量”
3. 点击“环境变量…”按钮
4. 在“<你的用户名> 的用户变量”章节下(上半部分)
5. 点击“新建…”按钮
6. 选择“变量名”输入框并输入“GO111MODULE”
7. 选择“变量值”输入框并输入“on”
8. 点击“确定”按钮
9. 点击“新建…”按钮
10. 选择“变量名”输入框并输入“GOPROXY”
11. 选择“变量值”输入框并输入“https://goproxy.cn”
12. 点击“确定”按钮
完成。
为什么创建 Goproxy.cn?
由于中国政府的网络监管系统,Go 生态系统中有着许多中国 Gopher 们无法获取的模块,比如最著名的 golang.org/x/...。并且在中国大陆从 GitHub 获取模块的速度也有点慢。因此,我们创建了 Goproxy.cn,使在中国的 Gopher 们能更好地使用 Go 模块。事实上,由于 Goproxy.cn 已在全球范围内通过 CDN 加速,所以你可以在任何地方使用它。
使用 Goproxy.cn 是否安全?
当然,和所有其他的 Go 模块代理一样,我们只是将模块原封不动地缓存起来,所以我们可以向你保证它们绝对不会在我们这边被篡改。不过,如果你还是不能够完全信任我们,那么你可以使用最值得信任的校验和数据库 sum.golang.org 来确保你从我们这里获取的模块没有被篡改过,因为 Goproxy.cn 已经支持了代理校验和数据库。
Goproxy.cn 在中国是合法的吗?
Goproxy.cn 是一个由商业支持的项目而不是一个个人项目。并且它已经 ICP 备案在中华人民共和国工业和信息化部(ICP 备案号:沪ICP备11037377号-56),这也就意味着它在中国完全合法。
为什么不使用 proxy.golang.org?
因为 proxy.golang.org 在中国大陆被屏蔽了,所以,不使用。但是,如果你不在中国大陆,那么我们建议你优先考虑使用 proxy.golang.org,毕竟它看起来更加官方。一旦你进入了中国大陆,我们希望你能在第一时间想到 Goproxy.cn,这也是我们选择 .cn 作为域名后缀的主要原因
AI 助手全套开源解决方案,自带运营管理后台,开箱即用
本项目已经正式更名为 GeekAI,请大家及时更新代码克隆地址。
GeekAI 基于 AI 大语言模型 API 实现的 AI 助手全套开源解决方案,自带运营管理后台,开箱即用。集成了 OpenAI, Azure, ChatGLM,讯飞星火,文心一言等多个平台的大语言模型。集成了 MidJourney 和 Stable Diffusion AI绘画功能。
主要特性:
完整的开源系统,前端应用和后台管理系统皆可开箱即用。
基于 Websocket 实现,完美的打字机体验。
内置了各种预训练好的角色应用,比如小红书写手,英语翻译大师,苏格拉底,孔子,乔布斯,周报助手等。轻松满足你的各种聊天和应用需求。
支持 OPenAI,Azure,文心一言,讯飞星火,清华 ChatGLM等多个大语言模型。
支持 Suno 文生音乐
支持 MidJourney / Stable Diffusion AI 绘画集成,文生图,图生图,换脸,融图。开箱即用。
支持使用个人微信二维码作为充值收费的支付渠道,无需企业支付通道。
已集成支付宝支付功能,微信支付,支持多种会员套餐和点卡购买功能。
集成插件 API 功能,可结合大语言模型的 function 功能开发各种强大的插件,已内置实现了微博热搜,今日头条,今日早报和 AI 绘画函数插件。
frp端口映射工具
配置例子:
服务端配置
frps.ini
[common]
bind_port = 7000 ;要绑定的端口
dashboard_user = admin ;控制台的用户名(http管理服务端)
dashboard_pwd = password ;控制台的密码
dashboard_port = 7500 ;控制台的端口
客户端配置
frpc.ini
[common]
server_addr = 1.2.3.4 ;服务器的 IP
server_port = 7000 ;服务器上设置的服务绑定端口
[RDP] ;这个是反向代理的名称,可以随意设置
type = tcp ;RDP 是 TCP 协议的
local_ip = 127.0.0.1 ;本机 IP
local_port = 3389 ;远程桌面的默认端口
remote_port = 7001 ;外网访问的端口
去访问用1.2.3.4:7001
Go硬件操作库
串口操作库:https://github.com/bugst/go-serial
go 使用webview作界面的详细过程和例子包含UI交互
这个库是 webview 的一个 Go 封装,专门针对 Windows 平台上的 WebView2 控件。
首先,让我们看看如何开始使用这个库:
安装:
go get github.com/jchv/go-webview2
基本使用: 这里是一个简单的例子,展示了如何创建一个基本的 webview 窗口:
package main
import "github.com/jchv/go-webview2"
func main() {
w := webview2.NewWithOptions(webview2.WebViewOptions{
Debug: true,
AutoFocus: true,
WindowOptions: webview2.WindowOptions{
Title: "My WebView2 App",
Width: 800,
Height: 600,
},
})
defer w.Destroy()
w.Navigate("https://example.com")
w.Run()
}
这个例子创建了一个标题为 "My WebView2 App" 的窗口,大小为 800x600,并导航到 example.com。
加载本地 HTML: 你可以加载本地的 HTML 内容,而不是导航到一个 URL:
w.SetHTML(`
<!DOCTYPE html>
<html>
<head>
<title>Local HTML</title>
</head>
<body>
<h1>Hello from local HTML!</h1>
</body>
</html>
`)
与 JavaScript 交互: go-webview2 允许你在 Go 和 JavaScript 之间进行交互。这里是一个更复杂的例子,展示了如何绑定 Go 函数到 JavaScript 并处理事件:
package main
import (
"fmt"
"github.com/jchv/go-webview2"
)
func main() {
w := webview2.NewWithOptions(webview2.WebViewOptions{
Debug: true,
WindowOptions: webview2.WindowOptions{
Title: "Interactive WebView2 App",
Width: 800,
Height: 600,
},
})
defer w.Destroy()
// 绑定 Go 函数到 JavaScript
w.Bind("greet", func(name string) string {
return fmt.Sprintf("Hello, %s!", name)
})
w.Bind("add", func(a, b int) int {
return a + b
})
// 设置 HTML 内容
w.SetHTML(`
<!DOCTYPE html>
<html>
<head>
<title>Interactive WebView2 Example</title>
<style>
body { font-family: Arial, sans-serif; padding: 20px; }
button { margin: 5px; }
#result { margin-top: 20px; font-weight: bold; }
</style>
</head>
<body>
<h1>Interactive WebView2 Example</h1>
<input type="text" id="nameInput" placeholder="Enter your name">
<button onclick="sayHello()">Say Hello</button>
<br><br>
<input type="number" id="num1" placeholder="Enter number 1">
<input type="number" id="num2" placeholder="Enter number 2">
<button onclick="addNumbers()">Add Numbers</button>
<div id="result"></div>
<script>
function sayHello() {
var name = document.getElementById('nameInput').value;
window.greet(name).then(function(result) {
document.getElementById('result').innerHTML = result;
});
}
function addNumbers() {
var a = parseInt(document.getElementById('num1').value);
var b = parseInt(document.getElementById('num2').value);
window.add(a, b).then(function(result) {
document.getElementById('result').innerHTML = "Sum: " + result;
});
}
</script>
</body>
</html>
`)
w.Run()
}
这个例子展示了:
如何创建一个带有自定义标题和大小的窗口
如何将 Go 函数绑定到 JavaScript
如何在 HTML 中创建用户界面元素
如何在 JavaScript 中调用绑定的 Go 函数
如何在 Go 和 JavaScript 之间传递数据
处理导航事件: 你可以监听和控制导航事件:
w.SetNavigationHandler(func(url string) bool {
fmt.Printf("Navigating to: %s\n", url)
// 返回 true 允许导航,返回 false 阻止导航
return true
})
执行 JavaScript: 你可以从 Go 代码中执行 JavaScript:
w.Dispatch(func() {
w.Eval(`
document.body.style.backgroundColor = 'lightblue';
console.log('Background color changed');
`)
})
文件对话框: go-webview2 还提供了打开文件对话框的功能:
w.Bind("openFile", func() string {
file, err := w.OpenFile("Select a file", "")
if err != nil {
return "Error: " + err.Error()
}
return "Selected file: " + file
})
// 在 HTML 中:
// <button onclick="openFile().then(result => alert(result))">Open File</button>
这些例子展示了 go-webview2 的主要功能。使用这个库,你可以创建功能丰富的桌面应用程序,结合了 Web 技术的灵活性和 Go 的强大功能。记住,这个库专门用于 Windows 平台,如果你需要跨平台支持,可能需要考虑其他选项或在不同平台使用不同的实现。
注意:确保你的系统上安装了适当的依赖。在Windows上,你可能需要安装WebView2运行时。在Linux上,你可能需要安装webkit2gtk-4.0。
windows上安装webview2运行时
在 Windows 上安装 WebView2 运行时有几种方法。我将为您详细介绍这些方法:
自动安装(推荐):
大多数现代 Windows 系统已经预装了 WebView2 运行时。如果没有,许多应用程序会在需要时自动下载并安装它。然而,如果你想确保它已安装或需要手动安装,可以使用以下方法。
手动下载安装:
a. 访问 Microsoft 的 WebView2 下载页面: https://developer.microsoft.com/en-us/microsoft-edge/webview2/
b. 点击 "Evergreen Standalone Installer" 下的 "x64" 或 "x86"(取决于你的系统)来下载安装程序。
c. 下载完成后,运行安装程序并按照提示进行安装。
使用 Windows 包管理器(winget):
如果你的 Windows 系统支持 winget,可以使用以下命令安装:
winget install Microsoft.EdgeWebView2Runtime
通过 Visual Studio 安装:
如果你使用 Visual Studio 进行开发,可以通过 Visual Studio Installer 安装 WebView2:
a. 打开 Visual Studio Installer b. 选择 "修改" c. 在 "单个组件" 选项卡中,搜索 "WebView2" d. 选中 "Microsoft Edge WebView2 运行时" 并安装
检查是否已安装:
你可以通过以下步骤检查 WebView2 是否已安装:
a. 打开 Windows 设置 b. 进入 "应用" > "已安装的应用" c. 在搜索框中输入 "WebView2" d. 如果已安装,你应该能看到 "Microsoft Edge WebView2 Runtime"
对于开发者:
如果你正在开发使用 WebView2 的应用程序,你可以考虑使用 "固定版本" 分发方式。这种方式允许你将 WebView2 运行时打包到你的应用程序中,确保兼容性并减少对用户系统的依赖。
a. 访问 WebView2 下载页面 b. 下载 "Fixed Version" 包 c. 将其解压到你的项目目录中 d. 在你的应用程序中引用这个本地版本的 WebView2
注意事项:
安装 WebView2 运行时通常需要管理员权限。
某些旧版 Windows(如 Windows 7)可能需要额外的步骤或可能不支持最新版本的 WebView2。
对于企业环境,IT 管理员可能会使用组策略或其他部署工具来管理 WebView2 的安装。
通过以上方法,你应该能够在 Windows 系统上成功安装 WebView2 运行时。安装完成后,使用 WebView2 的应用程序(包括你之前提到的 Go 程序)就应该能够正常运行了。
Linux上如何安装webkit2gtk-4.0给出详细步骤
在 Linux 上安装 webkit2gtk-4.0 的步骤可能会因不同的发行版而略有不同。我会为您提供几个主要 Linux 发行版的详细安装步骤。
Ubuntu 或 Debian:
打开终端。
更新包列表:
sudo apt update
安装 webkit2gtk-4.0:
sudo apt install libwebkit2gtk-4.0-dev
验证安装:
pkg-config --modversion webkit2gtk-4.0
这应该会显示已安装的 webkit2gtk-4.0 版本。
Fedora:
打开终端。
使用 DNF 安装 webkit2gtk-4.0:
sudo dnf install webkit2gtk3-devel
验证安装:
pkg-config --modversion webkit2gtk-4.0
Arch Linux:
打开终端。
使用 pacman 安装 webkit2gtk:
sudo pacman -S webkit2gtk
验证安装:
pkg-config --modversion webkit2gtk-4.0
openSUSE:
打开终端。
使用 zypper 安装 webkit2gtk-4.0:
sudo zypper install webkit2gtk3-devel
验证安装:
pkg-config --modversion webkit2gtk-4.0
通用步骤(从源码编译):
如果你的发行版没有提供 webkit2gtk-4.0 的预编译包,或者你需要特定版本,你可以从源码编译:
1.安装必要的依赖:
sudo apt install build-essential cmake libatk1.0-dev libglib2.0-dev libgtk-3-dev libwebkit2gtk-4.0-dev
(注意:包名可能因发行版而异)
2.下载 WebKit 源码:
git clone https://github.com/WebKit/webkit.git
cd webkit
3.配置构建:
mkdir BuildWebKit
cd BuildWebKit
cmake -DPORT=GTK -DCMAKE_BUILD_TYPE=Release ..
4.编译(这可能需要很长时间):
make
5.安装:
sudo make install
注意事项:
确保你的系统是最新的。在安装之前运行系统更新可能会有帮助。
某些发行版可能需要启用额外的存储库来获取最新版本的 webkit2gtk-4.0。
如果你在编译过程中遇到问题,可能需要安装额外的开发库。错误消息通常会指出缺少哪些依赖。
从源码编译可能需要大量的磁盘空间和编译时间,特别是对于 WebKit 这样的大型项目。
如果你正在开发一个使用 webkit2gtk-4.0 的应用程序,记得在你的构建系统中包含适当的 pkg-config 命令,以确保正确链接库文件。
安装完成后,你应该能够在你的 Linux 系统上使用 webkit2gtk-4.0 了,包括运行之前讨论的 Go webview 示例。
免费使用192种AI大模型的方法,每天20-30美金的额度
申请API Key的地址:https://demo.voapi.top/
另一个开源工具:https://github.com/Dooy/chatgpt-web-midjourney-proxy
推荐7个Go语言库,加速您的项目开发进程
您是否曾经在项目开发中遇到过难以解决的复杂问题,让您感觉进展缓慢?您并不孤单,许多开发人员都会面临这种挑战。此时,使用预先构建的库可能会很有帮助。这些预先构建的解决方案能够帮助您轻松编写复杂且耗时的功能,节省您的时间和精力。然而,由于库的种类繁多,选择使用哪个可能会很困难。因此,我们整理了7个Go语言库列表,确保能够帮助您在开发旅程中取得更好的效果。
1、Colly
如果你需要进行网页抓取,那么这是最好的资源之一,也是GitHub上星标最多的库之一,拥有超过19,000个星标。使用这个库,你可以轻松地从网站中提取结构化数据,这些数据可以用于各种应用,比如数据挖掘、数据处理或存档。请在此处查看库。
下面是一个简单的 Colly 示例,用于从一个网站中提取文章标题和链接:
package main
import (
"fmt"
"github.com/gocolly/colly"
)
func main() {
// Create a new collector instance
c := colly.NewCollector()
// Visit only the URLs that match this pattern
c.AllowedDomains = []string{"example.com"}
// Find and visit all links to articles on the site
c.OnHTML("a[href]", func(e *colly.HTMLElement) {
e.Request.Visit(e.Attr("href"))
})
// Find the title and link of each article
c.OnHTML("article", func(e *colly.HTMLElement) {
title := e.ChildText("h1")
link := e.Request.URL.String()
fmt.Printf("Title: %s\nLink: %s\n\n", title, link)
})
// Start scraping
c.Visit("http://example.com/")
}
在这个例子中,我们创建了一个 Colly 收集器,然后设置了需要访问的网站和需要提取数据的规则。在这种情况下,我们只提取所有链接到文章的链接,并在每个文章页面上提取标题和链接。请注意,这只是一个简单的示例,您可以根据需要进行修改和扩展。
https://github.com/gocolly/colly
2、Gjson
处理JSON是开发人员最常见的任务之一。该库提供了一种快速简单的方法来从JSON文档中获取值。它具有一行检索、点符号路径、迭代以及解析JSON行等功能。该库在GitHub上拥有超过11.5k颗星。请在这里检查该库。
以下是使用Gjson库的一个简单示例:
package main
import (
"fmt"
"github.com/tidwall/gjson"
)
func main() {
// 示例JSON数据
json := `{"name":{"first":"John","last":"Doe"},"age":30,"cars":["Ford","BMW","Fiat"]}`
// 从JSON中提取特定的值
name := gjson.Get(json, "name.first")
age := gjson.Get(json, "age")
cars := gjson.Get(json, "cars")
// 打印提取的值
fmt.Println("Name:", name)
fmt.Println("Age:", age)
fmt.Println("Cars:", cars)
// 循环遍历JSON数组并提取值
cars.ForEach(func(key, value gjson.Result) bool {
fmt.Println("Car:", value.String())
return true
})
}
在这个例子中,我们使用gjson库从一个JSON字符串中提取值,包括对象和数组。这个库提供了一个简单的API,可以根据点分路径(如“name.first”)来查找JSON对象中的值,并且可以通过循环遍历JSON数组来提取每个值。
https://github.com/tidwall/gjson
3、Pgx
这个库提供了一个使用快速高效的驱动程序与 PostgreSQL 数据库进行交互的方法,让你能够轻松执行 SQL 查询、事务和批量操作。它包含了许多功能,如支持近 70 种不同的 PostgreSQL 类型、自动语句准备和缓存、批量查询等。它在 GitHub 上有超过 6.5k 星。请在这里查看该库。
以下是一个简单的示例,用于连接到 PostgreSQL 数据库并执行查询:
import (
"context"
"fmt"
"github.com/jackc/pgx/v5"
)
func main() {
conn, err := pgx.Connect(context.Background(), "postgresql://user:password@localhost:5432/database_name")
if err != nil {
panic(err)
}
defer conn.Close(context.Background())
var value int
err = conn.QueryRow(context.Background(), "SELECT 1+1").Scan(&value)
if err != nil {
panic(err)
}
fmt.Println(value) // 输出 2
}
在这个示例中,我们使用 pgx 连接到本地 PostgreSQL 数据库,并执行了一个简单的查询,返回了结果 2。
4. Color
如果你需要在命令行界面(CLI)中操作颜色,那么这个库是一个不错的资源。它提供了一种在Go中操作颜色的方式,包括颜色空间转换、混合和梯度生成等功能。此外,它还支持16/256/True color。它在GitHub上有超过1k的star。请在这里查看该库。
以下是一个使用Color库的示例代码:
package main
import (
"fmt"
"github.com/gookit/color"
)
func main() {
// 在绿色中打印一条消息
color.Style{color.FgGreen}.Println("这条消息是绿色的!")
// 在粗体黄色中打印一条消息
color.Style{color.FgYellow, color.OpBold}.Println("这条消息是粗体黄色的!")
// 创建自定义颜色样式并将其用于打印一条消息
customStyle := color.Style{
color.FgRGB(255, 165, 0), // 橙色
color.OpBold,
}
customStyle.Println("这条消息是自定义橙色的!")
}
https://github.com/gookit/color
5、Authboss
Authboss是一个模块化的身份验证系统。它有几个模块,代表着一般网站所需的身份验证和授权功能,您可以启用需要的模块,而将其他模块排除。它可以方便地将身份验证插入应用程序,并获得大量功能,希望可以在较少的集成工作量下完成。在GitHub上有超过3k个星标。请在这里检查库。
以下是使用Authboss进行注册、登录和注销的简单示例:
package main
import (
"fmt"
"net/http"
"github.com/volatiletech/authboss"
"github.com/volatiletech/authboss/defaults"
)
func main() {
// 初始化Authboss
ab := authboss.New()
defaults.SetCore(&ab.Config, false)
// 添加用户存储和查询器
ab.Config.Storage.Server = &myStorage{}
ab.Config.Storage.SessionState = &myStorage{}
ab.Config.Storage.CookieState = &myStorage{}
// 添加路由
mux := http.NewServeMux()
mux.Handle("/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Home page"))
}))
mux.Handle("/register", ab.NewRouter())
mux.Handle("/login", ab.NewRouter())
mux.Handle("/logout", ab.NewRouter())
// 启动服务器
fmt.Println("Server listening on port 8000")
http.ListenAndServe(":8000", mux)
}
// 自定义用户存储和查询器
type myStorage struct {
users map[string]*authboss.User
}
// 实现authboss.UserStorer接口
func (s *myStorage) Save(_ authboss.User) error {
return nil
}
func (s *myStorage) Load(email string) (authboss.User, error) {
if user, ok := s.users[email]; ok {
return *user, nil
}
return nil, authboss.ErrUserNotFound
}
// 实现authboss.ServerStorer接口
func (s *myStorage) SaveState(r *http.Request, w http.ResponseWriter, state map[string]string) error {
return nil
}
func (s *myStorage) LoadState(r *http.Request) (map[string]string, error) {
return nil, nil
}
// 实现authboss.CookieStorer接口
func (s *myStorage) SaveRemember(r *http.Request, w http.ResponseWriter, token string) error {
return nil
}
func (s *myStorage) LoadRemember(r *http.Request) (string, error) {
return "", nil
}
func (s *myStorage) ClearRemember(r *http.Request, w http.ResponseWriter) error {
return nil
}
https://github.com/volatiletech/authboss
6、Configor
Configor是一个使用灵活可扩展方法来管理和加载Go中配置文件的库。它支持多种文件格式,环境和默认值。它支持YAML,JSON,TOML和Shell环境(支持Go 1.10+)。在GitHub上拥有超过1.5k的星标。请在此处查看该库。
以下是一个使用Configor库的简单示例:
package main
import (
"fmt"
"github.com/jinzhu/configor"
)
type Config struct {
Database struct {
Host string
Port uint
Username string
Password string
DBName string
}
}
func main() {
// 加载配置文件
var config Config
err := configor.Load(&config, "config.yml")
if err != nil {
panic(fmt.Errorf("failed to load config: %v", err))
}
// 使用配置
dbURL := fmt.Sprintf(
"postgres://%s:%s@%s:%d/%s?sslmode=disable",
config.Database.Username,
config.Database.Password,
config.Database.Host,
config.Database.Port,
config.Database.DBName,
)
fmt.Println(dbURL)
}
此示例展示了如何使用Configor从YAML配置文件中加载配置,并将其用于构建数据库连接URL。
https://github.com/jinzhu/configor
7. Rice
Rice 是一个 Go 语言库,可以帮助你将静态文件(例如 HTML、CSS、JavaScript 等)打包到 Go 应用程序中,这样可以轻松地将应用程序和所需的静态文件一起分发。
它提供了一个命令行工具,可以将静态文件打包成 Go 代码,也可以将静态文件解压到指定的目录。通过将静态文件打包到 Go 应用程序中,你可以避免必须在部署过程中复制和管理单独的静态文件。
使用 Rice 库,可以轻松地将静态资源绑定到 Go 二进制文件中,这意味着你的应用程序和所需的静态资源可以更方便地一起分发和部署。
以下是使用Rice将静态文件嵌入Go应用程序的示例代码:
package main
import (
"net/http"
"github.com/GeertJohan/go.rice"
)
func main() {
// 使用Rice加载静态文件
box := rice.MustFindBox("static")
// 从Box中获取文件内容并返回给客户端
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
file, err := box.Open("index.html")
if err != nil {
http.Error(w, err.Error(), http.StatusNotFound)
return
}
defer file.Close()
// 将文件内容写入响应体
fileInfo, err := file.Stat()
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
http.ServeContent(w, r, fileInfo.Name(), fileInfo.ModTime(), file)
})
// 启动Web服务器
http.ListenAndServe(":8080", nil)
}
在上面的示例中,我们使用Rice加载名为“static”的文件夹中的静态文件。然后,我们在请求处理程序中打开并返回名为“index.html”的文件内容。rice.MustFindBox()函数会在找不到文件夹时panic,因此我们使用它而不是rice.FindBox()函数。
要使用Rice将静态文件嵌入Go应用程序,需要在应用程序中使用rice.EmbedGo命令将文件夹中的文件打包为Go文件。例如,以下是将名为“static”的文件夹中的所有文件打包到名为“rice-box.go”的文件中的示例命令:
rice embed-go -i=./static -o=./rice-box.go
这将创建一个名为“rice-box.go”的文件,其中包含所有在“static”文件夹中找到的静态文件的字节数组,可以在代码中使用。
https://github.com/GeertJohan/go.rice
结束
在本文中,我们介绍了七个不同的 Go 库,每个库都有其独特的功能和用途。从数据抓取和 JSON 处理到静态资源的处理和身份验证,这些库都可以为开发人员提供快速的解决方案。虽然这只是众多可用库的一个小样本,但这七个库都已经得到了广泛的使用和支持,它们可以帮助开发人员更轻松地完成日常的工作。无论是想节省时间,还是想提高开发效率,这些库都值得您的一试。
Hugo接私活神器,世界上最快的网站构建框架
Hugo 是一个流行的开源静态网站生成器,使用 Go 语言编写。它被设计用来快速构建网站,特别是博客、文档、个人或企业网站等。以下是一些关于 Hugo 的主要特点:
速度:Hugo 以其快速构建网站的能力而闻名,能够在几秒钟内生成包含大量内容的网站。
易用性:Hugo 有一个简单的命令行界面,易于学习和使用。
灵活性:它支持多种内容格式,包括 Markdown、HTML 和其他一些格式。
可扩展性:Hugo 允许使用主题和模板来自定义网站的外观和布局,同时也可以通过插件进行扩展。
跨平台:Hugo 可以在多种操作系统上运行,包括 Windows、macOS 和 Linux。
丰富的主题:社区提供了大量免费和付费的主题,可以快速搭建网站。
支持多语言:Hugo 支持多语言网站,可以轻松创建面向不同语言用户的网站。
使用 Hugo,你可以将内容(通常以 Markdown 格式编写)和模板结合起来,生成 HTML 页面,这些页面可以托管在任何静态文件服务器上,如 Apache、Nginx 或者使用服务如 GitHub Pages、Netlify 和 Vercel 等。由于其高效的构建过程和简单的部署方式,Hugo 在开发者中非常受欢迎。
使用Hugo建站极其快速且非常安全。Hugo站点可以部署在任何地方,包括Heroku、GoDaddy、DreamHost、GitHub Pages、Google Cloud Storage、Amazon S3和CloudFront,也能在CDN群上工作的很好。Hugo站点的运行不依赖昂贵的运行环境,如Ruby、Python或者PHP,也不依赖任何数据库。
Hugo 是一个流行的静态网站生成器,它具有以下特点:
速度极快:Hugo 以其构建速度快而闻名,能够快速生成静态网站,特别适合大型网站。
跨平台:Hugo 支持多个操作系统,包括 Windows、macOS 和 Linux。
易于使用:Hugo 的命令行界面简单直观,使得创建和管理网站变得容易。
丰富的主题:Hugo 拥有一个庞大的主题库,用户可以选择多种多样的主题来快速搭建网站。
可扩展性:Hugo 支持多种模板语言,用户可以根据需要自定义和扩展功能。
内容优先:Hugo 鼓励以内容为中心的建站方式,使得内容创作和管理更加高效。
支持Markdown:Hugo 支持Markdown语法,使得编写和格式化内容变得简单。
多语言支持:Hugo 支持多语言网站,可以轻松创建面向不同语言用户的网站。
实时预览:Hugo 提供了实时预览功能,可以在本地编辑内容时即时查看更改。
版本控制友好:Hugo 生成的网站可以很容易地与版本控制系统如Git集成,方便网站内容的版本管理和协作。
SEO友好:Hugo 生成的静态网站对搜索引擎优化友好,有助于提高网站的SEO排名。
这些特点使得 Hugo 成为许多开发者、博客作者和企业构建网站的首选工具。
Hugo 作为一款静态网站生成器,适用于多种应用场景,以下是一些主要的应用场景:
个人博客:Hugo 的快速构建能力和丰富的主题选择使其成为个人博客的理想选择。
文档站点:对于需要提供文档的项目或组织,Hugo 可以快速生成清晰、易于导航的文档网站。
产品展示网站:企业可以使用 Hugo 快速搭建产品展示网站,展示产品信息、功能和用户评价。
会议和活动网站:Hugo 适合搭建会议、研讨会或活动的官方网站,提供日程、演讲者信息和注册信息。
作品集网站:设计师、摄影师和其他艺术家可以使用 Hugo 展示他们的作品集。
教育资源和课程网站:教育者和机构可以使用 Hugo 创建在线课程和教育资源网站。
新闻和媒体网站:Hugo 可以用于搭建新闻网站,提供文章、报道和多媒体内容。
企业官方网站:企业可以使用 Hugo 搭建官方网站,展示公司信息、服务、联系方式和新闻发布。
开源项目网站:开源项目可以使用 Hugo 创建项目网站,包括项目介绍、文档、贡献指南和社区动态。
电子商务产品目录:虽然 Hugo 本身不直接支持电子商务功能,但它可以用来创建产品目录,结合其他服务实现简单的电子商务网站。
快速原型开发:开发者可以使用 Hugo 快速搭建网站原型,用于演示或概念验证。
内容营销和SEO优化:由于 Hugo 生成的网站对搜索引擎优化友好,因此适合用于内容营销策略。
Hugo 的应用场景非常广泛,几乎适用于任何需要快速、高效、低成本搭建静态网站的场景。其简单易用性和强大的功能使得它成为许多网站构建者的首选工具。
下一篇:Go同行者