美团放弃go语言 美团放弃go语言是什么

驳狗屎文 "我为什么放弃Go语言此篇文章流传甚广, 其实里面没啥干货, 而且里面很多观点是有问题的. 这个文章在 golang-china 很早就讨论过了.
最近因为 Rust 1.0 和 1.1 的发布, 导致这个文章又出来毒害读者.
所以写了这篇反驳文章, 指出其中的问题.
有好几次,当美团放弃go语言我想起来的时候,总是会问自己:美团放弃go语言我为什么要放弃Go语言美团放弃go语言?这个决定是正确的吗?是明智和理性的吗?其实我一直在认真思考这个问题 。
开门见山地说 , 我当初放弃Go语言(golang),就是因为两个“不爽”:第一,对Go语言本身不爽美团放弃go语言;第二,对Go语言社区里的某些人不爽 。毫无疑问,这是非常主观的结论 。但是我有足够详实的客观的论据 , 用以支撑这个看似主观的结论 。
文末附有本文更新日志 。
确实是非常主观的结论, 因为里面有不少有问题的观点(用来忽悠Go小白还行).
第0节:我的Go语言经历
先说说我的经历吧 , 以避免被无缘无故地当作Go语言的低级黑 。
2009年底,Go语言(golang)第一个公开版本发布,笼罩着“Google公司制造”的光环,吸引了许多慕名而来的尝鲜者,我(Liigo)也身居其中,笼统的看了一些Go语言的资料 , 学习了基础的教程 , 因对其语法中的分号和花括号不满 , 很快就遗忘掉了 , 没拿它当一回事 。
在2009年Go刚发布时, 确实是因为“Google公司制造”的光环而吸引了(包括文章作者和诸多IT采访人员)很多低级的尝鲜者.
还好, 经过5年的发展, 这些纯粹因为光环来的投机者所剩已经不多了(Google趋势).
目前, 真正的Go用户早就将Go用于实际的生产了.
说到 其语法中的分号和花括号不满, 我想说这只是你的 个人主观感受, 还有很多人对Go的分号和花括号很满意,
包括水果公司的的 Swift 的语言设计者也很满意这种风格(Swift中的分号和花括号和Go基本相同).
如果只谈 个人主观感受, 我也可以说 Rust 的 fn 缩写也很蛋疼!
两年之后,2011年底 , Go语言发布1.0的计划被提上日程,相关的报道又多起来,我再次关注它,重新评估之后决定深入参与Go语言 。我订阅了其users、nuts、dev、commits等官方邮件组,坚持每天阅读其中的电子邮件,以及开发者提交的每一次源代码更新,给Go提交了许多改进意见 , 甚至包括修改Go语言编译器源代码直接参与开发任务 。如此持续了数月时间 。
这个到是事实, 在 golang-china 有不少吵架的帖子, 感兴趣的可以去挖下, 我就不展开说了.
到2012年初,Go 1.0发布 , 语言和标准库都已经基本定型,不可能再有大幅改进,我对Go语言未能在1.0定型之前更上一个台阶、实现自我突破,甚至带着诸多明显缺陷走向1.0,感到非常失望 , 因而逐渐疏远了它(所以Go 1.0之后的事情我很少关心) 。后来看到即将发布的Go 1.1的Release Note,发现语言层面没有太大改变 , 只是在库和工具层面有所修补和改进,感到它尚在幼年就失去成长的动力,越发失望 。外加Go语言社区里的某些人,其中也包括Google公司负责开发Go语言的某些人,其态度、言行,让我极度厌恶,促使我决绝地离弃Go语言 。
真的不清楚楼主说的可以在 Go1.0 之前短时间内能实现的 重大改进和诸多明显缺陷 是什么.
如果是楼主说前面的 其语法中的分号和花括号不满 之类的重大改进, 我只能说这只是你的 个人主观感受 而已,
你的很多想法只能说服你自己, 没办法说服其美团放弃go语言他绝大部分人(不要以为像C或Rust那样什么特性都有就NB了, 各种NB特性加到一起只能是 要你命3000, 而绝对不会是什么 银弹).
Go 1.1的Release Note,发现语言层面没有太大改变. 语言层没有改变是是因为 Go1 作出的向后兼容的承诺. 对于工业级的语言来说, Go1 这个只能是优点. 如果连语言层在每个版本都会出现诸多大幅改进, 那谁还敢用Go语言来做生产开发呢(我承认Rust的改动很大胆, 但也说明了Rust还处于比较幼稚和任性的阶段)?
说 Go语言社区里的某些人固执 的观点我是同意的. 但是这些 固执 的人是可以讲道理的, 但是他们对很多东西的要求很高(特别是关于Go的设计哲学部分).
只要你给的建议有依据(语言的设计哲学是另外一回事情), 他们绝对不会盲目的拒绝(只是讨论的周期会比较长).
关于楼主提交的给Go文件添加BOM的文章, 需要补充说明下.
在Go1.0发布的时候, Go语言的源文件(.go)明确要求必须是UTF8编码的, 而且是无BOM的UTF8编码的.
注意: 这个 无BOM的UTF8编码 的限制仅仅是 针对 Go语言的源文件(.go).
这个限制并不是说不允许用户处理带BOM的UTF8的txt文件!
我觉得对于写Go程序来说, 这个限制是没有任何问题的, 到目前为止, 我还从来没有使用过带BOM的.go文件.
不仅是因为带BOM的.go文件没有太多的意义, 而且有很多的缺陷.
BOM的原意是用来表示编码是大端还是小端的, 主要用于UTF16和UTF32. 对于 UTF8 来说, BOM 没有任何存在的意义(正是Go的2个作者发明了UTF8, 彻底解决了全球的编码问题).
但是, 在现实中, 因为MS的txt记事本, 对于中文环境会将txt(甚至是C/C源文件)当作GBK编码(GBK是个烂编码),
为了区别到底是GBK还是UTF8, MS的记事本在前面加了BOM这个垃圾(被GBK占了茅坑), 这里的bom已经不是表示字节序本意了. 不知道有没有人用ms的记事本写网页, 然后生成一个带bom的utf8网页肯定很有意思.
这是MS的记事本的BUG: 它不支持生成无BOM的UTF8编码的文本文件!
这些是现实存在的带BOM的UTF8编码的文本文件, 但是它们肯定都不是Go语言源文件!
所以说, Go语言的源文件即使强制限制了无BOM的UTF8编码要求, 也是没有任何问题的(而且我还希望有这个限制).
虽然后来Go源文件接受带BOM的UTF8了, 但是运行 go fmt 之后, 还是会删除掉BOM的(因为BOM就是然并卵). 也就是说 带 BOM 的 Go 源文件是不符合 Go语言的编码风格的, go fmt 会强制删除 BOM 头.
前面说了BOM是MS带来的垃圾, 但是BOM的UTF8除了然并卵之外还有很多问题, 因为BOM在string的开头嵌入了垃圾,
导致正则表达式, string的链接运算等操作都被会被BOM这个垃圾所污染. 对于.go语言, 即使代码完全一样, 有BOM和无BOM会导致文件的MD5之类的校验码不同.
所以, 我觉得Go用户不用纠结BOM这个无关紧要的东西.
在上一个10年,我(Liigo)在我所属的公司里,深度参与了两个编程语言项目的开发 。我想,对于如何判断某个编程语言的优劣,或者说至少对于如何判断某个编程语言是否适合于我自己 , 我应该还是有一点发言权的 。
第1节:我为什么对Go语言不爽?
Go语言有很多让我不爽之处,这里列出我现在还能记起的其中一部分,排名基本上不分先后 。读者们耐心地看完之后,还能淡定地说一句“我不在乎”吗?
1.1 不允许左花括号另起一行
关于对花括号的摆放,在C语言、C、Java、C#等社区中,十余年来存在持续争议,从未形成一致意见 。在我看来,这本来就是主观倾向很重的抉择 , 不违反原则不涉及是非的情况下,不应该搞一刀切,让程序员或团队自己选择就足够了 。编程语言本身强行限制,把自己的喜好强加给别人,得不偿失 。无论倾向于其中任意一种,必然得罪与其对立的一群人 。虽然我现在已经习惯了把左花括号放在行尾 , 但一想到被禁止其他选择,就感到十分不爽 。Go语言这这个问题上,没有做到“团结一切可以团结的力量”不说,还有意给自己树敌,太失败了 。
我觉得Go最伟大的发明是 go fmt, 从此Go用户不会再有花括弧的位置这种无聊争论了(当然也少了不少灌水和上tiobe排名的机会).
是这优点, Swift 语言也使用和 Go 类似的风格(当然楼主也可能鄙视swift的作者).
1.2 编译器莫名其妙地给行尾加上分号
对Go语言本身而言 , 行尾的分号是可以省略的 。但是在其编译器(gc)的实现中 , 为了方便编译器开发者,却在词法分析阶段强行添加了行尾的分号,反过来又影响到语言规范,对“怎样添加分号”做出特殊规定 。这种变态做法前无古人 。在左花括号被意外放到下一行行首的情况下,它自动在上一行行尾添加的分号 , 会导致莫名其妙的编译错误(Go 1.0之前),连它自己都解释不明白 。如果实在处理不好分号,干脆不要省略分号得了;或者,Scala和JavaScript的编译器是开源的,跟它们学学怎么处理省略行尾分号可以吗?
又是楼主的 个人主观感受, 不过我很喜欢这个特性. Swift 语言也是类似.
1.3 极度强调编译速度 , 不惜放弃本应提供的功能
程序员是人不是神,编码过程中免不了因为大意或疏忽犯一些错 。其中有一些,是大家集体性的很容易就中招的错误(Go语言里的例子我暂时想不起来,C里的例子有“基类析构函数不是虚函数”) 。这时候编译器应该站出来 , 多做一些检查、约束、核对性工作,尽量阻止常规错误的发生 , 尽量不让有潜在错误的代码编译通过,必要时给出一些警告或提示,让程序员留意 。编译器不就是机器么,不就是应该多做脏活累活杂活、减少人的心智负担么?编译器多做一项检查,可能会避免数十万程序员今后多年内无数次犯同样的错误,节省的时间不计其数,这是功德无量的好事 。但是Go编译器的作者们可不这么想,他们不愿意自己多花几个小时给编译器增加新功能,觉得那是亏本,反而减慢了编译速度 。他们以影响编译速度为由 , 拒绝了很多对编译器改进的要求 。典型的因噎废食 。强调编译速度固然值得赞赏 , 但如果因此放弃应有的功能,我不赞成 。
编译速度是很重要的, 如果编译速度够慢, 语言再好也不会有人使用的.
比如C/C的增量编译/预编译头文件/并发编译都是为了提高编译速度.
Rust1.1 也号称 比 1.0 的编译时间减少了32% (注意: 不是运行速度).
当然, Go刚面世的时候, 编译速度是其中的一个设计目标.
不过我想楼主, 可能想说的是因为编译器自己添加分号而导致的编译错误的问题.
我觉得Go中 { 不能另起一行是语言特性, 如果修复这个就是引入了新的错误.
其他的我真想不起来还有哪些 调编译速度,不惜放弃本应提供的功能 (不要提泛型, 那是因为还没有好的设计).
1.4 错误处理机制太原始
在Go语言中处理错误的基本模式是:函数通常返回多个值,其中最后一个值是error类型,用于表示错误类型极其描述;调用者每次调用完一个函数,都需要检查这个error并进行相应的错误处理:if err != nil { /*这种代码写多了不想吐么*/ } 。此模式跟C语言那种很原始的错误处理相比如出一辙,并无实质性改进 。实际应用中很容易形成多层嵌套的if else语句,可以想一想这个编码场景:先判断文件是否存在,如果存在则打开文件 , 如果打开成功则读取文件,如果读取成功再写入一段数据,最后关闭文件,别忘了还要处理每一步骤中出现错误的情况,这代码写出来得有多变态、多丑陋?实践中普遍的做法是,判断操作出错后提前return,以避免多层花括号嵌套,但这么做的后果是,许多错误处理代码被放在前面突出的位置,常规的处理逻辑反而被掩埋到后面去了,代码可读性极差 。而且 , error对象的标准接口只能返回一个错误文本,有时候调用者为了区分不同的错误类型,甚至需要解析该文本 。除此之外,你只能手工强制转换error类型到特定子类型(静态类型的优势没了) 。至于panic - recover机制,致命的缺陷是不能跨越库的边界使用,注定是一个半成品 , 最多只能在自己的pkg里面玩一玩 。Java的异常处理虽然也有自身的问题(比如Checked Exceptions),但总体上还是比Go的错误处理高明很多 。
话说, 软件开发都发展了半个世纪, 还是无实质性改进. 不要以为弄一个异常的语法糖就是革命了.
我只能说错误和异常是2个不同的东西, 将所有错误当作异常那是SB行为.
正因为有异常这个所谓的银弹, 导致很多等着别人帮忙擦屁股的行为(注意 shit 函数抛出的绝对不会是一种类型的 shit, 而被其间接调用的各种 xxx_shit 也可能抛出各种类型的异常, 这就导致 catch 失控了):
int main() {
try {
shit();
} catch( /* 到底有几千种 shit ? */) {
...
}
}
Go的建议是 panic - recover 不跨越边界, 也就是要求正常的错误要由pkg的处理掉.
这是负责任的行为.
再说Go是面向并发的编程语言, 在海量的 goroutine 中使用 try/catch 是不是有一种不伦不类的感觉呢?
1.5 垃圾回收器(GC)不完善、有重大缺陷
在Go 1.0前夕,其垃圾回收器在32位环境下有内存泄漏 , 一直拖着不肯改进,这且不说 。Go语言垃圾回收器真正致命的缺陷是,会导致整个进程不可预知的间歇性停顿 。像某些大型后台服务程序,如游戏服务器、APP容器等,由于占用内存巨大,其内存对象数量极多,GC完成一次回收周期,可能需要数秒甚至更长时间,这段时间内,整个服务进程是阻塞的、停顿的,在外界看来就是服务中断、无响应,再牛逼的并发机制到了这里统统失效 。垃圾回收器定期启动,每次启动就导致短暂的服务中断,这样下去,还有人敢用吗?这可是后台服务器进程,是Go语言的重点应用领域 。以上现象可不是我假设出来的,而是事实存在的现实问题 , 受其严重困扰的也不是一家两家了(2013年底ECUG Con 2013,京东的刘奇提到了Go语言的GC、defer、标准库实现是性能杀手 , 最大的痛苦是GC;美团的沈锋也提到Go语言的GC导致后台服务间隔性停顿是最大的问题 。更早的网络游戏仙侠道开发团队也曾受Go垃圾回收的沉重打击) 。在实践中,你必须努力减少进程中的对象数量,以便把GC导致的间歇性停顿控制在可接受范围内 。除此之外你别无选择(难道你还想自己更换GC算法、甚至砍掉GC?那还是Go语言吗?) 。跳出圈外,我近期一直在思考 , 一定需要垃圾回收器吗?没有垃圾回收器就一定是历史的倒退吗?(可能会新写一篇博客文章专题探讨 。)
这是说的是32位系统, 这绝对不是Go语言的重点应用领域!! 我可以说Go出生就是面向64位系统和多核心CPU环境设计的. (再说 Rust 目前好像还不支持 XP 吧, 这可不可以算是影响巨大?)
32位当时是有问题, 但是对实际生产影响并不大(请问楼主还是在用32位系统吗, 还只安装4GB的内存吗). 如果是8位单片机环境, 建议就不要用Go语言了, 直接C语言好了.
而且这个问题早就不存在了(大家可以去看Go的发布日志).
Go的出生也就5年时间, GC的完善和改进是一个持续的工作, 2015年8月将发布的 Go1.5将采用并行GC.
关于GC的被人诟病的地方是会导致卡顿, 但是我以为这个主要是因为GC的实现还不够完美而导致的.
如果是完美的并发和增量的GC, 那应该不会出现大的卡顿问题的.
当然, 如果非要实时性, 那用C好了(实时并不表示性能高, 只是响应时间可控).
对于Rust之类没有GC的语言来说, 想很方便的开发并发的后台程序那几乎是不可能的.
不要总是吹Rust能代替底层/中层/上层的开发, 我们要看有谁用Rust真的做了什么.
1.6 禁止未使用变量和多余import
Go编译器不允许存在被未被使用的变量和多余的import,如果存在,必然导致编译错误 。但是现实情况是,在代码编写、重构、调试过程中,例如,临时性的注释掉一行代码,很容易就会导致同时出现未使用的变量和多余的import,直接编译错误了,你必须相应的把变量定义注释掉 , 再翻页回到文件首部把多余的import也注释掉,……等事情办完了,想把刚才注释的代码找回来 , 又要好几个麻烦的步骤 。还有一个让人蛋疼的问题,编写数据库相关的代码时,如果你import某数据库驱动的pkg,它编译给你报错,说不需要import这个未被使用的pkg;但如果你听信编译器的话删掉该import,编译是通过了 , 运行时必然报错 , 说找不到数据库驱动;你看看程序员被折腾的两边不是人,最后不得不请出大神:import _ 。对待这种问题,一个比较好的解决方案是,视其为编译警告而非编译错误 。但是Go语言开发者很固执,不容许这种折中方案 。
这个问题我只能说楼主的吐槽真的是没水平.
为何不使用的是错误而不是警告? 这是为了将低级的bug消灭在编译阶段(大家可以想下C/C的那么多警告有什么卵用).
而且, import 即使没有使用的话, 也是用副作用的, 因为 import 会导致 init 和全局变量的初始化.
如果某些代码没有使用, 为何要执行 init 这些初始化呢?
如果是因为调试而添加的变量, 那么调试完删除不是很正常的要求吗?
如果是因为调试而要导入fmt或log之类的包, 删除调试代码后又导致 import 错误的花,
楼主难道不知道在一个独立的文件包装下类似的辅助调试的函数吗?
import (
"fmt"
"log"
)
func logf(format string, a ...interface{}) {
file, line := callerFileLine()
fmt.Fprintf(os.Stderr, "%s:%d: ", file, line)
fmt.Fprintf(os.Stderr, format, a...)
}
func fatalf(format string, a ...interface{}) {
file, line := callerFileLine()
fmt.Fprintf(os.Stderr, "%s:%d: ", file, line)
fmt.Fprintf(os.Stderr, format, a...)
os.Exit(1)
}
import _ 是有明确行为的用法, 就是为了执行包中的 init 等函数(可以做某些注册操作).
将警告当作错误是Go的一个哲学, 当然在楼主看来这是白痴做法.
1.7 创建对象的方式太多令人纠结
创建对象的方式,调用new函数、调用make函数、调用New方法、使用花括号语法直接初始化结构体,你选哪一种?不好选择 , 因为没有一个固定的模式 。从实践中看,如果要创建一个语言内置类型(如channel、map)的对象,通常用make函数创建;如果要创建标准库或第三方库定义的类型的对象 , 首先要去文档里找一下有没有New方法,如果有就最好调用New方法创建对象,如果没有New方法,则退而求其次,用初始化结构体的方式创建其对象 。这个过程颇为周折 , 不像C、Java、C#那样直接new就行了 。
C的new是狗屎. new导致的问题是构造函数和普通函数的行为不一致, 这个补丁特性真的没啥优越的.
我还是喜欢C语言的 fopen 和 malloc 之类构造函数, 构造函数就是普通函数, Go语言中也是这样.
C中, 除了构造不兼容普通函数, 析构函数也是不兼容普通函数. 这个而引入的坑有很多吧.
1.8 对象没有构造函数和析构函数
没有构造函数还好说,毕竟还有自定义的New方法 , 大致也算是构造函数了 。没有析构函数就比较难受了,没法实现RAII 。额外的人工处理资源清理工作,无疑加重了程序员的心智负担 。没人性?。?还嫌我们程序员加班还少吗?C里有析构函数 , Java里虽然没有析构函数但是有人家finally语句啊 , Go呢,什么都没有 。没错 , 你有个defer,可是那个defer问题更大,详见下文吧 。
defer 可以覆盖析构函数的行为, 当然 defer 还有其他的任务. Swift2.0 也引入了一个简化版的 defer 特性.
1.9 defer语句的语义设定不甚合理
Go语言设计defer语句的出发点是好的,把释放资源的“代码”放在靠近创建资源的地方 , 但把释放资源的“动作”推迟(defer)到函数返回前执行 。遗憾的是其执行时机的设置似乎有些不甚合理 。设想有一个需要长期运行的函数,其中有无限循环语句 , 在循环体内不断的创建资源(或分配内存),并用defer语句确保释放 。由于函数一直运行没有返回,所有defer语句都得不到执行,循环过程中创建的大量短暂性资源一直积累着,得不到回收 。而且,系统为了存储defer列表还要额外占用资源,也是持续增加的 。这样下去,过不了多久,整个系统就要因为资源耗尽而崩溃 。像这类长期运行的函数 , http.ListenAndServe()就是典型的例子 。在Go语言重点应用领域,可以说几乎每一个后台服务程序都必然有这么一类函数 , 往往还都是程序的核心部分 。如果程序员不小心在这些函数中使用了defer语句,可以说后患无穷 。如果语言设计者把defer的语义设定为在所属代码块结束时(而非函数返回时)执行,是不是更好一点呢?可是Go 1.0早已发布定型,为了保持向后兼容性 , 已经不可能改变了 。小心使用defer语句!一不小心就中招 。
前面说到 defer 还有其他的任务, 也就是 defer 中执行的 recover 可以捕获 panic 抛出的异常.
还有 defer 可以在 return 之后修改命名的返回值.
上面2个工作要求 defer 只能在函数退出时来执行.
楼主说的 defer 是类似 Swift2.0 中 defer 的行为, 但是 Swift2.0 中 defer 是没有前面2个特性的.
Go中的defer是以函数作用域作为触发的条件的, 是会导致楼主说的在 for 中执行的错误用法(哪个语言没有坑呢?).
不过 for 中 局部 defer 也是有办法的 (Go中的defer是以函数作用域):
for {
func(){
f, err := os.Open(...)
defer f.Close()
}()
}
在 for 中做一个闭包函数就可以了. 自己不会用不要怪别人没告诉你.
1.10 许多语言内置设施不支持用户定义的类型
for in、make、range、channel、map等都仅支持语言内置类型,不支持用户定义的类型(?) 。用户定义的类型没法支持for in循环,用户不能编写像make、range那样“参数类型和个数”甚至“返回值类型和个数”都可变的函数,不能编写像channel、map那样类似泛型的数据类型 。语言内置的那些东西,处处充斥着斧凿的痕迹 。这体现了语言设计的局限性、封闭性、不完善 , 可扩展性差 , 像是新手作品——且不论其设计者和实现者如何权威 。延伸阅读:Go语言是30年前的陈旧设计思想,用户定义的东西几乎都是二等公民(Tikhon Jelvis) 。
说到底, 这个是因为对泛型支持的不完备导致的.
Go语言是没啥NB的特性, 但是Go的特性和工具组合在一起就是好用.
这就是Go语言NB的地方.
1.11 没有泛型支持,常见数据类型接口丑陋
没有泛型的话,List、Set、Tree这些常见的基础性数据类型的接口就只能很丑陋:放进去的对象是一个具体的类型,取出来之后成了无类型的interface{}(可以视为所有类型的基础类型) , 还得强制类型转换之后才能继续使用 , 令人无语 。Go语言缺少min、max这类函数,求数值绝对值的函数abs只接收/返回双精度小数类型,排序接口只能借助sort.Interface无奈的回避了被比较对象的类型,等等等等,都是没有泛型导致的结果 。没有泛型 , 接口很难优雅起来 。Go开发者没有明确拒绝泛型 , 只是说还没有找到很好的方法实现泛型(能不能学学已经开源的语言呀) 。现实是,Go 1.0已经定型 , 泛型还没有,那些丑陋的接口为了保持向后兼容必须长期存在着 。
Go有自己的哲学, 如果能有和目前哲学不冲突的泛型实现, 他们是不会反对的.
如果只是简单学学(或者叫抄袭)已经开源的语言的语法, 那是C的设计风格(或者说C从来都是这样设计的, 有什么特性就抄什么), 导致了各种脑裂的编程风格.
编译时泛型和运行时泛型可能是无法完全兼容的, 看这个例子:
type AdderT interface {
Add(a, b T) T
}
关于美团骑手工作辛苦不容易的语录关于美团骑手工作辛苦不容易的语录【篇一】
1.你们把方便温暖送进千家万户,快递是你们施展才华的舞台 。每一张快递单都是你沟通客户的眼睛,你们把顾客奉为上帝,你们将友情视为亲情,你们的故事好多好多,你们的声音是那么的动听......你们对工作负责认真 , 你们对顾客满腔热情,难以忘记你们经常说起做人不能只为了自己,你们将夏日里的凉爽让给别人,你们把泪水、苦恼、劳累深深地藏在自己心中 , 你们用身躯阻挡了酷暑和严寒,给群众送来温暖和关怀,你们用智慧调整着春夏与秋冬,带病工作份外劳动…
2.无论是严寒酷暑,还是雨雪风霜,无论是刚刚入行的大学生 , 还是有经验的师傅,都把顾客当做亲人 , 你们用心对待每一张单子、每一件物品、以至你们每一次行动,都以最快的速度送到顾客手中 。
3.双十一谁是最可爱的人?当然是快递员!没有快递员,剁手党们就收不到物美价廉的商品;没有快递员,互联网O2O概念只是一句空话;快递员,支起了中国经济的一片天!
4.下雨天,自己懒得做饭,也不会做,也心疼外卖小哥,所以没点餐,毕竟外面大雨漂泊的 , 所以就买了几袋方便面和羊肉让外卖小哥给送来了,我这鸡蛋,没谁了
5.原来,外卖小哥顶着猛烈的太阳 , 骑着电瓶车来我们小区时,路上车子碰到了一块大石头,人仰车翻,他脚上的皮破了,可乐也洒了 。但他顾不上疼痛 , 匆匆忙忙地把可乐收拾干净,又返回到店里,被老板说了一顿,又顶着大太阳过来,因此现在才到 。
6.正式上班远远没有别人眼里那么潇洒 , 整天开车溜达 。刚开始路线不熟悉,做单不熟练,往往都是事半功倍,付出比老员工更多的时间与汗水 。忙的时候经常会忘记吃饭 。从周一到周六,基本上都是起五更睡半夜 。一天大约只能睡五六个小时的觉 。白天爬楼梯、转商场,饥肠辘辘;晚上做完单、交完单,开车回家 , 已经是恹恹欲睡了 。
7.”我拨通了外卖小哥的电话,没好气地说 。
8.外卖点餐 , 让美味简单一“点 。
9.当晚霞浮出的时刻 , 忙碌了一天的你,脸上终于露出了轻松的笑容,这时候你才有闲暇得以与同事啦啦家常,轻松放歌或打理自己的家事;笑得那样开心、那样甜蜜,那么爽朗、那么从容……
10.今天外卖点了奶茶,后来下雨了 , 外卖小哥打电话跟我说车子坏了,能不能提前确认送到,不然要被扣钱 , 很有礼貌 , 我同意了,下个雨小哥步行把奶茶送给我,下雨天又特别冷,临走时他跟我说美女,奶茶还热的,我尽力了 。
11.我这个你不爱的人,还单身一个人 。
12.食尚“心”主张,e餐急送“往” 。
13.我今天办了一件没带脑子的事,点外卖点到内蒙去了 。
14.就在这时,一位身穿蓝色上衣的男子刚准备踏进电梯里 , “滴”的一声 , 超载的警报器响起来了 , 那声音足够响亮,足够刺耳,传进了每一个人的耳朵里 。可是大家就象都没有听见一样,没有一丝丝的挪动,没有一丝丝的举止,没有一点点的想要让位的举动 。刹那间,空气突然安静了下来,气氛紧张了下来,突然,那个外卖小哥拎着它的外卖包一直说借过,从人群中挤出来走下电梯还一边说:“我到了 。”于是匆匆离去 。那些在大企业上班的白领们顿时个个都羞红了脸,他们为自己的素质所惭愧,甚至感到无地自容,他们在这一方面竟比不上一个外面小哥!
15.每一个小小的包裹都要经过许多流程,夹着快递员们的汗水,在一通电话之后“轻松”来到大家的手里,可是,又有谁看到快递员们奔波劳碌的辛苦呢!顿时 , 有股暖流涌进了我的心田……
16.我也想体谅外卖小哥下雨天送外卖慢
17.外卖小哥:最喜欢下雨天了,下雨天单子最多!泪奔 。
18.订餐送餐经典,速递服务首选 。
19.今天点的外卖好吃啊空气这么差也外卖小哥要去上班,好辛苦,我该感谢他呀 。所以我用软件给他发点红包了 。
20.在一个烈日炎炎的夏天,一位外卖小哥照常接着送下一单外卖 。
关于美团骑手工作辛苦不容易的语录【篇二】
21.谢谢这两天冒着大风大雨给我们送外卖的外卖小哥,还有今天给送水果的小哥哥,辛苦了,你的声音很好听,你家的冬枣我很喜欢 。
22.年四季一样坚持送外卖,不管雨雪风霜坚持!
23.路上遇到很多快递员这个点还在辛苦的送着快递,想到我的睡衣丢了的事情,虽然有点小贵肉疼 , 但看到他们真的好辛苦 。
24.小时速达直通车,美食开到家 。
25.点餐送外卖,送餐速度就是快 。
26.不知是谁说的:‘’少壮不努力 , 长大送快递 。”细加思索觉得是有道理的,至少说明送快递这活是很辛苦的 。农村人教育孩子说:如果你不好好学习长大了就要种地 。现在应该说:如果你不好好学习长大了就要送快递 。
27.当人们悠闲在家消遣玩乐时,请为我们带来了生活便利、在街头巷尾来往穿梭、汗流浃背留下背影的外卖小哥们 , 说一声谢谢!
28.真的特别辛苦,现在深夜致敬一下我们所有还在奋战的外卖小哥们 。
29.其实,雷海为和其他外卖小哥并没有什么不同,白天,他兢兢业业送快递;下班后,别的同事躺在床上刷快手、看直播、打游戏时,他就静下来读诗词 。晚上学习,白天复习,有时忘记了,就在送快递等红灯时赶紧掏出手机查一查记下来 。无论在哪里 , 他的衣服口袋里总揣着一本《唐诗三百首》 , 他现在有800多首的诗词储备量 。
30.叫了个外卖,现在半夜快 点,外面气温 度,重度雾霾 , 外卖小哥真的很辛苦啊 。
31.把我们都惊着了,超级感动,对他说了注意安全 。下雨天冒着雨来送的,太感谢了 。
32.美食一“点”通,外卖欢乐“送” 。
33.分享简单生活,创造更多快乐 。
34.在我最讨厌的下雨天里送来吃的的,都是好男人……虽然楼道里黑乎乎的我没看清你长啥样,不过此时此刻我觉得你帅的发光 。外卖小哥谢谢你
35.吃饭订货只一点,速递更简单!
36.从今而后,我的世界不允许你消失 。
37.紧握着的拳,湿嗒嗒的鞋子 , 冷冷的冰雨在脸上拍 。用生命加塞 , 只为解救那些饥肠辘辘的陌生人 , 和身后不为人知的小日子 。外卖小哥辛苦了 。愿等你是一份笑脸,是一杯热茶 。一路平安 。
38.外卖小哥真的好幸苦,每次送外卖都与时间赛跑,他们不顾安全,只为能把客户点的餐准时送达 。不管是艳阳天,还是下雨天,街上总有他们身影,当你走在路上听到身后有铃声,请让一下,他们也许是与时间赛跑的外卖小哥 。收到外卖后请给他们说一句“幸苦了,注意安全”或着微笑说声“谢谢” 。超时请别去骂他们 , 因为你们不知道他们路上经历了什么 。
39.快递员真辛苦?。钤缭缟衔宓愣嗍盏叫畔ⅲ?现在晚上快十点收到信息,这也不是双十一 , 双十一还能送到半夜十二点好像 。
40.他戴一顶藏青色鸭舌帽 , 穿着快递公司发的“番茄炒蛋”颜色制服,里面是一件白底条纹衬衫 , 天凉加了件薄薄的橡皮红色小夹袄,脚上是一双有点旧了的白色旅游鞋 。比较特别的是,他手上戴了副棉线手套 。他说这是为了保护手,对人家的包裹也是一种爱护 。用的时间长了,手套颜色从原先的白色变成了灰色,还有点破损 , 露出左手的一只手指 。
生容易 , 活容易 , 生活不容易!
1、小鸟眷恋春天,因为它懂得飞翔才是生命的价值 。
2、只有相信自已,才能赢得别人的信任和肯定,为走向成功缩短距离 。
3、目标若是桌面,它需要用信念去支撑 。
4、有些路很远,走下去会很累 。
5、辛苦一阵子,幸福一辈子;快活一阵子,辛苦一辈子 。
6、时间就是我们当下的呼吸,每一刻都应该全心全意的生活 。
7、清贫,洁白朴素的生活,正是我们革命者能够战胜许多困难的地方!
8、纤云弄巧,飞星传恨,银汉迢迢暗渡 。金风玉露一相逢,便胜却人间无数 。
9、向前吧,荡起生命之舟,不必依恋和信泊,破浪的船自会一路开放常新的花朵.
10、成功不在难易,而在于是否采取行动
11、路是脚踏出来的,历史是人写出来的 。人的每一步行动都在书写自己的历史 。
12、心如止水:如果这个世界还时不时地带给你一些惊喜,请不要创业,因为你阅历不够 。
13、钱不是问题,问题是没钱!
14、谁有历经千辛万苦的意志,谁就能达到任何目的 。米南德
15、惟宽可容人,惟厚可载人 。
16、被克服的困难就是胜利的契机 。丘吉尔
17、不怕苦,吃苦三五年;怕吃苦,吃苦一辈子 。
18、活给自己看,谁人笑你懦弱
19、变来变去不叫创新,没有方向不叫进步,只破不立不叫发展 。
20、生容易,活容易,生活不容易!
21、不要因为自己的任性 , 就错放了一个本来是可以跟你好好的去过一辈子的人 。
22、[或者海水淹没岛屿失去踪迹]
23、世上无难事,只要肯登攀 。
24、莫为一身之谋 , 而有天下之志(清金缨)
25、当我们第一次相见的时候,我并没有想到,你在我心里会变得如此重要 。
26、君子不镜于水,而镜于人 。镜于水,见面之容 , 镜于人,则知吉与凶 。
27、不逼自己一把,怎么知道你有多优秀 。
28、用汗水挥洒青春,用拼搏诠释梦想!
29、Never say die. 永不气馁!
30、何谓说服力:就是走出来话说出来钱收回来 。
31、人的命,三分天注定,七分靠打拼 。
【美团放弃go语言 美团放弃go语言是什么】 32、志不真则心不热,心不热则功不贤(清颜元)
33、我努力,我坚持 , 我一定能成功 。
34、甩掉包袱的最好办法 。
生活不容易的个性签名
1、心念一转,万念皆转;心路一通,万路皆通 。
2、人生有世,事业为重 。一息尚存,绝不松劲 。东风得势,时代更新,趁此机 , 奋勇前进 。
3、过去是经历,现在是尝试 , 未来是期待,用经历尝试就会达到你的期待 。
4、因为有理想,所以不会被眼前的路石所绊倒,会抓住自己的理想,找到自己的路 。
5、态度会决定我们将来的机遇,这是行之四海而皆准的定律 。
6、鼓励自己最好的手段,是欣赏自己;欺骗自己最好的手段,也是欣赏自己 。
7、我们总是抓着走远的爱情不放,还念着走开的人 , 伤害靠近的人 。
8、理想是力量的泉源、智慧的摇篮、冲锋的战旗、斩棘的利剑 。
9、事做太死,话说太满 , 到时候煽的是自己的脸!
10、命运掌握在自己手中 。要么你驾驭生命,要么生命驾驭你 , 你的心态决定你是坐骑还是骑手 。
11、我的世界时一片遍布向葵的原野,哪里满眼阳光,绽放希望 。
12、勇气是控制恐惧心理,而不是心里毫无恐惧 。
13、成熟是给陌生人看的 , 幼稚的一面才是给最爱的人看的 。
14、当你劝告别人时,若不顾及别人的自尊心 , 那么再好的言语都没有用的 。
15、一杯清水因滴入一滴污水而变污浊,一杯污水却不会因为一滴清水的存在而变清澈 。
16、承诺常常很像蝴蝶 , 美丽的飞盘旋然后不见 。
17、这个世界不是因为你能做什么,而是你该做什么 。
18、欲望得不到满足痛苦;欲望一旦满足就无聊 , 生命就是在痛苦和无聊之间摇摆 。
19、或许多年以后,我或许可能会笑着参加你的婚礼 。
20、无痛不快,无苦何甜,活着,本就是一种修行 。
21、没进入一个新的环境 , 都应该以全新的形象出现 。
22、不愿冒风险的人,通常只能选择别人剩下来的东西 。
23、生命的路是进步的,总是沿着无限的精神三角形的斜面向上走 , 什么都阻止他不得 。
24、时间乃是万物中最宝贵的东西,但如果浪费了,那就是最大的浪费 。
25、请别辜负我对你的深爱,也请努力奋斗给我一个未来 。
26、伤心究竟能凭什么为证 , 是践踏自尊,或梦游到清晨 。
27、曾经的我把你当未来 , 现在的你把我当过去 。
28、我要好好的活着,才对得起那些看我不顺眼的人 。
29、记?。梢钥蓿?可以恨,但是不可以不坚强 , 因为后面还有一群人在等着看你的笑话 。
30、少一点预设的期待,那份对人的关怀会更自在 。
31、亲爱的朋友,所有的理论都是灰色的 , 而宝贵的生命之树常青 。
32、所谓最难忘的,就是从来不曾想起,却永远也不会忘记 。
33、痛苦的时候 , 正是我们成长的时候;这是一条必经之路,躲不掉 。
34、多一点快乐,少一点烦恼 。累了就睡觉 , 醒了就微笑 。
35、做人没必要去恨一个人,没必要也不值得!要懂得体谅、谅解 。
36、一世欢颜,只为你一人绽放 。辗转红尘,愿与你同唱一曲地久天长 。
37、我们心中的恐惧 , 永远比真正的危险巨大的多 。
38、你之所以会把痛苦看得那么重,是因为你经历得不够多 。
39、深谙世故却不世故,才是最善良的成熟 。
40、如果你不努力争取你想要的 , 那你永远都不会拥有它 。
41、人生舞台的大幕随时都可能拉开,关键是你愿意表演,还是选择躲避 。
42、大部分人往往对已经失去的机遇捶胸顿足 , 却对眼前的机遇熟视无睹 。
43、既然认准了一条路何必问他要走多久,大胆往前走 。
44、世界是大舞台 , 公司是小舞台,家庭是后台,生活是连续剧,我们就是主角 。
45、人最难面对的就是离别 。当你能平静地对待离别时,那么他在你心里就不会走了 。
46、你家洗厕剂和妇炎洁其实可以换着用,实用效果一样的嘛 。
47、正义是社会制度的首要价值 , 正像真理是思想的首要价值一样 。
48、女孩子讲究一个气质与教养,而不是妖精一样的妆容与算不完的心计 。
49、去见你最想见的人,趁阳光正好 , 趁微风不噪,趁他还在,趁你未老 。
50、一生中你唯一需要回头的时候,是为了看自己到底走了多远 。
51、拥有过未来,追寻过回忆,最后 , 依旧徘徊于现在 。
52、两个人在一起,没有合不合适,只有懂不懂的珍惜 。
53、姑娘你能不能在任何人面前都不要懦弱,及时狼狈不堪依旧高傲甩头就走 。
54、每个人都是一个国王 , 在自己的世界里纵横跋扈,你不要听我的,但你也不要让我听你的 。
55、竹本无心,无心则无伤,无伤,则不倒 。
56、谦虚 。仿效耶稣和苏格拉底 , 越伟大越谦虚 。
57、成熟不是心在变老,是泪在打转还能微笑 。
58、女人是从来不讲道理的,她们的道理 , 就是自己的感觉 。
59、多年后的你,一定会感谢现在拼命的自己 。
60、如果惧怕前面跌宕的山岩 , 生命就永远只能是死水一潭 。
61、当你得到一条一闪而现的奇思妙想时,请立即把它记下来!
62、我一直以为人是慢慢变老的,其实不是,人是一瞬间变老的 。
63、从此再不提起过去痛苦或幸福生不带来 , 死不带去 。
64、每一点滴的进展都是缓慢而艰巨的,一个人一次只能着手解决一项有限的目标 。
65、梦想是一场华美的旅途,每个人在找到它之前,都只是孤独的少年 。
66、不在打击面前退缩,不在困难面前屈服,不在挫折面前低头,不在失败面前却步 。勇敢前进!
67、只要结局跟你在一起 , 过程我怎么痛都行 。
68、我不求你能爱我,只求在这繁华的年纪,能够遇见你 。
69、距离,不过是一段空间 。心有多近,距离就有多近 。
70、只要能培一朵花 , 就不妨做做会朽的腐草 。
71、不要因为一次挫败 , 就忘记你远大的理想 。
72、害怕了就告诉自己,太阳还在天空,只不过停留在另一个方向 。
73、适合你的就是最好的,所以不必羡慕别人的行头 。
74、人生应该如蜡烛一样,从顶燃到底,一直都是光明的 。
75、所谓嫉妒,其实就是用别人的成功来折磨自己 。
76、我的爱情、容不得有一点瑕疵、我的爱情、要完整 。
77、成熟的标志不是会说大道理,而是你开始去理解,身边的小事情 。
78、我怎么知道这时候的停止 , 是悬崖勒马 , 而不是半途而废 。
79、心上的纠葛 , 解的开 , 是结,解不开,是劫 。
80、当我们眺望远方的时候,近处的风景便看不清了 。
81、一般情侣散伙的原因都是 , 一个不爱解释,一个爱想太多 。
82、人生有顺境也有逆境,输什么也不能输了心情;人生有进有退,输什么也不要输掉自己 。
83、社会犹如一条船,每个人都要有掌舵的准备 。
84、葬花的你,举手投足间的粗俗,不亚于如花 。
85、在陌生人那里受到的委屈,却在爱人的身上发泄出来 。这是不对的,要改 。
86、吹捧自己是自欺欺人的痛快,中伤别人是有损自己的卑劣 。
遇见你不容易的说说 好不容易才遇见你的说说
1.谢谢你的坚持 , 才能让我们遇见你,知道你的不容易,接下来的路我们陪你走下去 。
2.我知道遇见你不容易,失去了,很可惜,我希望余生都是你,爱你不是说说而已 。
3.世界那么大,遇见你不容易,既然现在遇见你了,我又怎会轻易放弃 。
4.我知道遇见你不容易,错过了会很可惜,我不希望余生都是回忆,想余生每天都是你 。
5.遇见你不容易 , 可错过了也不可惜,持这种态度去恋爱的人,只要正常发挥就可以搞砸一段恋爱关系,无论男女 。
6.真正的爱从来不是一时好感,而是遇见你知道很不容易,错过了会很可惜 。
7.在人潮拥挤的城市遇见你真的不容易,也是真的不想推开了,我谁都不要了,让你难过的事,我也不做了,请一直陪着我吧,真的很想跟你有一个很长的未来 。
8.在去年那么平常的日子里我遇到了你,还好因为你我在过去的一年里那么开心,那么快乐,让我的生活不在那么平淡无常,遇见你真不容易 。
9.只是简单的想对你好,只是简单的觉得遇见你是对的,遇见不容易错过很可惜,所以你在怕什么 。
10.世间千万人,遇见你挺不容易的 。没在一起也挺遗憾的,祝你们幸福是假的 。然而,祝你幸福却是真的 。
11.我努力吹响号角,只想你快点来到我身边 。擅长伪装的演员 , 也会付出真心 。或许是爱 , 让你们放下防备 , 知道遇见你不容易,错过会很可惜 。
12.因为只到遇见你不容易,所以不想错过,我会变得越来越好,我们都会好好的,希望身边的家人朋友我爱的人爱我的人,都能一生健康一生平安一生幸福 。
13.我怕别人和你说晚安,更怕你和别人说晚安 。我怕你会在我看不见的地方陪着别人,也怕有别人陪着你 。遇见你不容易,失去了会很可惜,我最喜欢的人都不在身边 。
14.真正发自内心的喜欢不是一时好感,而是明明知道没有结果还要坚持下去的冲动,我知道遇见你不容易,错过会很可惜,反正最好的余生只有你,最坏的不过是余生都是回忆 。
15.我知道遇见你不容易,错过了会很可惜,反正最好不过余生是你,最坏不过余生都是回忆 。你的过去我来不及参与,你的未来我奉陪到底 。让我们彼此珍惜,桃子同学我愿化做斗战胜佛,拥有大闹天宫的本领 , 来守护你的后半生 。
16.亲爱的 , 和你在一起的日子不算长 , 但很快乐很开心 。亲爱的 , 遇见你,是我这辈子最幸运的事 。从今往后,我会倾注我的所有,呵护你,珍惜你 。我知道遇见你不容易,错过了会很可惜,不希望余生都是回忆,我想余生每天都是你!
17.总想着伸手帮你遮风挡雨,总想着和你做一些我们还没有做的事情,总想着一直黏着你,宠着你,守护着你 。可是想到不能总是一直在你身边,就会觉得心痛,那种痛却又无处诉说,只好心里望着你 , 想你过的开心幸福 。遇见你已经很不容易,如果可以拥有你,我愿意花光所有的运气 。
18.对于一个人的好感最多可以保持在四个月,一旦超过了那可能就是爱了吧,真正的爱情并不是一时好感,而是我知道遇见你不容易错过了会很可惜,不要动不动就倾其所有,与其悲哀到尘埃里,不如留一些骄傲给自己,最卑贱不过感情,最凉的也不过人心
19.你可以不在乎我的感受,也可以不在乎我的热情,但是我真的很爱你,也很珍惜你,或许我不懂什么是爱,我只知道我老是会想你,你回我消息我就开心,你不理我我就失落 , 但如果有一天我不再打扰你了,可能是我累了没勇气了,没有谁会愿意发消息打扰别人,我觉得爱情不是一时的好感,而是我知道遇见你不容易错过了会很可惜 。
20.你知道么,从前我有多欢喜遇见你 , 现在,就有多伤悲,遇见你不容易,但也没想到会不了了之啊,其实,说白了我们也就只是朋友 , 只不过是朋友以上而已,却也仅仅如此,,昨天,我和我的朋友去唱歌,然后他们点了一首小幸运,我就在那块听 , 听着听着,我哭了,我也不知道为什么,罢了,就当我最后一次为你哭吧,我幻想过开学我们是什么样子 , 但也没想到你会这么干脆,既然如此,那就做回陌生人吧 。
21.在一个偶然的夜晚我遇见了一个男孩并喜欢上了他 , 不过是他先说先说喜欢我的,后来因为跟他聊了一个通宵,才慢慢喜欢上他的 。我知道遇见你不容易,离开了会很可惜,可是最后他还是离开了,他走的时候我也挽留过他 , 我还喜欢他希望他能够回到我的身边,他说他要走了,不会回来啦~他知道我还喜欢他,他走了,还带走了我的心 。
22.你说过要陪我,走遍世界角落,可后来生活让,我们没再提过,有好多说过的结果,最后都变成错过,偶然只身一人,试探那些落寞,才懂得没有你,根本无法扛过,无论激情或平淡生活,都只想是你和我,我知道遇见你很不容易,错过了会很可惜,我不希望那余生都是回忆,我想余生陪伴都是你,我不想多年后与你相遇,恨自己当初放弃,我只希望这辈子好好宠你,我想依偎你寸步不离,我爱你,偶然只身一人,试探那些落寞,才懂得没有你 , 根本无法扛过 。
23.每天都是笑着醒来的 , 总是期待阳光 , 期待白天 , 因为可以看到你的模样,却也期待夜晚,期待陪伴你的每一分每一秒 。遇见你不容易,所以我格外珍惜 。
go语言适合做什么go语言适用的领域有:
Go语言主要用作服务器端开发,其定位是用来开发“大型软件”的,适合于很多程序员一起开发大型软件,并且开发周期长,支持云计算的网络服务 。
Go语言作为服务器编程语言,很适合处理日志、数据打包、虚拟机处理、文件系统、分布式系统、数据库代理等;网络编程方面,Go语言广泛应用于Web应用、API应用、下载应用等;除此之外,Go语言还可用于内存数据库和云平台领域,目前国外很多云平台都是采用Go开发 。
Go语言能够让程序员快速开发,并且在软件不断的增长过程中 , 它能让程序员更容易地进行维护和修改 。它融合了传统编译型语言的高效性和脚本语言的易用性和富于表达性 。
Go语言作为一门大型项目开发语言 , 在很多大公司相继使用,甚至完全转向Go开发,其中代表有Google、Facebook、腾讯、百度、阿里巴巴、京东、小米以及360、美团、滴滴以及新浪等,因此,Go语言的开发前景还是很不错的!
像美团外卖这样的APP用一种开发语言 , 能开发得出来吗? 像美团外卖这样的APP用一种开发语言,能开发得出来吗?答案是不能 。
美团发展到现在可以说已经是一个【巨无霸】了 , 里面集成了很多很多功能,除了核心的外卖,还有 旅游 、 娱乐 、购物、出行,金融等等业务线,那么这么多复杂的业务根本不可能用同一种开发语言实现 。
那么美团都用到哪些开发语言和技术了呢?下面就根据我的理解详细说一下 。
前端是把产品的核心服务交给用户的呈现者,它的表述方式、展示形式以及交互逻辑都跟用户息息相关,都影响着用户使用产品的体验,也就是说直接影响产品的用户留存 。
前端开发主要分为三大类型:Andriod、IOS和PC(H5) ,Android开发语言是Kotlin和Java,IOS开发语言是Object-c和Swift,PC(H5)开发语言就比较杂了,有JS、CSS、HTML,还有很多第三方的前端框架,比如Angular.js、vue.js、Bootstrap、JQuery等等 。
关于后端的功能 , 这一点可以说是众说纷纭,主要需要考虑的是如何实现功能、数据的交互流程和存取、平台的稳定性与性能等 。
那么后端都用到哪些开发语言和技术呢?
根据后端技术选型的标准,后端可选的开发语言和技术是非常多的 。
比如Java体系的话,可以选用SpringMVC、Spring cloud、Hibernate,Mybatis、Mysql、Redis、Memcache、zookeeper、Kafka......;
比如Python体系的话,可以选用Django、Flask、Tarnado、Web2py等,中间件都是通用的,Redis,MQ、MySQL、Kafka等都可以用在python体系中;
当然还有PHP、C、Perl等开发语言 。
综上所述,美团这个巨无霸公司,随着业务线的扩展用到的技术肯定会越来越多,而且越来越复杂,技术快速变革的时代 , 适者生存的竞争性也会越来越激烈 。
俗话说:罗马不是一日建成的 , 任何事都不可能一蹴而就,包含技术 。在以后的发展中美团也会逐步更新自己的技术和开发语言的 。
至少三种语言 。后端一种语言(比如Java丶Go丶Python丶PHP等),后端语言及生态比较成熟 。下面重点聊前端App开发 。
前台两种语言(Android和iOS是不同的开发环境 。比如Android用Java或者Kotlin,iOS采用Object C或Swift),称之为Native开发 。
当然创业公司可以用一种前端语言写App前端,这样就不需要Android和苹果分两种语言写 , 写一次代码可以编译成Android和iOS的App,现在通行的方案有Vue之类的DOM渲染模式 , 以及ReactNative方案(RN) 。性能上RN优于DOM渲染但低于用Native开发的App 。所以美团这种公司,一定是Native方式写App,但RN是初创项目不错的选择 。
与RN竞争的还有一种新贵flutter,是google推出来的,但设计原理与RN不同 , 性能方面优于RN,只是目前生态不够健全,国内有闲鱼app是采用此技术 。未来可能会占一席之地 。
最后,其实App开发已经是强努之末,我觉得主流应该是朝PWA和小程序方向发展 。
你好,开发譬如美团这种APP,用一种语言是实现不了的,一个APP有安卓和苹果两个操作系统 , 开发能在安卓iOS端应用的APP主流的开发语言和技术是很多的,如后台有JAVA、C、PHP、Python等多种开发语言,前端有kotlin、HTML、css、jquery、ajax、bootstrap、angular.js、react、vue.js、node.js、swift、object-c等多种语言和框架 。
一个APP的开发是需要前端技术和后台技术共同配合完成 , 这样的APP不论是功能还是性能都给用户很好的体验,单一开发语言毕竟技术支持有限,所以即使能开发出来 , APP的用户体验也是不理想的 。
一般APP有这几种开发组合模式:1、原生安卓iOS开发,前端:JAVA、kotlin、swift、object-c后台:JAVA、PHP、C等后台技术,这种模式开发周期长,成本高,性能好;2、混合APP开发即hybrid app , 前端以网页技术为主,穿插原生开发功能,兼具原生APP和web app的优点,如淘宝、微信等应用都是走的这个技术;3、web app,前端纯网页技术,后台为主流开发语言,这种模式开发速度快 , 成本低,界面体验可能弱一些 。
可见开发一款APP大多数都是多种语言配合完成,谢谢阅读 。
看完之前的评论,依然好奇为什么一个语言不能完全胜任 。
前端跨平台的方案有react native , cordova,flutter等,如果需要兼容开发小程序 , h5页面,可以采用taro来开发,一套代码,所有平台通吃 。
后端的方案有服务端运行时nodejs,大数据背景下运用而生的数据库mobgodb,缓存解决方案redis , 搜索工具elasticsearch,负载均衡ngix,基本上是需要什么就有什么
所以总结下来,一句话,一种语言可以实现类似美团这样的app和小程序 。为什么美团使用的语言那么多,一大原因估计是美团app开发的早,当时前端技术不成熟,工具没现在这么多 。
使用混合开发与C进行跨平台开发,有好有坏 。
C进行跨平台开发
编写一次,随处运行 。早在 2013 年,Dropbox 就采用上述策略进行移动开发,这背后的想法很简单:用 C编写一次代码,而不是用 Java 和 Objective-C 编写两次 。那时,整个移动工程团队相对还比较小 , 但需要支持快速增长的移动路线图 。因此,公司希望找到一种方法,使这个小团队可以快速交付大量 Android 和 iOS 代码 。
如今,Dropbox 完全放弃了这个策略,转而使用各个平台的原生语言(主要是 Swift 和 Kotlin ,这两种语言在刚开始制定移动策略时还不存在) 。
Hybrid App混合开发
Hybrid App主要以JS Native两者相互调用为主 , 从开发层面实现“一次开发,多处运行”的机制,成为真正适合跨平台的开发 。Hybrid App兼具了Native App良好用户体验的优势,也兼具了Web App使用HTML5跨平台开发低成本的优势 。
目前已经有众多Hybrid App开发成功应用,比如美团、爱奇艺、支付宝等知名移动应用,都是采用Hybrid App开发模式 。
移动应用开发的方式,目前主要有三种:
几种模似都可以开发出应用,小应用无所谓,但是大流量应用 , 对图形要求高的如 游戏 等原生开发的效果还是最好
支付宝打开很慢,就是因为采用混合开发,使用人多了不如原生开发
不行的哦 。任何你看到的应用和网页,都需要多个语言开发的,大的分比如前端和后端,用的语言都是不一样的
我为什么放弃Go语言有好几次,当我想起来的时候,总是会问自己:我为什么要放弃Go语言?这个决定是正确的吗?是明智和理性的吗?其实我一直在认真思考这个问题 。
开门见山地说,我当初放弃Go语言(golang),就是因为两个“不爽”:第一 , 对Go语言本身不爽;第二,对Go语言社区里的某些人不爽 。毫无疑问,这是非常主观的结论 。转载
1.1 不允许左花括号另起一行
1.2 编译器莫名其妙地给行尾加上分号
1.3 极度强调编译速度,不惜放弃本应提供的功能
1.4 错误处理机制太原始
1.5 垃圾回收器(GC)不完善、有重大缺陷
1.6 禁止未使用变量和多余import
1.7 创建对象的方式太多令人纠结
1.8 对象没有构造函数和析构函数
1.9 defer语句的语义设定不甚合理
1.10 许多语言内置设施不支持用户定义的类型
1.11 没有泛型支持 , 常见数据类型接口丑陋
1.12 实现接口不需要明确声明
1.13 省掉小括号却省不掉花括号
1.14 编译生成的可执行文件尺寸非常大
1.15 不支持动态加载类库
美团放弃go语言的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于美团放弃go语言是什么、美团放弃go语言的信息别忘了在本站进行查找喔 。

    推荐阅读