递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
楼主: 飞扬工作室
打印 上一主题 下一主题

[官方] 关于服务器子平台类库封装建议

  [复制链接]

18

主题

72

帖子

635

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
635
91#
发表于 2024-8-3 21:29:26 | 只看该作者
1980882096 发表于 2024-7-25 02:17
https://opensource.bytedance.com/projectDetail/1

CloudWeGo

支持:噜阿噜
回复

使用道具 举报

93

主题

564

帖子

3532

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
3532
92#
发表于 2024-8-3 21:58:58 | 只看该作者
限流工具
使用 golang.org/x/time/rate 包实现令牌桶算法

import (
"fmt"
"net/http"
"time"

"golang.org/x/time/rate"
)

func main() {
// 创建一个限流器,每秒允许 10 个请求,最大可存储 100 个令牌
limiter := rate.NewLimiter(10, 100)

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
  // 尝试获取令牌,如果获取失败,则返回 429 Too Many Requests 错误
  if !limiter.Allow() {
   http.Error(w, "Too Many Requests", http.StatusTooManyRequests)
   return
  }

  // 处理请求
  fmt.Fprintln(w, "Hello, Gopher!")
})

http.ListenAndServe(":8080", nil)
}
回复

使用道具 举报

93

主题

564

帖子

3532

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
3532
93#
发表于 2024-8-4 08:08:30 | 只看该作者
Viper 是一个功能强大的 Go 配置库,它提供了全面的配置解决方案,包括 12-Factor 应用。它旨在应用程序内部运行,可以处理所有类型的配置需求和格式。
https://mp.weixin.qq.com/s?chksm ... KHA&wx_header=3
回复

使用道具 举报

93

主题

564

帖子

3532

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
3532
94#
发表于 2024-8-4 08:08:51 | 只看该作者
Viper 是一个功能强大的 Go 配置库,它提供了全面的配置解决方案,包括 12-Factor 应用。它旨在应用程序内部运行,可以处理所有类型的配置需求和格式。
回复

使用道具 举报

85

主题

492

帖子

3547

积分

论坛元老

Rank: 8Rank: 8

积分
3547
95#
发表于 2024-8-4 10:24:20 | 只看该作者
封个FTP库吧!
回复

使用道具 举报

93

主题

564

帖子

3532

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
3532
96#
发表于 2024-8-5 00:32:24 | 只看该作者
beego ORM 是一个强大的 Go 语言 ORM 框架。她的灵感主要来自

Django ORM 和 SQLAlchemy。



已支持的数据库驱动有MySQL、PostgreSQL 和 Sqlite3。



beego v2.x 和 beego v1.x 在 ORM 上的区别是,beego v2.x 的 ORM 对象被设计为无状态的,它是线程安全的,建议大家在使用时,一个数据库只对应一个 ORM 对象。
回复

使用道具 举报

55

主题

239

帖子

2002

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
2002
97#
发表于 2024-8-5 23:01:17 | 只看该作者
摘星揽月 发表于 2024-8-5 00:32
beego ORM 是一个强大的 Go 语言 ORM 框架。她的灵感主要来自

Django ORM 和 SQLAlchemy。

操作多个数据库数据会混乱,用事务可以解决:噜阿噜,我目前就是这样搞的
回复

使用道具 举报

55

主题

239

帖子

2002

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
2002
98#
发表于 2024-8-5 23:03:28 | 只看该作者
摘星揽月 发表于 2024-8-3 21:58
限流工具
使用 golang.org/x/time/rate 包实现令牌桶算法

正好有这个库

<火山程序 类型 = "通常" 版本 = 1 />

类 速率限制器类 <公开 注释 = "是 Go 语言中一个用于限制频率的库,主要用于实现速率限制和限流的功能。它是 Go 语言标准库 time/rate 的一个扩展版本,提供了更灵活的速率限制机制。" 折叠
        @服务器.导入 = "golang.org/x/time/rate" @文档 = "category = \"速率限制器\"" @别名 = "*rate.Limiter"
        @别名类型 = 本地非数值基本类型>
{
    方法 初始化 <公开 静态 折叠 @嵌入式方法 = "">
    参数 欲操作本对象 <类型 = 速率限制器类>
    参数 每秒令牌数 <类型 = 整数 注释 = "这是速率限制器的速率,表示每秒允许生成的令牌数。"
            注释 = "每秒钟生成的令牌数量是固定的,不会受到之前秒内消耗的令牌数量的影响。每秒开始时,都会生成新的令牌,以满足该秒内的生成速率设定。">
    参数 突发令牌数 <类型 = 整数 注释 = "这是令牌桶的容量,表示桶中可以容纳的最大令牌数。桶容量决定了在短时间内可以允许的突发流量。"
            注释 = "恢复时间 = 突发令牌数 (b) / 每秒令牌数 (r)" "">
    {
        @ @<欲操作本对象>  = rate.NewLimiter(@<每秒令牌数>, @<突发令牌数>)
    }

    方法 等待令牌 <公开 静态 类型 = 错误接口 注释 = "等待令牌:会阻塞当前协程,直到令牌桶中有足够的令牌。如果令牌桶中已经有令牌,方法会立即返回;如果没有足够的令牌,方法会一直阻塞直到令牌可用。"
            注释 = "消耗令牌:在方法返回时,它会消耗一个令牌。这样可以确保在执行操作之前已经获得了一个令牌,从而控制操作的速率。" 注释 = "" 注释 = "适用场景"
            注释 = "限流:在需要限制请求速率的场景中,使用 Wait() 方法可以确保操作不会超过设定的速率。"
            注释 = "控制并发:在高并发的情况下,Wait() 方法可以控制并发的操作数量,防止系统过载。" 注释 = "" 注释 = "注意事项"
            注释 = "阻塞:由于 Wait() 方法会阻塞当前协程,因此在高负载场景下,可能会导致线程或协程阻塞。如果需要非阻塞的限流控制,可以考虑使用其他方法或库。"
            返回值注释 = "尝试获取一个令牌,如果失败则返回错误" 折叠 折叠2 @嵌入式方法 = "">
    参数 欲操作本对象 <类型 = 速率限制器类>
    {
        @ @<欲操作本对象>.Wait(context.Background())

    }

    方法 等待多个令牌 <公开 静态 类型 = 错误接口 注释 = "方法会阻塞直到可以获得 n 个令牌。如果令牌桶中没有足够的令牌,它会等待直到令牌足够为止。如果上下文被取消或超时,也会返回一个错误。"
            注释 = "" 注释 = "适用场景" 注释 = "限流:在需要限制请求速率的场景中,使用 Wait() 方法可以确保操作不会超过设定的速率。"
            注释 = "控制并发:在高并发的情况下,Wait() 方法可以控制并发的操作数量,防止系统过载。" 注释 = "" 注释 = "注意事项"
            注释 = "阻塞:由于 Wait() 方法会阻塞当前协程,因此在高负载场景下,可能会导致线程或协程阻塞。如果需要非阻塞的限流控制,可以考虑使用其他方法或库。"
            返回值注释 = "如果请求被取消或超时,将返回一个错误;如果没有问题则返回 nil。" 折叠 折叠2 @嵌入式方法 = "">
    参数 欲操作本对象 <类型 = 速率限制器类>
    参数 获取令牌个数 <类型 = 整数 注释 = "需要的令牌数量。">
    {
        @ @<欲操作本对象>.WaitN(context.Background(), @<获取令牌个数>)

    }

    方法 取令牌 <公开 静态 类型 = 逻辑型 注释 = "适用于不希望阻塞当前操作的场景。它允许你在限流器中检查令牌而不等待,从而实现非阻塞的速率控制" 注释 = ""
            返回值注释 = "true 表示当前操作可以在速率限制下执行,false 表示操作被速率限制阻止。" 折叠 折叠2 @嵌入式方法 = "">
    参数 欲操作本对象 <类型 = 速率限制器类>
    {
        @ @<欲操作本对象>.Allow()
    }

    方法 取多个令牌 <公开 静态 类型 = 逻辑型 注释 = "它用于检查在指定的时间点是否可以允许 n 个请求,而不会阻塞。如果令牌桶中有足够的令牌,它会返回 true,否则返回 false。"
            注释 = "" 返回值注释 = "如果在指定的时间点可以允许 n 个请求,则返回 true;否则返回 false。" 折叠 折叠2 @嵌入式方法 = "">
    参数 欲操作本对象 <类型 = 速率限制器类>
    参数 获取令牌个数 <类型 = 整数 注释 = "需要的令牌数量。">
    {
        @ @<欲操作本对象>.AllowN(time.Now(), @<获取令牌个数>)
    }

    方法 取突发数 <公开 静态 类型 = 整数 折叠 @嵌入式方法 = "">
    参数 欲操作本对象 <类型 = 速率限制器类>
    {
        @ @<欲操作本对象>.Burst()
    }

    方法 设置突发数 <公开 静态 折叠 @嵌入式方法 = "">
    参数 欲操作本对象 <类型 = 速率限制器类>
    参数 突发数 <类型 = 整数>
    {
        @ @<欲操作本对象>.SetBurst(@<突发数>)
    }

    方法 设置速率 <公开 静态 折叠 @嵌入式方法 = "">
    参数 欲操作本对象 <类型 = 速率限制器类>
    参数 每秒令牌数 <类型 = 整数 注释 = "表示新的速率限制(每秒生成的令牌数)">
    {
        @ @<欲操作本对象>.SetLimit(@<每秒令牌数>)
    }

    方法 取可用令牌数 <公开 静态 类型 = 小数 折叠 @嵌入式方法 = "">
    参数 欲操作本对象 <类型 = 速率限制器类>
    {
        @ @<欲操作本对象>.Tokens()
    }

    方法 取速率 <公开 静态 类型 = 小数 折叠 @嵌入式方法 = "">
    参数 欲操作本对象 <类型 = 速率限制器类>
    {
        @ @<欲操作本对象>.Limit()
    }

    #
    #
}
回复

使用道具 举报

444

主题

1万

帖子

4万

积分

超级版主

Rank: 8Rank: 8

积分
40264
99#
发表于 2024-8-5 23:30:36 | 只看该作者
摘星揽月 发表于 2024-8-3 21:58
限流工具
使用 golang.org/x/time/rate 包实现令牌桶算法

这个可以有
安卓无障碍实战课:点击查看
交流群:641526939
回复

使用道具 举报

18

主题

74

帖子

539

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
539
100#
发表于 2024-8-7 09:08:20 | 只看该作者
GO的标准库都封完了,建议出个入门教程让我们先入入门吧!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-11-11 05:05 , Processed in 0.096649 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表