last tango in paris这个软件怎么用?

后使用快捷导航没有帐号?
只需一步,快速开始
查看: 1967|回复: 3
阅读权限90精华0主题在线时间1719 小时帖子性别保密UID95007310 下载值108 手机型号SAMSUNG GALAXY SII注册时间
Linkin Park
该用户从未签到性别保密威望0 人气369 贡献120 积分3911金钱5066 手机型号SAMSUNG GALAXY SII最后登录
本帖最后由 edisonxiaxu 于
21:13 编辑 % ^, F$ {+ N5 }$ ?0 H# M! X- R: t
! z# n) @6 V% q8 o
& && &&&今天让我们来看看微软软件架构师Herb Sutter在C++ and Beyond 2011上的一次公开演讲:Why C++
' e# L- w4 ?&&@0 K+ _8 l8 L4 b+ V0 w
& && &&&因为Herb将其演讲幻灯片PDF公布于网上,因此我们可以在此介绍一下他的演讲内容,作为一种观点。/ x4 t8 Q9 `7 q3 c) ?
! L7 o# k: g/ i% O) b/ o/ G) z
& && &&&1) 为什么C++?因为要考虑Performance per $,也就是说performance就是钱,这个分成三个方面:
# T. a. A3 K; J
0 P6 E: ?. S: P9 r9 N
$ B+ h. {: A$ A&&V& C2 [$ u
21:08:34 上传
能耗:芯片的耗电量,移动设备的耗电量,家用电脑的耗电量,还有数据中心的耗电量。
规模:取决于家用电脑和移动设备上的处理器资源,而这个资源一般是有限的。
体验:在更小的设备上会有更好的体验;封装意味着每个周期都很重要。' c& I$ i7 w9 d. r. G5 Z# p
* E% T. n5 `7 h/ K) j
5 }& O+ L; v" H
& && &&&2)C++的进化分成三个时代:
21:08:35 上传
1979 – 1989:研究C的对象能力。主要是为C++做准备
1989 – 1999:C++成了主流。4 V( X' o( }6 a" L% g8 Q: j
1999 – 2009:Coffee-based语言(Java, .NET)出现了,极大的提高了开发生产力。
& && &&&对于第三个时代,Herb说了很多,他说这个并没有什么错,因为这个时候我们非常关注开发的生产力,这个非常重要,这就是为什么C++一下就失去优势的地方。但是是否这些Coffee-Based的语言可以做任重要的事呢?不行,很多时候,这是一个Trade-Off的事,也就是生产力不是免费的是需要你用别的东西去交换的。+ [% C& ~; B&&g0 d) x5 u
% D( Q0 J; D# V( W6 g* P
& && &&&3)第四个时期。
% D( h! C6 C&&Q&&G
21:08:37 上传
& && &&&Herb认为,是第四个时期,因为我们又喜欢Native Code了,C++从被驱逐后又被请回来了。因为网站的性能越来越是个问题,移动端的设备非常流行。但主要是因为Performance就是钱,因为前面的三个因素,性能影响的是dollar,不尊重性能的公司都会发现花钱的速度太快了。/ _* W' ]+ c/ x' i6 h
& && &&&Herb把这个时期比做 The Return of the King。(指环王的第三部:王者归来) 性能为王!; ^0 O6 J( [3 Y& x" _/ G! H
/ ~5 B; a3 o& m
& && &&&4)Herb还给了一张幻灯片问,“The World is built on ….”,后面例出了多个语言。然后Herb说,世界是由C和C++构成的。
2 r2 {+ ~9 b& K# t
21:08:38 上传
7 G( Q9 E' [2 q* J
& && &&&5)Herb给了一张表格,这张表可相当形象。如果把我们的对编程语言的需求总结为四个:效率,灵活度,抽象程度,生产率。那么,C语言玩的是前两个,而C++占优的是前三个,Java和C#的能力则在抽象和生产率达到极致。- B# D/ K&&l% f3 J3 ]
21:08:40 上传
& && &&&任何一种设计都不可能满足你的所有需求,这就是Trade-Off。2 {( Z. X3 [8 B% e6 z
" B+ k2 b& @' K. _+ R4 Y
& && &&&6)Herb举了一个微软内的例子,用C++ 和 ATL 来开发IE工具条的报告,意思是你可以用脚本在IE的工具条上加按钮,但是作者建议使用C++,因为用.NET或是脚本有重大的limitation,尤其是性能上的问题。( S: @' {$ a1 h
21:08:41 上传
8 I1 M- |/ ]) i2 O- V9 c7 Q
& && &&&7)接下来,我们来看看移动设备。
& && &&&下图中,第一个是iOS,第二个是Android,第三个是Windows Phone。Herd说了几个事:2 S- b&&Z& D; a! F% L
21:08:43 上传
& && &&&a)相较于Web APP,人们更喜欢Native的APP,这个在移动设备的使用上可以得到验证。6 ~, R1 k, u* E5 v
& && &&&b)不论是iOS、Android也好,还是Windows Phone,他们都不是只在拼操作系统,更是在拼其平台上的应用,为的是让智能手机的体验更好。手机就是一个App。6 M0 g, ~0 W3 T" B% N# w
& && &&&c)这三个手机在第一版出来时都不支持C++,而第二版加强出来时都支持C++了。因为他们要兼顾性能和一定程度上的开发效率。Windows Phone还没有得到第二版加强(Mango是第二版,Tango是其加强),让我们对Tango拭目以待。' ]# V! k# S0 j( ^1 I5 ]! ]
阅读权限200精华0主题在线时间11607 小时帖子性别男UID84130829625 下载值5 手机型号撸妹儿居住地&海淀区注册时间
TA的每日心情怒 23:58:26签到天数: 12 天[LV.3]偶尔看看II性别男威望2469 人气43025 贡献2908 积分86375金钱137142 手机型号撸妹儿最后登录
开发难度降低
该会员没有填写今日想说内容.
阅读权限90精华0主题在线时间1672 小时帖子性别男UID2937 下载值119 手机型号throphy居住地&梅州市注册时间
全国城管与拆迁队总指挥
该用户从未签到性别男威望638 人气6660 贡献16284 积分42266金钱148607 手机型号throphy最后登录
阅读权限0精华0主题在线时间420 小时帖子性别男UID0 下载值18 手机型号nokia 5230居住地&烟台市注册时间
头像被屏蔽
该用户从未签到性别男威望0 人气526 贡献908 积分1916金钱2353 手机型号nokia 5230最后登录
提示: 作者被禁止或删除 内容自动屏蔽
荣誉会员勋章
离职版主专用
优秀会员GG勋章
授予连续2个月以上获得优秀会员(GG专用)
草根达人勋章
申请通过当月授予草根达人组,取代原有优秀会员勋章
版主专用(实习的转正后即授予)
优秀版主GG勋章
授予连续2个月获得优秀版主(GG版主专用)
管理员勋章
管理员专用
论坛功臣勋章
对论坛做出很大贡献的会员或者论坛开放前期版主专用
优秀会员勋章
授予论坛优秀会员
Powered byWinRAR Tango
Tango风格的WinRAR主题,非常漂亮,推荐下载!
Tango风格的WinRAR主题,非常漂亮,推荐下载!&&&&
12345678910当前访客身份:游客 [
当前位置:
Tango 是微内核可扩展的Go语言Web框架。
Golang的web框架基本上处于一个井喷期,那么为什么要再造一个轮子。这是因为,目前可扩展性比较强的都是基于函数作为可执行体的,而以结构体作为执行体的框架目前可扩展性都不够强,包括我原先写的框架xweb也是如此。因此,一个全新的框架出来了,先上地址:。
初看Tango框架,感觉和Martini及Macaron非常的像。比如这段代码:package&main
import&"/lunny/tango"
func&main()&{
&&&&t&:=&tango.Classic()
&&&&t.Get("/",&func()&string&{
&&&&&&&&return&"Hello&tango!"
&&&&t.Run()
}这种其实大家都支持的。再看这个吧:package&main&&&&&&&&
&&&&&&&&&&&&
import&"/lunny/tango"&&&&&
&&&&&&&&&&&&
type&Action&struct&{}&&&&&&&
func&(Action)&Get()&string&{&&&&&&&&
&&&&return&"Hello&tango!"&&&&&&&
&&&&&&&&&&&&
func&main()&{&&&&&&&
&&&&t&:=&tango.Classic()&&&&&&&&
&&&&t.Get("/",&new(Action))&&&&&
&&&&t.Run()&&&&&
Tango同时支持函数和结构体作为执行体,不过主打是结构体,函数只作为兼容而用。下面对Tango的各种功能一一道来。
Tango目前同时支持3种路由规则:
tg.Get("/",&new(Action))
tg.Get("/:name",&new(Action))
命名路由对应的参数内容可通过ctx.Params().Get(":name")来获得
tg.Get("/(.*)",&new(Action))
正则路由对应的参数内容可通过ctx.Params().Get(":0")来获得
这里要注意命名路由和正则路由不可混用。
同时支持函数执行体和结构体执行体,支持的函数执行体形式如下,可以有零个或一个返回值,返回值由Return插件提供,后面会再提:func()
func(http.ResponseWriter,&*http.Request)
func(*tango.Context)
func(http.Response.Writer)
func(*http.Request)
同时支持包含Get,Post,Head,Options,Trace,Patch,Delete,Put作为成员方法的结构体作为执行体。type&Action&struct&{}
func&(Action)&Get()&string&{
&&&&return&"Get"
func&(Action)&Post()&string&{
&&&&return&"Post"
func&(Action)&Head()&string&{
&&&&return&"Head"
func&(Action)&Options()&string&{
&&&&return&"Options"
func&(Action)&Trace()&string&{
&&&&return&"Trace"
func&(Action)&Patch()&string&{
&&&&return&"Patch"
func&(Action)&Delete()&string&{
&&&&return&"Delete"
func&(Action)&Put()&string&{
&&&&return&"Put"
在使用路由时,可以用对应的方法或者Any来加路由:t&:=&tango.Classic()
t.Get("/1",&new(Action))
t.Any("/2",&new(Action))
Tango提供了Group来进行路由分组,Group的最简单形式如下:g&:=&tango.NewGroup()
g.Get("/1",&func()&string&{
&&&&return&"/1"
g.Post("/2",&func()&string&{
&&&&return&"/2"
t&:=&tango.Classic()
t.Group("/api",&g)
这样访问/api/1就会返回/1,访问/api/2就会返回/2
同时也可以这样:t&:=&tango.Classic()
t.Group("/api",&func(g&*tango.Group)&{
&&&&g.Get("/1",&func()&string&{
&&&&&&&&return&"/1"
&&&&g.Post("/2",&func()&string&{
&&&&&&&&return&"/2"
Group也支持子Group:t&:=&tango.Classic()
t.Group("/api",&func(g&*tango.Group)&{
&&&&g.Group("/v1",&func(cg&*tango.Group)&{
&&&&&&&&cg.Get("/1",&func()&string&{
&&&&return&"/1"
cg.Post("/2",&func()&string&{
&&&&return&"/2"
&&&&&&&&})
最后,Group也支持逻辑分组:o&:=&tango.Classic()
o.Group("",&func(g&*tango.Group)&{
&&&&g.Get("/1",&func()&string&{
return&"/1"
o.Group("",&func(g&*tango.Group)&{
&&&&g.Post("/2",&func()&string&{
return&"/2"
这样,即使路由间只是逻辑上分开,而并没有上级路径分开,也是可以分成不同的组。
通过前面的例子,我们会发现,所有执行体函数,可以有一个返回值或者没有返回值。Tango的内部插件ReturnHandler来负责根据函数的第一个返回值的类型来自动的生成输出,默认规则如下:
string&返回string,则string会被转换为bytes并写入到ResponseWriter,默认状态码为200
[]byte&返回[]byte, 则会直接写入ResponseWriter,默认状态码为200
error&返回error接口,如果不为nil, 则返回状态码为500,内容为error.Error()
AbortError&返回tango.AbortError接口,如果不为nil,则返回状态码为AbortError.Code,内容为AbortError.Error()
当然了,你可以撰写你自己的插件来判断更多的返回值类型。返回值结合tango的一些tricker,可以极大的简化代码,比如:
如果Action结构体包含匿名结构体tango.Json或者tango.Xml,则返回值结果如下:
如果包含tango.Json匿名结构体,则返回头的Content-Type会自动设置为:application/json:
如果返回值为error,则返回值为{“err”: err.Error()},状态码为200
如果返回值为AbortError,则返回值为{“err”: err.Error()},状态码为err.Code()
如果返回值为string,则返回值为{“content”: content},状态码为200
如果返回值为[]byte,则返回值为{“content”: string(content)},状态码为200
如果返回值为map,slice,结构体或其它可自动Json化的内容,则返回值为map自动json对应的值,状态码为200
例如:type&Action&struct&{
&&&&tango.Json
func&(Action)&Get()&interface{}&{
&&&&if&i&==&0&{
&&&&&&&&i&=&i&+&1
return&map[string]interface{}{"i":i}
&&&&return&errors.New("could&not&visit")
func&main()&{
&&&&t&:=&tango.Classic()
&&&&t.Any("/",&new(Action))
&&&&t.Run()
以上例子,访问时会始终返回json,第一次访问会返回map,第二次返回error。(注:这里只是演示代码,实际执行i必须加锁)Compress
Tango拥有一个默认的压缩中间件,可以按照扩展名来进行文件的压缩。同时,你也可以要求某个Action自动或强制使用某种压缩。比如:type&CompressExample&struct&{
&&&&press&//&添加这个匿名结构体,要求这个结构体的方法进行自动检测压缩
func&(CompressExample)&Get()&string&{
&&&&return&fmt.Sprintf("This&is&a&auto&compress&text")
o&:=&tango.Classic()
o.Get("/",&new(CompressExample))
以上代码默认会检测浏览器是否支持压缩,如果支持,则看是否支持gzip,如果支持gzip,则使用gzip压缩,如果支持deflate,则使用deflate压缩。type&GZipExample&struct&{
&&&&tango.GZip&//&add&this&for&ask&compress&to&GZip,&if&accept-encoding&has&no&gzip,&then&not&compress
func&(GZipExample)&Get()&string&{
&&&&return&fmt.Sprintf("This&is&a&gzip&compress&text")
o&:=&tango.Classic()
o.Get("/",&new(GZipExample))
以上代码默认会检测浏览器是否支持gzip压缩,如果支持gzip,则使用gzip压缩,否则不压缩。type&DeflateExample&struct&{
&&&&tango.Deflate&//&add&this&for&ask&compress&to&Deflate,&if&not&support&then&not&compress
func&(DeflateExample)&Get()&string&{
&&&&return&fmt.Sprintf("This&is&a&deflate&compress&text")
o&:=&tango.Classic()
o.Get("/",&new(DeflateExample))
以上代码默认会检测浏览器是否支持deflate压缩,如果支持deflate,则使用deflate压缩,否则不压缩。
Static 让你用一行代码可以完成一个静态服务器。func&main()&{
&&&&t&:=&tango.New(tango.Static())
&&&&t.Run()
然后,将你的文件放到&./public&目录下,你就可以通过浏览器放问到他们。比如:http://localhost/images/logo.png&&--&&./public/images/logo.png
当然,你也可以加入你basicauth或者你自己的认证中间件,这样就变为了一个私有的文件服务器。func&main()&{
&&&&t&:=&tango.New()
&&&&t.Use(AuthHandler)
&&&&t.Use(tango.Static())
&&&&t.Run()
Handler 是tango的中间件。在tango中,几乎所有的事情都由中间件来完成。撰写一个你自己的中间件非常简单,并且我们鼓励您只加载需要的中间件。
tango的中间件只需要符合以下接口即可。type&Handler&interface&{
&&&&Handle(*tango.Context)
同时,tango也提供了tango.HandlerFunc,以方便你将一个函数包装为中间件。比如:func&MyHandler()&tango.HandlerFunc&{
&&&&return&func(ctx&*tango.Context)&{
&&&&&&&&fmt.Println("this&is&my&first&tango&handler")
ctx.Next()
t&:=&tango.Classic()
t.Use(MyHandler())
正常的形式也可以是:type&HelloHandler&struct&{}
func&(HelloHandler)&Handle(ctx&*tango.Context)&{
&&&&fmt.Println("before")
&&&&ctx.Next()
&&&&fmt.Println("after")
t&:=&tango.Classic()
t.Use(new(HelloHandler))
当然,你可以直接将一个包含tango.Context指针的函数作为中间件,如:tg.Use(func(ctx&*tango.Context){
&&&&fmt.Println("before")
&&&&ctx.Next()
&&&&fmt.Println("after")
为了和标准库兼容,tango通过UseHandler支持http.Handler作为中间件,如:tg.UseHandler(http.Handler(func(resp&http.ResponseWriter,&req&*http.Request)&{
老的中间件会被action被匹配之前进行调用。
Call stack
以下是中间件的调用顺序图:tango.ServeHttp
|--Handler1
|--Handler2
|--&...HandlerN
&&&&&&&&|---Action(If&matched)
...HandlerN--|
Handler2&----|
Handler1--|
在中间件中,您的中间件代码可以在Next()被调用之前或之后执行,Next表示执行下一个中间件或Action被执行(如果url匹配的话)。如果不调用Next,那么当前请求将会被立即停止,之后的所有代码将不会被执行。
更多的注入方式参见以下示例代码:
Requesttype&Action&struct&{
&&&&tango.Req
Responsetype&Action&struct&{
&&&&tango.Resp
Contexttype&Action&struct&{
&&&&tango.Ctx
Loggertype&Action&struct&{
&&&&tango.Log
Paramstype&Action&struct&{
&&&&tango.Params
Jsontype&Action&struct&{
&&&&tango.Json
Xmltype&Action&struct&{
&&&&tango.Xml
第三方插件
目前已经有了一批第三方插件,更多的插件正在陆续开发中,欢迎大家进行贡献:&- Session管理
&- 生成csrf token和进行校验
&- 自动绑定参数到结构体
&- Go模板引擎插件
&- 多应用支持
&-&&模板引擎支持
&- 验证码插件
&- 事件插件
&- 在requests之间共享数据
案例&- 论坛的修改版
&- 一个新型博客
go-tango最新更新资讯,共2条&&()
5评/2567阅
授权协议:
开发语言:
操作系统:
收录时间:
-& 日&&(国产软件 or 国人参与)
go-tango 的类似软件,共881个
Valum 是 Vala 语言用来开发 Web 应用的微型框架。 特点 支持 scope 的路由、类型化参数和底层工具包 简单的请求回应机制 完全支持 FastCGI 协议 CTPL 简单的模板引擎
horseshit 是一个易于使用的命令行程序,能阻止已知的网站转移我们的工作,它从 leftnode/get-shit-done 分出。
Spring Statemachine (Spring 状态机)是使用 Spring 框架下的状态机概念创建的一种应用程序开发框架。它使得状态机结构层次化,简化了配置状态机的过程。 详细功能: Easy to use flat one level state machine...
pkgcore 是一个包管理框架。通过使用适当的类插件,pkgcore 就能够允许使用任何底层的库、配置以及格式(underlying repository/config/format);然而它不支持slackware&s tgzs 和 Autopackage format;它也只能...
requests-guard 是一个小型库,能允许你加强 HTTP 请求的大小和时间限制。
django-redis-metrics 这个应用允许你定义各种命名指标(例如“新用户”,“下载”,“购买”),并且在事件发生时记录。
Trace Viewer 是 Chrome 和 Android Systrace 的 JavaScript 前端。它提供给各种类型的跟踪文件提供强大的分析和可视化能力,在跟踪 Linux kernel 和 Chrome 的 trace_event format 上尤其有用。Trace Viewer 可作...
Enterprise Java Beans (EJB) 3.0 对 EJB 规范进行了深入改革和简化。EJB 3.0 的目标是简化开发,促进测试驱动开发,更专注于编写纯 Java 对象(POJOs) 而不是复杂的 EJB APIs。EJB 3.0 完全认同 JDK 5.0 引入的 ...
Pageloader 是一个创建页面目标的框架,它用于浏览器内部测试或者 Web 驱动测试。
Valatra 是一个 Vala 语言用来开发 Web 应用的框架,灵感来自于 Ruby 的 Sinatra 框架。 示例代码: var app = new Valatra.App();
app.port = 3333;
app.get(&/&, (req, res) =& {
/* 200 by ...
共有 881 个类似软件
Spring Framework 是一个开源的Java/Java EE全功能栈(full-stack)的应用程序框架...
JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量...
Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC)风格的 Web 应用...
Yii是一个高性能的PHP5的web应用程序开发框架。通过一个简单的命令行工具 yiic 可以...
Struts 是 Apache软件基金会(ASF)赞助的一个开源项目。它最初是 Jakarta项目中的...
Play!是一个full-stack(全栈的)Java Web应用框架,包括一个简单的无状态MVC模型...
Zend Framework (ZF) 是用 PHP 5 来开发 web 程序和服务的开源框架。ZF 用 100% 面...
ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架,遵循Apa...
Google 网页工具包——GWT 提供了一组基于Java语言的开发包,这个开发包的设计参考...
Ruby on Rails 是一个用于开发数据库驱动的网络应用程序的完整框架。Rails基于MVC...
共有 24 人关注 go-tango您所在的位置: & 标签 & Tango
当前标签:Tango
Tango是唯一一款让您可以进行免费视频通话、发送免费文本信息和发送免费视频信息的应用程序! 查阅我们的精彩评论,看大家如何使用 Tango 与朋友和家人保持联系。使用 3G、4G 和 Wi-Fi 的最佳视频呼叫 与多数智能手机、
大小:11.77 MB
下载:1035次
8606551次下载
28460次下载
22976次下载
32920次下载
115019次下载
262457次下载
93119次下载
161968次下载
9185941次下载
131610次下载
9634319次下载
9185941次下载
8606551次下载
8084757次下载
6777714次下载
6762828次下载
热门关键字
微信扫一扫关注下载吧公共帐号&&&&&&&&& 谈客视频通话 Tango Video Calls 2.2.29122 For Android&&&
谈客视频通话 Tango Video Calls
文件类型:手机聊天软件厂商:Tango
版本信息:2.2.29122文件大小:11.77 MB
发布时间:推荐度:
软件标签:
是否收费:免费
适用系统:Android&&&
软件下载统计:本周:883 本月:928 总计:4088
  Tango为您带来免费的高品质视频通话,在3G和Wi-Fi网络上都运行如飞!全世界数百万用户都在使用妙趣横生又简单易用的Tango视频通话服务。
  Tango让您随时随地与家人很朋友分享美妙瞬间,在旅途之中每天与您的孩子见面,在购物时随时联络朋友获得建议,或与身处异地的男/女朋友倾诉衷肠。这一切通过视频通话技术将全面超越传统的音频通话体验。
  Tango 功能:
  -随时随地与您的家人和朋友免费视频聊天
  -Tango支持 Android设备和iOS设备在3G,4G或WiFi网络上互联互通
  -Tango支持更多的Android设备,包括三星GalaxyS and Galaxy T HTC EVO, Desire, and Incredible,摩托罗拉Droid and Droid X和 Google Nexus S
  -Tango会自动在您的电话本里匹配已经使用Tango的朋友
  -可使用短信或电邮邀请您的朋友加入Tango
  -在通话中随时可以打开或关闭音频或视频功能
  -注册只需5秒钟,简单易用
&&&&此版本中的新功能:
&&&&新!支持在 Tango 消息中发送图片!可以拍摄新照片或选择一张现有照片。
&&&&新!Tango 游戏——压扁虫子!看谁在下次视频通话中赢得高分。
&&&&Tango 特色功能选项卡——每几周就推出新的 Tango Surprises。
&&&&对方没有接听电话?轻松留一条文本或视频消息。
&&&&以前的版本:
&&&&音频质量改善
&&&&呼叫连接速度加快
&&&&现在通过 Tango 联系人列表,即可访问设置页面
&&&& 修复错误
&&适用机型:
华为 Mate 7,
三星 GALAXY S6,
华为 荣耀6 Plus 移动4G,
魅族 魅蓝Note,
小米 4 移动4G版,
三星 GALAXY A7,
华为 荣耀6 移动4G标准版,
华为 荣耀畅玩4X,
三星 GALAXY S6 Edge,
华为 Mate 7 高配版移动4G,
华为 荣耀X2 标准版,
三星 GALAXY Note Edge,
三星 GALAXY Note 4,
华为 荣耀6 Plus 双4G,
华为 荣耀畅玩4X 移动4G,
nubia Z9 mini,
华为 Mate 7 尊爵版双4G,
华为 Mate 7 标准版电信4G,

我要回帖

更多关于 mango tango 的文章

 

随机推荐