实时现在毫秒时钟 RTClock

Akagi201 发表了文章 • 7 个评论 • 752 次浏览 • 2017-03-22 12:46 • 来自相关话题

找了很久, 没有找到一个在线可用的毫秒时钟. 自己用 websocket 写了一个.

https://github.com/Akagi201/rtc... 查看全部

找了很久, 没有找到一个在线可用的毫秒时钟. 自己用 websocket 写了一个.


https://github.com/Akagi201/rtclock


rtclock



An HTML5 Real Time Clock based on WebSocket



rtclock


Features



  • [x] Use WebSocket to send backend real time clock to frontend.

  • [x] Support go-bindata.


Install



  • go get github.com/Akagi201/rtclock


Build



  • ./gobin.sh (when you modified the html template)

  • go build


Run



  • ./rtclock -h

  • Simple usage: ./rtclock

Gitea 发布 v1.1 版本,支持Git-LFS,两步验证,MSSQL,Github登录等大量改进

lunny 发表了文章 • 2 个评论 • 577 次浏览 • 2017-03-10 10:20 • 来自相关话题

我们很高兴的宣布Gitea 发布了 1.1.0 版本。在这个版本中,我们关闭了 查看全部

我们很高兴的宣布Gitea 发布了 1.1.0 版本。在这个版本中,我们关闭了 126 工单,同时合并了 348 合并请求。你可以从 下载页面 根据你所处的平台和架构下载预编译版本。更多安装详情请参考 安装向导



Changelog



  • BREAKING

    • The SSH keys can potentially break, make sure to regenerate the authorized keys


  • FEATURE

    • Git LFSv2 support #122

    • API endpoints for repo watching #191

    • Search within private repos #222

    • Hide user email address on explore page #336

    • Protected branch system #339

    • Sendmail for mail delivery #355

    • API endpoints for org webhooks #372

    • Enabled MSSQL support #383

    • API endpoints for org teams #370

    • API endpoints for collaborators #375

    • Graceful server restart #416

    • Commitgraph / timeline on commits page #428

    • API endpoints for repo forks #509

    • API endpoints for releases #510

    • Folder jumping #511

    • Stars tab on profile page #519

    • Notification system #523

    • Push and pull through reverse proxy basic auth #524

    • Search for issues and pull requests #530

    • API endpoint for stargazers #597

    • API endpoints for subscribers #598

    • PID file support #610

    • Two factor authentication (2FA) #630

    • API endpoints for org users #645

    • Release attachments #673

    • OAuth2 consumer #679

    • Add ability to fork your own repos #761

    • Search repository on dashboard #773

    • Search bar on user profile #787

    • Track label changes on issue view #788

    • Allow using custom time format #798

    • Redirects for renamed repos #807

    • Track assignee changes on issue view #808

    • Track title changes on issue view #841

    • Archive cleanup action #885

    • Basic Open Graph support #901

    • Take back control of Git hooks #1006

    • API endpoints for user repos #1059


  • BUGFIXES

    • Fixed counting issues for issue filters #413

    • Added back default settings for SSH #500

    • Fixed repo permissions #513

    • Issues cannot be created with labels #622

    • Add a reserved wiki paths check to the wiki #720

    • Update website binding MaxSize to 255 #722

    • User can see the private activity on public history #818

    • Wrong pages number which includes private repositories #844

    • Trim whitespaces for search keyword #893

    • Don't rewrite non-gitea public keys #906

    • Use fingerprint to check instead content for public key #911

    • Fix random avatars #1147


  • ENHANCEMENT

    • Refactored process manager #75

    • Restrict rights to create new orgs #193

    • Added label and milestone sorting #199

    • Make minimum password length configurable #223

    • Speedup conflict checking on pull requests #276

    • Added button to delete merged pull request branches #441

    • Improved issue references within markdown #471

    • Dutch translation for the landingpage #487

    • Added Gogs migration script #532

    • Support a .gitea folder for issue templates #582

    • Enhanced diff-view coloring #584

    • Added ETag header to avatars #721

    • Added option to config to disable local path imports #724

    • Allow custom public files #782

    • Added pprof endpoint for debugging #801

    • Added X-GitHub-* headers #809

    • Fill SSH key title automatically #863

    • Display Git version on admin panel #921

    • Expose URL field on issue API #982

    • Statically compile the binaries #985

    • Embed build tags into version string #1051

    • Gitignore support for FSharp and Clojure #1072

    • Custom templates for static builds #1087

    • Add ProxyFromEnvironment if none set #1096


  • MISC

    • Replaced remaining Gogs references

    • Added more tests on various packages

    • Use Crowdin for translations again

    • Resolved some XSS attack vectors

    • Optimized and reduced number of database queries


召集:grpc服务docker化,给API-GATEWAY写example

donaduo 回复了问题 • 3 人关注 • 3 个回复 • 964 次浏览 • 2017-03-09 00:08 • 来自相关话题

Golang 的框架或者包有听说过有漏洞的么?

astaxie 回复了问题 • 2 人关注 • 1 个回复 • 946 次浏览 • 2017-03-07 13:00 • 来自相关话题

用google/gops诊断Golang程序

myml 发表了文章 • 1 个评论 • 470 次浏览 • 2017-03-04 22:55 • 来自相关话题

在github上发现一个有趣的程序。 google/gops可以列出本机正在运行的Go程序,并诊断程序,可以查看程序的堆栈,... 查看全部

在github上发现一个有趣的程序。
google/gops可以列出本机正在运行的Go程序,并诊断程序,可以查看程序的堆栈,运行时等信息
只需要在程序里加入github.com/google/gops/agent包,一个简单的例子


// gopsTest project main.go
package main

import (
"log"
"time"

"github.com/google/gops/agent"
)

func main() {
if err := agent.Listen(&agent.Options{}); err != nil {
log.Fatal(err)
}
time.Sleep(time.Hour)
}

➜  bin gops
8548 gops (/home/myml/src/go/bin/gops)
8302* gopsTest (/tmp/gopsTest)

➜  bin gops memstats 8302
alloc: 194.63KB (199304 bytes)
total-alloc: 194.63KB (199304 bytes)
sys: 1.66MB (1740800 bytes)
lookups: 9
mallocs: 1182
frees: 67
heap-alloc: 194.63KB (199304 bytes)
heap-sys: 704.00KB (720896 bytes)
heap-idle: 136.00KB (139264 bytes)
heap-in-use: 568.00KB (581632 bytes)
heap-released: 0 bytes
heap-objects: 1115
stack-in-use: 320.00KB (327680 bytes)
stack-sys: 320.00KB (327680 bytes)
next-gc: when heap-alloc >= 4.27MB (4473924 bytes)
last-gc: -
gc-pause: 0s
num-gc: 0
enable-gc: true
debug-gc: false

也可以远程诊断


➜  bin gops stats 127.0.0.1:41861
goroutines: 6
OS threads: 9
GOMAXPROCS: 4
num CPU: 4

更多的命令


Usage: gops is a tool to list and diagnose Go processes.

Commands:
stack Prints the stack trace.
gc Runs the garbage collector and blocks until successful.
memstats Prints the allocation and garbage collection stats.
version Prints the Go version used to build the program.
stats Prints the vital runtime stats.
help Prints this help text.

Profiling commands:
trace Runs the runtime tracer for 5 secs and launches "go tool trace".
pprof-heap Reads the heap profile and launches "go tool pprof".
pprof-cpu Reads the CPU profile and launches "go tool pprof".

All commands require the agent running on the Go process.
Symbol "*" indicates the process runs the agent.

搞了个解析 redis rdb 文件,分析 redis 内存分布的小工具

iddmx 发表了文章 • 2 个评论 • 471 次浏览 • 2017-03-02 18:28 • 来自相关话题

https://github.com/xueqiu/rdr

基于这个小工具改改很容易就做出一个离线自动化分析 redis 使用情况的内部系统,想搞的同学...

https://github.com/xueqiu/rdr


基于这个小工具改改很容易就做出一个离线自动化分析 redis 使用情况的内部系统,想搞的同学可以拿去试试

mqant分布式服务器框架设计动机

liangdas 发表了文章 • 1 个评论 • 856 次浏览 • 2017-02-28 17:49 • 来自相关话题

2016年底的时候对即时通讯以及游戏开发产生了一些兴趣,而且自己这方面的知识掌握也非常少,在未来很多产品应该都会使用到长连接技术(物联网IOT),因此很有必要掌握这方面的技术。于是就在网络上查询相关的资料,但发现目前网络上的开源游戏服务器框架相对较少,而... 查看全部

2016年底的时候对即时通讯以及游戏开发产生了一些兴趣,而且自己这方面的知识掌握也非常少,在未来很多产品应该都会使用到长连接技术(物联网IOT),因此很有必要掌握这方面的技术。于是就在网络上查询相关的资料,但发现目前网络上的开源游戏服务器框架相对较少,而目前市面上已有的一些开源游戏框架又不太对自己的胃口。正好17年初刚回公司的时候事情比较少,就抽时间按照自己对游戏服务器的架构思路做了一套,取名就叫mqant了,现在已经发布到Github上,欢迎大家Fork mqant开源框架


为什么决定要重新造一个轮子?


目前网上优秀的开源游戏服务器框架也不少(当然与web框架比起来就少太多了),但总结起来都各有各的优缺点,下面列出我在选型过程中的一些考量,希望大家能开放的讨论,有不恰当的地方也请指正。


首先是开发语言


目前用于游戏服务器开发的主要应该有以下这些语言:




  1. c/c++


    优点:


    性能很好


    缺点:


    不过我个人不会C++


    开源框架:


    skynet
    底层是C 开发语言是lua,
    没有客户端库

    kbengine
    底层是C++ 开发语言可以使用C#,Python
    有多个平台的客户端库



  2. C#


    优点:


    性能很好


    缺点:


    不过我个人不会C#


    开源框架:


    Scut
    底层C# 开发语言是 C#、Python和Lua多种脚本进行开发
    有多个平台的客户端库

    Photon
    底层C# 好像是收费的,但毕竟出名
    有多个平台的客户端库



  3. python


    是我最想使用的一种开发语言



    1. 开发效率非常高

    2. 支持协程,能开发出高并发性的游戏,而且代码可读性好

    3. 目前有很多游戏公司应该都使用的是Python作为后端游戏服务器开发语言,有相对成熟的案例


    缺点:



    1. Python很致命的一个问题是进程不能利用多核,也就是说一个进程只能利用一个CPU进行计算,如果要用多核就需要新开进程,这样会造成服务器的维护成本增加,而且开发项目时所需要考虑的问题也更多


    开源框架:


    twisted  可以用来做网关服务器
    firefly 应该很早就不维护了



  4. java



    1. 没有找到比较好的开源框架

    2. 对协程支持不够好

    3. 开发效率较低




  5. javascript


    优点:


    1. 语法灵活(这是一把双刃刀,用起来要小心,尤其是团队开发中)
    2. 开源库丰富

    缺点:


    1. 语法上有一些缺陷
    2. 跟Python一样不支持多核
    3. 对协程支持不够好,地狱回调很可怕,虽然有一些解决方案,但用起来稍微有点别扭

    开源框架:


    Pomelo 网易出的,安静了一段时间,最近又开始维护了
    有多个平台的客户端库



  6. golang


    优点:


    1. 性能好,跟C/C++/C#一样编译型语言
    2. 语法比较简单,开发效率也比较高,接近Python
    3. 语言级别支持协程
    4. 单进程支持多核并发计算

    缺点:


    1. 开源库较少,会golang的开发者比较少

    开源框架:


    leaf        接触的第一个golang框架,设计不错,但不支持多进程
    没有客户端库,需要自己实现
    cellnet 刚接触,没法评价,但好像它用了callback回调函数的设计,这样的设计在golang应该可以避免



游戏框架的不足


结合个人的实际情况,当时我主要的选择从 skynet Pomelo leaf 这三个框架里面来选择


skynet设计思路非常牛逼,看了风云大牛的设计感觉应该是一个高性能,高稳定性的游戏服务器框架,而且有很多产品已经使用上了。
但个人认为skynet可能也会有以下的两个问题



  1. Actor模式可能对架构能力比较高,不如rpc模式明了

  2. skynet使用第三方网络库的时候可能需要造轮子,要放开膀子开发有些难,跟python tornado的一样,要写出高性能的程序也对开发人员有一定的要求


Pomelo由网易团队开发的,对多进程架构做的非常好,不过由于javascript性能的关系Pomelo的定位也在一些中小型非即时战斗类游戏,经过一段时间的学习和测试,最后还是无奈放弃了


最后经过多方考虑,我选择golang作为开发语言,当时第一个接触的就是leaf,学习开发了一段时间发现了leaf的一些不足



  1. 不支持多进程

  2. 没有客户端开发库,需要自己造轮子


上面列出来的都是这几个框架的缺点,其实这几个框架都非常优秀,只是不同的需求有不同的要求罢了,希望大家能根据自己实际需求选择最适合自己的框架


对游戏服务器框架的想法


自己心里也对游戏服务器框架有一些自己的想法,最终决定造这个轮子。




  1. 高性能,支持多核


    这在未来开发,扩展,维护会轻松很多,比如Python这样一台服务器跑上百个进程的游戏服务器,维护起来就很让人头疼




  2. 支持协程


    协程在客户端中应用不大,但在服务器开发中可以发挥极大的威力:



    1. 高并发,能最大的利用cpu资源

    2. 异步开发同步化,免去了回调函数设计,避免了地狱回调




  3. 支持分布式,但也支持单进程部署


    有些框架写一个demo都需要启动多个进程,实际上在项目前期可能一台服务器就能够支持了,我希望实现一个既可以单进程部署又可以分布式部署的框架



    1. 单进程能够实现高性能

    2. 分布式部署不用重新设计编码


    这个需求的实现主要靠约定,只要开发的时候按分布式环境来开发,代码一般都不需要移植




  4. 有丰富的客户端开发库


    让开发者专心业务开发,不同再去造轮子了




mqant框架的架构


mqant就是按照以上的思路设计的,同时设计思路上参考了Pomelo,并且也使用了leaf框架的部分代码。



  1. golang本身支持高性能,支持多核


  2. 支持协程
    因此mqant的RPC通信都可以按同步来写, 例如:


    //远程调用 Login模块的getRand方法
    result,err:=m.RpcInvoke("Login","getRand",roomName)
    if err==nil{
    //getRand 调用成功了,再做下面的远程调用
    result,err:=m.RpcInvoke("Login","getName",roomName)
    }
    //上面的调用都执行完了才执行下面的代码
    ....

    result 是远程调用成功以后的返回值
    err 是远程调用失败的信息

    以上代码非常清晰,跟普通的函数调用基本一样,但如果用回调函数的话,如下:

    m.RpcInvoke("Login","getRand",roomName,func(result string,err string){
    if err!=nil{
    m.RpcInvoke("Login","getName",roomName,func(result string,err string){
    //调用都执行完了才执行下面的代码
    })
    }
    })
    ...



  3. 支持分布式,但也支持单进程部署


    mqant是按模块为单位来划分功能模块的,可以将一组模块放到一个进程来运行,也可以将所有模块放到同一个进程来运行(即单进程模式)


    mqant模块间约定按标准的RPC来相互调用


    RPC底层分两种模式


    1. 基于golang chan的单进程通信
    2. 基于rabbitmq的跨进程通信

    RPC会根据模块间的部署情况选用适当的通信方式,以达到在单进程模式下RPC通信的最低性能损耗和最快的响应时间




  4. 有丰富的客户端开发库


    mqant没有考虑帮开发者造一个客户端开发库,而是选用了目前物联网中非常流行mqtt协议来作为通信协议,mqtt本身就有各个平台的客户端开发库,因此可以直接用mqtt的客户端开发库对接到mqant上来。实现了mqant跨平台通信的要求




总结


mqant还是一个非常新的框架,有很多地方都不完善,但我相信有更多大牛的加入进来参与完善和优化的话,mqant框架将变得更好。

72行实现个简单的MapReduce

回复

myml 发起了问题 • 2 人关注 • 0 个回复 • 714 次浏览 • 2017-02-28 15:30 • 来自相关话题

FFToast:GitHub中最强大的iOS Notification和AlertView框架,没有之一!

imlifengfeng 发表了文章 • 0 个评论 • 388 次浏览 • 2017-02-27 00:03 • 来自相关话题


GitHub地址:https://github.com/imlifengfeng/FFToast


中文使用说明


FFToast是一个非常强大的iOS message notifications和AlertView扩展。它可以很容易实现从屏幕顶部、屏幕底部和屏幕中间弹出一个通知。你可以很容易的自定义弹出的View.


要求



  • 支持iOS 8或更高版本

  • 支持ARC


特点



  • 简单易用

  • 可以很容易自定义


安装


CocoaPods


要使用CocoaPods安装FFToast,请将其集成到您现有的Podfile中,或创建一个新的Podfile:


target 'MyApp' do
pod 'FFToast'
end

然后 pod install.


手动


将FFToast文件夹添加到项目中


使用方法


#import <FFToast/FFToast.h>

你可以通过调用下面的方法创建一个显示在顶部的默认效果的消息通知:


/**
创建并显示一个Toast

@param title 标题
@param message 消息内容
@param iconImage 消息icon,toastType不为FFToastTypeDefault时iconImage为空仍然会有相应icon
@param duration 显示时长
*/
+ (void)showToastWithTitle:(NSString *)title message:(NSString *)message iconImage:(UIImage*)iconImage duration:(NSTimeInterval)duration toastType:(FFToastType)toastType;

其中的toastType:


typedef NS_ENUM(NSInteger, FFToastType) {

//灰色背景、无图标
FFToastTypeDefault = 0,
//绿色背景+成功图标
FFToastTypeSuccess = 1,
//红色背景+错误图标
FFToastTypeError = 2,
//橙色背景+警告图标
FFToastTypeWarning = 3,
//灰蓝色背景+信息图标
FFToastTypeInfo = 4,

};

例如:


[FFToast showToastWithTitle:@"标题" message:@"消息内容......." iconImage:[UIImage imageNamed:@"test"] duration:3 toastType:FFToastTypeDefault];

标题(title)、消息内容(message)、图标(iconImage)均可以为nil,FFToast会根据具体的内容进行自适应。


如果想在状态栏下方、屏幕下方或者屏幕中间显示消息通知,可以通过设置一些属性实现。
设置显示位置:


typedef NS_ENUM(NSInteger, FFToastPosition) {

//显示在屏幕顶部
FFToastPositionDefault = 0,
//显示在状态栏下方
FFToastPositionBelowStatusBar = 1,
//显示在状态栏下方+圆角+左右边距
FFToastPositionBelowStatusBarWithFillet = 2,
//显示在屏幕底部
FFToastPositionBottom = 3,
//显示在屏幕底部+圆角
FFToastPositionBottomWithFillet = 4,
//显示在屏幕中间
FFToastPositionCentre = 5,
//显示在屏幕中间+圆角
FFToastPositionCentreWithFillet = 6

};

其他的一些属性:


//背景颜色
@property (strong, nonatomic) UIColor* toastBackgroundColor;
//Toast标题文字颜色
@property (strong, nonatomic) UIColor* titleTextColor;
//Toast内容文字颜色
@property (strong, nonatomic) UIColor* messageTextColor;

//Toast标题文字字体
@property (strong, nonatomic) UIFont* titleFont;
//Toast文字字体
@property (strong, nonatomic) UIFont* messageFont;

//Toast View圆角
@property(assign,nonatomic)CGFloat toastCornerRadius;
//Toast View透明度
@property(assign,nonatomic)CGFloat toastAlpha;

//Toast显示时长
@property(assign,nonatomic)NSTimeInterval duration;
//Toast消失动画是否启用
@property(assign,nonatomic)BOOL dismissToastAnimated;

//Toast显示位置
@property (assign, nonatomic) FFToastPosition toastPosition;
//Toast显示类型
@property (assign, nonatomic) FFToastType toastType;

//是否自动隐藏,autoDismiss、enableDismissBtn、dismissBtnImage三个属性仅对从屏幕中间弹出的Toast有效
@property(assign,nonatomic)BOOL autoDismiss;
//是否在右上角显示隐藏按钮
@property(assign,nonatomic)BOOL enableDismissBtn;
//隐藏按钮的图标
@property (strong, nonatomic) UIImage* dismissBtnImage;

设置完属性后,就可以调用下面方法将其显示出来:


/**
显示一个Toast
*/
- (void)show;

或者:


/**
显示一个Toast

@param handler Toast点击回调
*/
- (void)show:(handler)handler;

例如:


FFToast *toast = [[FFToast alloc]initToastWithTitle:@"标题" message:@"消息内容......." iconImage:[UIImage imageNamed:@"fftoast_info"]];
toast.toastPosition = FFToastPositionBelowStatusBarWithFillet;
toast.toastBackgroundColor = [UIColor colorWithRed:75.f/255.f green:107.f/255.f blue:122.f/255.f alpha:1.f];
[toast show:^{
//点击消息通知时调用
}];//[toast show];

如果你想自定义一个从中间弹出的Toast,可以调用下面的方法:


/**
在中间显示一个自定义Toast

@param customToastView 自定义的ToastView
@param autoDismiss 是否自动隐藏
@param duration 显示时长(autoDismiss = NO时该参数将无效)
@param enableDismissBtn 是否显示隐藏按钮
@param dismissBtnImage 隐藏按钮图片(enableDismissBtn = NO时该参数将无效)
@return Toast
*/
- (instancetype)initCentreToastWithView:(UIView *)customToastView autoDismiss:(BOOL)autoDismiss duration:(NSTimeInterval)duration enableDismissBtn:(BOOL)enableDismissBtn dismissBtnImage:(UIImage*)dismissBtnImage;

你在自定义从中间弹出的Toast时,你可以将上面的参数autoDismiss和参数enableDismissBtn设为NO。然后在你自定义的View中自己在合适的位置添加一个关闭按钮。
关闭从中间弹出的Toast,可以调用下面的方法:


/**
隐藏一个Toast
*/
- (void)dismissCentreToast;

顶部、底部弹出的Toast不可自定义View,但是对于iconImage、Title、message均可以根据需要设置并且可以为nil,最终Toast会根据具体的内容进行自适应。


隐藏消息通知:
默认3秒后自动消失,向上滑动弹出的消息通知它也会消失。


关于


作者:
imlifengfeng

微博:
@imlifengfeng


许可


该项目在 MIT 许可协议下使用. 有关详细信息,请参阅 LICENSE .

API 利器 —— Faygo Web 框架

henrylee2cn 发表了文章 • 5 个评论 • 1498 次浏览 • 2017-02-25 15:45 • 来自相关话题

Faygo

Faygo 使用全新架构,是最合适开发API接口的Go Web框架。用户只需定义一个struct Handler,就能自动绑定、验证请求参数并生成在线API文档。

查看全部

Faygo


Faygo 使用全新架构,是最合适开发API接口的Go Web框架。用户只需定义一个struct Handler,就能自动绑定、验证请求参数并生成在线API文档。


Faygo Favicon


官方QQ群:Go-Web 编程 42730308 Go-Web 编程群


查看《用户手册》


faygo index


faygo apidoc


faygo server


最新版本


版本号


v1.0


安装要求


Go Version ≥1.8


快速使用



  • 方式一 源码下载


go get -u -v github.com/henrylee2cn/faygo


go get -u -v github.com/henrylee2cn/fay

        fay command [arguments]

The commands are:
new 创建、编译和运行(监控文件变化)一个新的faygo项目
run 编译和运行(监控文件变化)任意一个已存在的golang项目

fay new appname [apptpl]
appname 指定新faygo项目的创建目录
apptpl 指定一个faygo项目模板(可选)

fay run [appname]
appname 指定待运行的golang项目路径(可选)

框架特性




  • 一个 struct Handler 搞定多件事:



    • 定义 Handler/Middleware

    • 绑定与验证请求参数

    • 生成 Swagger2.0 API 在线文档

    • 数据库 ORM 映射



  • Handler与Middleware完全相同,都是实现Handler接口(funcstruct类型),共同构成路由操作链,只是概念层面的说法不同

  • 支持多种网络类型:



































网络类型 配置net_types
HTTP http
HTTPS/HTTP2(TLS) https
HTTPS/HTTP2(Let's Encrypt TLS) letsencrypt
HTTPS/HTTP2(Let's Encrypt TLS on UNIX socket) unix_letsencrypt
HTTP(UNIX socket) unix_http
HTTPS/HTTP2(TLS on UNIX socket) unix_https


  • 支持单服务单监听、单服务多监听、多服务多监听等,多个服务的配置信息相互独立

  • 基于 httprouter 开发高性能路由,支持链式与树形两种注册风格,支持灵活的静态文件路由(如DirFS、RenderFS、MarkdownFS等)

  • 支持平滑关闭、平滑升级,提供fay工具进行新建项目、热编译、元编程

  • 采用最强大的 pongo2 作为HTML渲染引擎

  • 提供近似LRU的文件缓存功能,主要用途是静态文件缓存

  • 跨平台的彩色日志系统,且同时支持console和file两种输出形式(可以同时使用)

  • 提供Session管理功能

  • 支持Gzip全局配置

  • 提供XSRF跨站请求伪造安全过滤

  • 大多数功能尽量使用简洁的ini进行配置来避免不必要的重新编译,并且这些配置文件支持自动补填默认值

  • 提供 gormxormsqlxdirectSQLWebsocketinihttp client 等很多常用扩展包


faygo struct handler 多重用途合一


简单示例


package main

import (
// "mime/multipart"
"time"
"github.com/henrylee2cn/faygo"
)

type Index struct {
Id int `param:"<in:path> <required> <desc:ID> <range: 0:10>"`
Title string `param:"<in:query> <nonzero>"`
Paragraph []string `param:"<in:query> <name:p> <len: 1:10> <regexp: ^[\\w]*$>"`
Cookie string `param:"<in:cookie> <name:faygoID>"`
// Picture *multipart.FileHeader `param:"<in:formData> <name:pic> <maxmb:30>"`
}

func (i *Index) Serve(ctx *faygo.Context) error {
if ctx.CookieParam("faygoID") == "" {
ctx.SetCookie("faygoID", time.Now().String())
}
return ctx.JSON(200, i)
}

func main() {
app := faygo.New("myapp", "0.1")

// Register the route in a chain style
app.GET("/index/:id", new(Index))

// Register the route in a tree style
// app.Route(
// app.NewGET("/index/:id", new(Index)),
// )

// Start the service
faygo.Run()
}

/*
http GET:
http://localhost:8080/index/1% ... 3Dxyz
response:
{
"Id": 1,
"Title": "test",
"Paragraph": [
"abc",
"xyz"
],
"Cookie": "2016-11-13 01:14:40.9038005 +0800 CST"
}
*/

示例库


开源协议


Faygo 项目采用商业应用友好的 Apache2.0 协议发布。

Gitea 发布 1.0.2版本,修正几个严重的bug

lunny 发表了文章 • 2 个评论 • 392 次浏览 • 2017-02-22 16:08 • 来自相关话题

很高兴的宣布我们今天发布了Bug修订版 Gitea v1.0.2。这个版本我们合并了 查看全部

很高兴的宣布我们今天发布了Bug修订版 Gitea v1.0.2。这个版本我们合并了 9 个提交请求。你可以从 下载页面 下载二进制文件,注意选择适合你的平台。更多详细安装信息请参见 安装向导.


变更日志



  • BUGFIXES

    • Fixed issue counter #882

    • Fixed XSS vulnerability on wiki page #955

    • Add data dir without session to dump #587

    • Fixed wiki page renaming #958

    • Drop default console logger if not required #960

    • Fixed docker docs link on install page #972

    • Handle SetModel errors #957

    • Fixed XSS vulnerability on milestones #977

    • Fixed XSS vulnerability on alerts #981


一些用golang开发的存储项目

回复

lei 发起了问题 • 1 人关注 • 0 个回复 • 718 次浏览 • 2017-02-21 11:57 • 来自相关话题

http REST API 验证库

toukii 发表了文章 • 2 个评论 • 433 次浏览 • 2017-02-20 13:02 • 来自相关话题

httpvf

http REST API verify,验证REST API 是否正确,书写脚本。必要时运行脚本,查看是否全部通过验证。查看全部

httpvf


http REST API verify,验证REST API 是否正确,书写脚本。必要时运行脚本,查看是否全部通过验证。


安装


go get github.com/toukii/httpvf/vf

示例


vf.yml:


-
url: http://upload.daoapp.io/topic
method: POST
header:
Content-Type: "application/x-www-form-urlencoded"
body: "title=topic001&content=content001"
resp:
code: 200
cost: 900
-
url: http://upload.daoapp.io/loadfile/topic001
method: GET
resp:
code: 200
cost: 80
body: content001
-
url: http://localhost:8080/uploadform/
method: POST
filename : vf.yml
resp:
code: 200
cost: 10

验证:


vf -v vf.yml

请求




  • url: [请求地址]




  • method: [请求方法]




  • body: [请求body]




  • n: [请求个数]




  • interval: [请求间隔]




  • runtine: [请求并发数]




  • upload: [web前段传入的文件名(input name)]@[上传文件名]



  • header: 请求的header参数,map结构


header:
Content-Type: "application/x-www-form-urlencoded"


  • param: GET 请求的参数,map结构


param:
name: toukii
position: dev-ops

验证返回body




  • code: [响应码]




  • cost: [响应时间,单位ms]




  • body: [直接验证内容]



  • regex: [正则表达式]


json




  • 路径以","分割




  • 路径若有纯数字,为数字加上""




  • 数组下标从0开始,直接写数字


    例如,返回的json内容如下:




[
{
"Map": {
"1": "hello"
},
"Message": "This is toukii,r1",
"Cost": 0.315
}
]

验证hello的写法为:


json: 
'0,Map,"1"': hello

处理文件上传的工具包 - fuh

lyric 发表了文章 • 0 个评论 • 422 次浏览 • 2017-02-19 11:17 • 来自相关话题

处理文件上传的工具包 - fuh

在平时web开发过程中,总会遇到处理文件上传的场景,每次的处理方式都是以业务为导向进行处理。现在作者就把这一... 查看全部

处理文件上传的工具包 - fuh


在平时web开发过程中,总会遇到处理文件上传的场景,每次的处理方式都是以业务为导向进行处理。现在作者就把这一块单独抽离出来,做成了一个简单的工具包。主要特点是:



  • 支持自定义文件存储

  • 支持自定义文件名

  • 支持自定义文件大小限制


引入简单,方便,欢迎来拍砖!谢谢!


$ go get github.com/LyricTian/fuh

package main

import (
"encoding/json"
"net/http"

"github.com/LyricTian/fuh"
)

func main() {
http.HandleFunc("/fileupload", func(w http.ResponseWriter, r *http.Request) {
finfo, err := fuh.Upload(r, "file", nil, nil)
if err != nil {
w.WriteHeader(http.StatusBadRequest)
return
}
json.NewEncoder(w).Encode(finfo)
})

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

撸了一个Golang的包管理/自动化构建工具,欢迎大家拍砖

blindpirate 发表了文章 • 3 个评论 • 561 次浏览 • 2017-02-12 21:45 • 来自相关话题

最近撸了一个Gradle插件,用来对Golang进行包管理和自动化构建。项目在这里。Feature有:

最近撸了一个Gradle插件,用来对Golang进行包管理和自动化构建。项目在这里。Feature有:



  • JDK 8+外无需预先安装任何东西(包括Go本身)

  • 支持所有版本的Go且允许多版本共存

  • 完美支持几乎所有平台(只要能够运行Java,本项目的所有测试在OS X 10.11/Ubuntu 12.04/Windows 7上通过)

  • 项目级的依赖隔离,无需设置GOPATH

  • 完善的包管理

    • 无需手工安装依赖包,只需指定版本

    • 无需安装即可支持Go语言默认支持的四种版本控制工具:Git/Svn/Mercurial/Bazzar (当前只实现了Git)

    • 支持传递性依赖

    • 支持自定义传递性依赖策略

    • 自动解决冲突

    • 支持依赖锁定

    • 支持glide/glock/godep/gom/gopm/govendor/gvt/gbvendor/trash等外部依赖的导入(基于这份报告

    • 支持语义化版本

    • 支持vendor

    • 支持依赖的扁平化 (受glide启发)

    • 支持本地包重命名

    • 支持私有仓库

    • 构建、测试依赖分别管理

    • 支持依赖树可视化


  • 支持构建、测试、单个/通配符测试、交叉编译

  • 现代的、生产级别的自动化构建支持,添加自定义任务极其简单

  • 原生的Gradle语法

  • 额外为中国大陆开发者提供的特性,你懂的

  • Shadowsocks支持

  • 增量构建(开发中)

  • IDE插件支持(规划中)


欢迎大家拍砖!