go_golang - CSDN
go 订阅
Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。 展开全文
Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。
信息
发布于
2009年
最新版本
1.14
发布组织
Google
中文名
Golang
属    性
编程语言
外文名
Golang
go简介
Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。罗伯特·格瑞史莫(Robert Griesemer),罗勃·派克(Rob Pike)及肯·汤普逊(Ken Thompson)于2007年9月开始设计Go,稍后Ian Lance Taylor、Russ Cox加入项目。Go是基于Inferno操作系统所开发的。Go于2009年11月正式宣布推出,成为开放源代码项目,并在Linux及Mac OS X平台上进行了实现,后来追加了Windows系统下的实现。在2016年,Go被软件评价公司TIOBE 选为“TIOBE 2016 年最佳语言”。 目前,Go每半年发布一个二级版本(即从a.x升级到a.y)。 [1] 
收起全文
精华内容
参与话题
  • 微服务

    2019-12-03 15:48:09
    本节为golang微服务,主要讲解go在微服务中的一些应用,包括web、NATS等。
  • Go语言编程入门

    万人学习 2018-10-22 21:38:04
    主要介绍Go语言相关的介绍和基础语法,学会开发环境的搭建和使用Go语言简单的编程。本视频教程适合Go语言初学者。
  • 我为什么放弃Go语言

    万次阅读 多人点赞 2020-02-19 18:55:03
    我为什么放弃Go语言?有好几次,当我想起来的时候,总是会问自己:这个决定是正确的吗?是明智和理性的吗?其实我一直在认真思考这个问题。开门见山地说,我当初放弃Go语言,就是因为两个“不爽”:第一,对Go语言...

    我为什么放弃Go语言

    作者:庄晓立(Liigo)

    日期:2014年3月

    原创链接:http://blog.csdn.net/liigo/article/details/23699459

    转载请注明出处:http://blog.csdn.net/liigo

     

    有好几次,当我想起来的时候,总是会问自己:我为什么要放弃Go语言?这个决定是正确的吗?是明智和理性的吗?其实我一直在认真思考这个问题。

    开门见山地说,我当初放弃Go语言(golang),就是因为两个“不爽”:第一,对Go语言本身不爽;第二,对Go语言社区里的某些人不爽。毫无疑问,这是非常主观的结论。但是我有足够详实的客观的论据,用以支撑这个看似主观的结论。

    文末附有本文更新日志。

     

    第0节:我的Go语言经历

    先说说我的经历吧,以避免被无缘无故地当作Go语言的低级黑。

    2009年底,Go语言(golang)第一个公开版本发布,笼罩着“Google公司制造”的光环,吸引了许多慕名而来的尝鲜者,我(Liigo)也身居其中,笼统的看了一些Go语言的资料,学习了基础的教程,因对其语法中的分号和花括号不满,很快就遗忘掉了,没拿它当一回事。

    两年之后,2011年底,Go语言发布1.0的计划被提上日程,相关的报道又多起来,我再次关注它,[重新评估][1]之后决定深入参与Go语言。我订阅了其users、nuts、dev、commits等官方邮件组,坚持每天阅读其中的电子邮件,以及开发者提交的每一次源代码更新,给Go提交了许多改进意见,甚至包括[修改Go语言编译器源代码][2]直接参与开发任务。如此持续了数月时间。

    到2012年初,Go 1.0发布,语言和标准库都已经基本定型,不可能再有大幅改进,我对Go语言未能在1.0定型之前更上一个台阶、实现自我突破,甚至带着诸多明显缺陷走向1.0,感到非常失望,因而逐渐疏远了它(所以Go 1.0之后的事情我很少关心)。后来看到即将发布的Go 1.1的Release Note,发现语言层面没有太大改变,只是在库和工具层面有所修补和改进,感到它尚在幼年就失去成长的动力,越发失望。外加Go语言社区里的某些人,其中也包括Google公司负责开发Go语言的某些人,其态度、言行,让我极度厌恶,促使我决绝地离弃Go语言。

    在上一个10年,我(Liigo)在我所属的公司里,深度参与了两个编程语言项目的开发。我想,对于如何判断某个编程语言的优劣,或者说至少对于如何判断某个编程语言是否适合于我自己,我应该还是有一点发言权的。

    [1]: https://plus.google.com/+LiigoZhuang/posts/CpRNPeDXUDW

    [2]: http://blog.csdn.net/liigo/article/details/7467309

    第1节:我为什么对Go语言不爽?

    Go语言有很多让我不爽之处,这里列出我现在还能记起的其中一部分,排名基本上不分先后。读者们耐心地看完之后,还能淡定地说一句“我不在乎”吗?

    1.1 不允许左花括号另起一行

    关于对花括号的摆放,在C语言、C++、Java、C#等社区中,十余年来存在持续争议,从未形成一致意见。在我看来,这本来就是主观倾向很重的抉择,不违反原则不涉及是非的情况下,不应该搞一刀切,让程序员或团队自己选择就足够了。编程语言本身强行限制,把自己的喜好强加给别人,得不偿失。无论倾向于其中任意一种,必然得罪与其对立的一群人。虽然我现在已经习惯了把左花括号放在行尾,但一想到被禁止其他选择,就感到十分不爽。Go语言这这个问题上,没有做到“团结一切可以团结的力量”不说,还有意给自己树敌,太失败了。

    1.2 编译器莫名其妙地给行尾加上分号

    对Go语言本身而言,行尾的分号是可以省略的。但是在其编译器(gc)的实现中,为了方便编译器开发者,却在词法分析阶段强行添加了行尾的分号,反过来又影响到语言规范,对“怎样添加分号”做出特殊规定。这种变态做法前无古人。在左花括号被意外放到下一行行首的情况下,它自动在上一行行尾添加的分号,会导致莫名其妙的编译错误(Go 1.0之前),连它自己都解释不明白。如果实在处理不好分号,干脆不要省略分号得了;或者,Scala和JavaScript的编译器是开源的,跟它们学学怎么处理省略行尾分号可以吗?

    1.3 极度强调编译速度,不惜放弃本应提供的功能

    程序员是人不是神,编码过程中免不了因为大意或疏忽犯一些错。其中有一些,是大家集体性的很容易就中招的错误(Go语言里的例子我暂时想不起来,C++里的例子有“基类析构函数不是虚函数”)。这时候编译器应该站出来,多做一些检查、约束、核对性工作,尽量阻止常规错误的发生,尽量不让有潜在错误的代码编译通过,必要时给出一些警告或提示,让程序员留意。编译器不就是机器么,不就是应该多做脏活累活杂活、减少人的心智负担么?编译器多做一项检查,可能会避免数十万程序员今后多年内无数次犯同样的错误,节省的时间不计其数,这是功德无量的好事。但是Go编译器的作者们可不这么想,他们不愿意自己多花几个小时给编译器增加新功能,觉得那是亏本,反而减慢了编译速度。他们以影响编译速度为由,拒绝了很多对编译器改进的要求。典型的因噎废食。强调编译速度固然值得赞赏,但如果因此放弃应有的功能,我不赞成。

    1.4 错误处理机制太原始

    在Go语言中处理错误的基本模式是:函数通常返回多个值,其中最后一个值是error类型,用于表示错误类型极其描述;调用者每次调用完一个函数,都需要检查这个error并进行相应的错误处理:if err != nil { /*这种代码写多了不想吐么*/ }。此模式跟C语言那种很原始的错误处理相比如出一辙,并无实质性改进。实际应用中很容易形成多层嵌套的if else语句,可以想一想这个编码场景:先判断文件是否存在,如果存在则打开文件,如果打开成功则读取文件,如果读取成功再写入一段数据,最后关闭文件,别忘了还要处理每一步骤中出现错误的情况,这代码写出来得有多变态、多丑陋?实践中普遍的做法是,判断操作出错后提前return,以避免多层花括号嵌套,但这么做的后果是,许多错误处理代码被放在前面突出的位置,常规的处理逻辑反而被掩埋到后面去了,代码可读性极差。而且,error对象的标准接口只能返回一个错误文本,有时候调用者为了区分不同的错误类型,甚至需要解析该文本。除此之外,你只能手工强制转换error类型到特定子类型(静态类型的优势没了)。至于panic - recover机制,致命的缺陷是不能跨越库的边界使用,注定是一个半成品,最多只能在自己的pkg里面玩一玩。Java的异常处理虽然也有自身的问题(比如Checked Exceptions),但总体上还是比Go的错误处理高明很多。

    1.5 垃圾回收器(GC)不完善、有重大缺陷

    在Go 1.0前夕,其垃圾回收器在32位环境下有内存泄漏,一直拖着不肯改进,这且不说。Go语言垃圾回收器真正致命的缺陷是,会导致整个进程不可预知的间歇性停顿(Stop the World)。像某些大型后台服务程序,如游戏服务器、APP容器等,由于占用内存巨大,其内存对象数量极多,GC完成一次回收周期,可能需要数秒甚至更长时间,这段时间内,整个服务进程是阻塞的、停顿的,在外界看来就是服务中断、无响应,再牛逼的并发机制到了这里统统失效。垃圾回收器定期启动,每次启动就导致短暂的服务中断,这样下去,还有人敢用吗?这可是后台服务器进程,是Go语言的重点应用领域。以上现象可不是我假设出来的,而是事实存在的现实问题,受其严重困扰的也不是一家两家了(2013年底ECUG Con 2013京东的刘奇提到了Go语言的GC、defer、标准库实现是性能杀手,最大的痛苦是GC;美团的沈锋也提到Go语言的GC导致后台服务间隔性停顿是最大的问题。更早的网络游戏仙侠道开发团队也曾受Go垃圾回收的沉重打击)。在实践中,你必须努力减少进程中的对象数量,以便把GC导致的间歇性停顿控制在可接受范围内。除此之外你别无选择(难道你还想自己更换GC算法、甚至砍掉GC?那还是Go语言吗?)。跳出圈外,我近期一直在思考,一定需要垃圾回收器吗?没有垃圾回收器就一定是历史的倒退吗?(可能会新写一篇博客文章专题探讨。)

    2016年3月3日Liigo补记:直到2015年底,Go 1.5新GC发布后数月,仍获知有大陆圈内知名团队因为GC的原因考虑换掉Go语言,颇有感触。当软件系统逐步发展到更庞大更复杂的时候,Go语言的垃圾回收器(GC)就变成了指不定啥时候会出现的拦路虎,让人进退两难。进,暂时没有确切有效的技术手段对付响应延迟和内存暴涨;退,多年开发付出的心血付之东流损失惨重。语言选型之前多做调查分析,如果一定要用Go语言开发,控制系统规模和复杂度,避开底层的核心业务,可能是比较明智的选择。

    1.6 禁止未使用变量和多余import

    Go编译器不允许存在被未被使用的变量和多余的import,如果存在,必然导致编译错误。但是现实情况是,在代码编写、重构、调试过程中,例如,临时性的注释掉一行代码,很容易就会导致同时出现未使用的变量和多余的import,直接编译错误了,你必须相应的把变量定义注释掉,再翻页回到文件首部把多余的import也注释掉,……等事情办完了,想把刚才注释的代码找回来,又要好几个麻烦的步骤。还有一个让人蛋疼的问题,编写数据库相关的代码时,如果你import某数据库驱动的pkg,它编译给你报错,说不需要import这个未被使用的pkg;但如果你听信编译器的话删掉该import,编译是通过了,运行时必然报错,说找不到数据库驱动;你看看程序员被折腾的两边不是人,最后不得不请出大神:`import _`。对待这种问题,一个比较好的解决方案是,视其为编译警告而非编译错误。但是Go语言开发者很固执,不容许这种折中方案。

    1.7 创建对象的方式太多令人纠结

    创建对象的方式,调用new函数、调用make函数、调用New方法、使用花括号语法直接初始化结构体,你选哪一种?不好选择,因为没有一个固定的模式。从实践中看,如果要创建一个语言内置类型(如channel、map)的对象,通常用make函数创建;如果要创建标准库或第三方库定义的类型的对象,首先要去文档里找一下有没有New方法,如果有就最好调用New方法创建对象,如果没有New方法,则退而求其次,用初始化结构体的方式创建其对象。这个过程颇为周折,不像C++、Java、C#那样直接new就行了。

    1.8 对象没有构造函数和析构函数

    没有构造函数还好说,毕竟还有自定义的New方法,大致也算是构造函数了。没有析构函数就比较难受了,没法实现RAII。额外的人工处理资源清理工作,无疑加重了程序员的心智负担。没人性啊,还嫌我们程序员加班还少吗?C++里有析构函数,Java里虽然没有析构函数但是有人家finally语句啊,Go呢,什么都没有。没错,你有个defer,可是那个defer问题更大,详见下文吧。

    1.9 defer语句的语义设定不甚合理

    Go语言设计defer语句的出发点是好的,把释放资源的“代码”放在靠近创建资源的地方,但把释放资源的“动作”推迟(defer)到函数返回前执行。遗憾的是其执行时机的设置似乎有些不甚合理。设想有一个需要长期运行的函数,其中有无限循环语句,在循环体内不断的创建资源(或分配内存),并用defer语句确保释放。由于函数一直运行没有返回,所有defer语句都得不到执行,循环过程中创建的大量短暂性资源一直积累着,得不到回收。而且,系统为了存储defer列表还要额外占用资源,也是持续增加的。这样下去,过不了多久,整个系统就要因为资源耗尽而崩溃。像这类长期运行的函数,http.ListenAndServe()就是典型的例子。在Go语言重点应用领域,可以说几乎每一个后台服务程序都必然有这么一类函数,往往还都是程序的核心部分。如果程序员不小心在这些函数中使用了defer语句,可以说后患无穷。如果语言设计者把defer的语义设定为在所属代码块结束时(而非函数返回时)执行,是不是更好一点呢?可是Go 1.0早已发布定型,为了保持向后兼容性,已经不可能改变了。小心使用defer语句!一不小心就中招。

    1.10 许多语言内置设施不支持用户定义的类型

    for in、make、range、channel、map等都仅支持语言内置类型,不支持用户定义的类型(?)。用户定义的类型没法支持for in循环,用户不能编写像make、range那样“参数类型和个数”甚至“返回值类型和个数”都可变的函数,不能编写像channel、map那样类似泛型的数据类型。语言内置的那些东西,处处充斥着斧凿的痕迹。这体现了语言设计的局限性、封闭性、不完善,可扩展性差,像是新手作品——且不论其设计者和实现者如何权威。延伸阅读:Go语言是30年前的陈旧设计思想,用户定义的东西几乎都是二等公民(Tikhon Jelvis)。

    1.11 没有泛型支持,常见数据类型接口丑陋

    没有泛型的话,List、Set、Tree这些常见的基础性数据类型的接口就只能很丑陋:放进去的对象是一个具体的类型,取出来之后成了无类型的interface{}(可以视为所有类型的基础类型),还得强制类型转换之后才能继续使用,令人无语。Go语言缺少min、max这类函数,求数值绝对值的函数abs只接收/返回双精度小数类型,排序接口只能借助sort.Interface无奈的回避了被比较对象的类型,等等等等,都是没有泛型导致的结果。没有泛型,接口很难优雅起来。Go开发者没有明确拒绝泛型,只是说还没有找到很好的方法实现泛型(能不能学学已经开源的语言呀)。现实是,Go 1.0已经定型,泛型还没有,那些丑陋的接口为了保持向后兼容必须长期存在着。延伸阅读:HN网友抱怨Go没有泛型

    1.12 实现接口不需要明确声明

    这一条通常是被当作Go语言的优点来宣传的。但是也有人不赞同,比如我。如果一个类型用Go语言的方式默默的实现了某个接口,使用者和代码维护者都很难发现这一点(除非仔细核对该类型的每一个方法的函数签名,并跟所有可能的接口定义相互对照),自然也想不到与该接口有关的应用,显得十分隐晦,不直观。支持者可能会辩解说,我可以在文档中注明它实现了哪些接口。问题是,写在文档中,还不如直接写到类型定义上呢,至少还能得到编译器的静态类型检查。缺少了编译器的支持,当接口类型的函数签名被改变时,当实现该接口的类型方法被无意中改变时,实现者可能很难意识到,该类型实现该接口的隐含约束事实上已经被打破了。又有人辩解说,我可以通过单元测试确保类型正确实现了接口呀。我想说的是,明明可以通过明确声明实现接口,享受编译器提供的类型检查,你却要自己找麻烦,去写原本多余的单元测试,找虐很爽吗?Go语言的这种做法,除了减少一些对接口所在库的依赖之外,没有其他好处,得不偿失。延伸阅读:为什么我不喜欢Go语言式的接口(老赵)。

    1.13 省掉小括号却省不掉花括号

    Go语言里面的if语句,其条件表达式不需要用小括号扩起来,这被作为“代码比较简洁”的证据来宣传。可是,你省掉了小括号,却不能省掉大括号啊,一条完整的if语句至少还得三行吧,人家C、C++、Java都可以在一行之内搞定的(可以省掉花括号)。人家还有x?a:b表达式呢,也是一行搞定,你Go语言用if else写至少得五行吧?哪里简洁了?

    1.14 编译生成的可执行文件尺寸非常大

    记得当年我写了一个很简单的程序,把所有系统环境变量的名称和值输出到控制台,核心代码也就那么三五行,结果编译出来把我吓坏了:EXE文件的大小超过4MB。如果是C语言写的同样功能的程序,0.04MB都是多的。我把这个信息反馈到官方社区,结果人家不在乎。是,我知道现在的硬盘容量都数百GB、上TB了……可您这种优化程度……怎么让我相信您在其他地方也能做到不错呢。(再次强调一遍,我所有的经验和数据都来自Go 1.0发布前夕。)

    1.15 不支持动态加载类库

    静态编译的程序当然是很好的,没有额外的运行时依赖,部署时很方便。但是之前我们说了,静态编译的文件尺寸很大。如果一个软件系统由多个可执行程序构成,累加起来就很可观。如果用动态编译,发布时带同一套动态库,可以节省很多容量。更关键的是,动态库可以运行时加载和卸载,这是静态库做不到的。还有那些LGPL等协议的第三方C库受版权限制是不允许静态编译的。至于动态库的版本管理难题,可以通过给动态库内的所有符号添加版本号解决。无论如何,应该给予程序员选择权,让他们自己决定使用静态库还是动态库。一刀切的拒绝动态编译是不合适的。

    1.16 其他

    • 不支持方法和函数重载(overload)
    • 导入pkg的import语句后边部分竟然是文本(import ”fmt”)
    • 没有enum类型,全局性常量难以分类,iota把简单的事情复杂化
    • 定义对象方法时,receiver类型应该选用指针还是非指针让人纠结
    • 定义结构体和接口的语法稍繁,interface XXX{} struct YYY{} 不是更简洁吗?前面加上type关键字显得罗嗦。
    • 测试类库testing里面没有AssertEqual函数,标准库的单元测试代码中充斥着if a != b { t.Fatal(...) }
    • 语言太简单,以至于不得不放弃很多有用的特性,“保持语言简单”往往成为拒绝改进的理由。
    • 标准库的实现总体来说不甚理想,其代码质量大概处于“基本可用”的程度,真正到企业级应用领域,往往就会暴露出诸多不足之处。
    • 版本都发展到1.2了,goroutine调度器依旧默认仅使用一个系统线程。GOMAXPROCS的长期存在似乎暗示着官方从来没有足够的信心,让调度器正确安全地运行在多核环境中。这跟Go语言自身以并发为核心的定位有致命的矛盾。(直到2015年下半年1.5发布后才有改观
    • 官方发行版中包含了一个叫oracle的辅助程序,与Oracle数据库毫无关系,却完全无视两者之间的名称混淆。

    上面列出的是我目前还能想到的对Go语言的不爽之处,毕竟时间过去两年多,还有一些早就遗忘了。其中一部分固然是小不爽,可能忍一忍就过去了,但是很多不爽积累起来,总会时不时地让人难受,时间久了有自虐的感觉。程序员的工作生活本来就够枯燥的,何必呢。

    必须要说的是,对于其中大多数不爽之处,我(Liigo)都曾经试图改变过它们:在Go 1.0版本发布之前,我在其官方邮件组提过很多意见和建议(甚至包括提交代码CL),极力据理力争,可以说付出很大努力,目的就是希望定型后的Go语言是一个相对完善的、没有明显缺陷的编程语言。结果是令人失望的,我人微言轻、势单力薄,不可能影响整个语言的发展走向。1.0之前,最佳的否定自我、超越自我的机会,就这么遗憾地错过了。我最终发现,很多时候不是技术问题,而是技术人员的问题。

    第2节:我为什么对Go语言的某些人不爽?

    这里提到的“某些人”主要是两类:一、负责专职开发Go语言的Google公司员工;二、Go语言的推崇者和脑残粉丝。我跟这两类人打过很多交道,不胜其烦。再次强调一遍,我指的是“某些”人,而不是所有人,请不要对号入座。

    Google公司内部负责专职开发Go语言的核心开发组某些成员,他们倾向于闭门造车,固执己见,对第三方提出的建议不重视。他们常常挂在嘴边的口头禅是:现有的做法很好、不需要那个功能、我们开发Go语言是给Google自己用的、Google不需要那个功能、如果你一定要改请fork之后自己改、别干提意见请提交代码。很多言行都是“反开源”的。通过一些具体的例子,还能更形象的看清这一层。就留下作为课后作业吧。

    我最不能接受的就是他们对1.0版本的散漫处理。那时候Go还没到1.0,初出茅庐的小学生,有很大的改进空间,是全面翻新的最佳时机,彼时不改更待何时?1.0是打地基的版本,基础不牢靠,等1.0定型之后,处处受到向后兼容性的牵制,束手缚脚,每前进一步都阻力重重。急于发布1.0,过早定型,留下诸多遗憾,彰显了开发者的功利性强,在技术上不追求尽善尽美。

    Go语言的核心开发成员,他们日常的开发工作是使用C语言——Go语言的编译器和运行时库,包括语言核心数据结构和算法map、channel、scheduler,都是C开发的——真正用自己开发的Go语言进行实际的大型应用开发的机会并不多。虽然标准库是用Go语言自己写的,但他们却没有大范围使用标准库的经历。实际上,他们缺少使用Go语言的实战开发经验,往往不知道处于开发第一线的用户真正需要什么,无法做到设身处地为程序员着想。缺少使用Go语言的亲身经历,也意味着他们不能在日常开发中,及时发现和改进Go语言的不足。这也是他们往往自我感觉良好的原因。(2016年5月15日补记:2015年8月Go 1.5版本之后不再使用C语言开发。)

    Go语言社区里,有一大批Go语言的推崇者和脑残粉丝,他们满足于现状,不思进取,处处维护心中的“神”,容不得批评意见,不支持对语言的改进要求。当年我对Go语言的很多批评和改进意见,极少得到他们的支持,他们不但不支持还给予打击,我就纳闷了,他们难道不希望Go语言更完善、更优秀吗?我后来才意识到,他们跟乔帮主的苹果脑残粉丝们,言行一脉相承,具有极端宗教倾向,神化主子、打击异己真是不遗余力呀。简简单单的技术问题,就能被他们上升到意识形态之争。现实的例子是蛮多的,有兴趣的到网上去找吧。正是因为他们的存在,导致更多理智、清醒的Go语言用户无法真正融入整个社区。

    如果一个项目、团队、社区,到处充斥着赞美、孤芳自赏、自我满足、不思进取,排斥不同意见,拒绝接纳新方案,我想不到它还有什么前进的动力。逆水行舟,是不进反退的。

    2016年5月15日补记:@netroby:“Golang社区的神经病和固执,我深有体会。我曾经发过Issue,请求Golang官方,能为doc加上高亮,这样浏览器阅读文档的时候,能快速阅读代码参考。但是被各种拒绝. 他们的理由是很多开发者不喜欢高亮。” https://github.com/golang/go/issues/13178

    2016年5月15日补记:C++天才人物、D语言联合创始人Andrei Alexandrescu:“Go所走的路线在一些问题上持有极其强硬和死板态度,这些问题有大有小。在比较大的方面,泛型编程被严格控制,甚至贬低到只有"N"个字;有关泛型编程的讨论都是试图去劝阻任何有意义的尝试,这已经足够让人觉得耻辱。从长远来看,技术问题的政治化是一种极其有害的模式,所以希望Go社区能够找到修正它的方法。”  http://www.csdn.net/article/2015-12-20/2826517

    第3节:还有比Go语言更好的选择吗?

    我始终坚持一个颇有辩证法意味的哲学观点:在更好的替代品出现之前,现有的就是最好的。失望是没有用的,抱怨是没有用的,要么接受,要么逃离。我曾经努力尝试过接受Go语言,失败之后,注定要逃离。发现更好的替代品之后,无疑加速了逃离过程。还有比Go语言更好的替代品吗?当然有。作为一个屌丝程序员,我应该告诉你它是什么,但是我不说。现在还不是时候。我现在不想把这两门编程语言对立起来,引发另一场潜在的语言战争。这不是此文的本意。如果你非要从现有信息中推测它是什么,那完全是你自己的事。如果你原意等,它或许很快会浮出水面,也未可知。

    第4节:写在最后

    我不原意被别人代表,也不愿意代表别人。这篇文章写的是我,一个叫Liigo的80后屌丝程序员,自己的观点。你完全可以主观地认为它是主观的,也完全可以客观地以为它是客观的,无论如何,那是你的观点。

    这篇文字是从记忆里收拾出来的。有些细节虽可考,而不值得考。——我早已逃离,不愿再回到当年的场景。文中涉及的某些细节,可能会因为些许偏差,影响其准确性;也可能会因为缺少出处,影响其客观性。如果有人较真,非要去核实,我相信那些东西应该还在那里。

    Go语言也非上文所述一无是处,它当然有它的优势和特色。读者们判断一件事物,应该是优劣并陈,做综合分析,不能单听我一家负面之言。但是它的那些不爽之处,始终让我不爽,且不能从其优秀处得以完全中和,这是我不得不放弃它的原因。

     

     


     

    Liigo 2014-4-29 补记1

    Go语言社区还有一个很奇特的现象,就是中国社区独大,国外社区要小的多。有外国网友还专门写了一篇文章研究《为什么Golang中国社区独大》这个问题(文中也提到了我这篇博文)。通常来说,在IT和软件领域,向来都是国外先进国家引领技术潮流,然后国内缓慢跟进。而到了Go语言这里,恰恰反过来了,似乎暗示着在国外的主流软件开发技术人员并不怎么待见Go语言,Go只是在国内受到一帮人的盲目推崇而已,至于这帮人的眼光如何,反正我不看好。

    Liigo 2014-4-29 补记2

    著名的编程语言研究专家王垠写了一篇《对 Go 语言的综合评价》(晚于本博文发表约三五天),也是总体上持批判态度,看衰Go语言。读者们可以对照阅读。

    Liigo 2014-4-29 补记3

    Go语言的拥护者们,似乎连Go语言的“核心优势”都说不出几条。知乎上很有人气的一条问答《为什么要使用 Go 语言,Go 语言的优势在哪里》,连静态编译、GC、跨平台都拿出来说了(无视C/C++/Java),甚至连简单易学(无视Python/易语言)、“丰富的”标准库(跟谁比?敢跟Java/C#/Python比么?)、好用的工具链(gofmt)都扯出来了,可见除了“并发、网络”之外,他们也讲不出另外的什么核心优势了,只能靠一些周边的东西凑数。

    Liigo 2015-1-31 补记4

    全世界认为Go语言不好的可不只是我Liigo一个人。国外著名的问答网站Quora上面有个人气很高的提问,“为什么不要用Go语言”(英文网页),看看那排名最前的两个答案,以及广大程序员们给这两个答案的数百个“赞”,都足以说明Go语言自身的问题是客观存在的。人民群众的眼睛是雪亮的。

    Liigo 2015-4-1 补记5

    文中1.10(黑魔法)和1.12(接口)章节增加了两处“延伸阅读”链接,被引用的链接后面均有大量网友评论。此举主要是为了说明本文观点并非一家之言。

    Liigo 2015-5-29 补记6

    补充说明Go语言直到2015年下半年1.5发布后才将GOMAXPROCS设置为大于1的默认值(HN),他们文中承认之前一直默认设置为1是因为调度器不完善(与我此文最初发表时的猜测一致)。

    Liigo 2015-6-2 补记7

    补充两篇英文:Why Go Is Not Good(作者Will Yager重点批评了Go语言的设计不佳甚至是倒退),Leaving Go(作者Danny Gratzer放弃Go语言的原因主要是:没有泛型,充满黑魔法)。这两篇文章都是针对具体问题做具体分析的,与本文写作精神一致,务实不务虚。其中提到的对Go语言不满的地方,本文也多有涉及,结论类似。

    Liigo 2015-7-2 补记8

    前两天网上出现了一篇本文的驳文,《驳狗屎文 "我为什么放弃Go语言"》,作者是chai2010,请读者们参照阅读,顺便领略一下本文后半部分描述过的Go粉的"风采"。(这篇驳文至少有两个好处:1 它全文引用了本文(便于读者参照);2 使用了本文当时的最新版(包含了补记7)。)

    Liigo 2015-7-3 补记9

    文中1.5节(垃圾回收器/GC)增加 “Stop the world” 相关的三个链接。

    Liigo 2015-7-17 补记10

    文中1.11节(泛型)增加来自HN的延伸阅读链接,开发者们抱怨Go欠缺泛型支持。

    Liigo 2016-3-3 补记11

    文中1.5节(垃圾回收器/GC)末尾增加一段,再次提示开发者重视Go语言GC的潜在问题。

    Liigo 2016-5-15 补记12:

    文中第2节(我为什么对Go社区的人不爽)增加netroby和D语言联合创始人的现身说法。补充说明Go 1.5后不再使用C语言开发。

    Liigo 2020-2-19 补记13:

    本文末尾增加Golang 2.0泛型相关信息。

     

    关于对作者倾向性质疑的声明

    读者看到本文全都是Go语言负面性的内容,没有涉及一点Go语言好的地方,因而质疑作者的盲目倾向。出现这种结果完全是因为文章主题所限。此前本文末尾也简单提到过,评估一件事物,应当优劣并陈,优势项加分,劣势项减分,做综合评估分析。如果有突出的重大优势,则可以容忍一些较大的劣势;但如果有致命的劣势或多项大劣势,则再大的优势也无法与之中和。中国乒乓球界讲领军人物必须做到“技术全面,特长突出,没有明显弱点”,我甚为赞同。用这句话套用Go语言,可以说“技术不全面(人家自己说成简洁),有一点特长(并发),有明显的弱点(包括但不限于本文列出的这些)”。如此一来,优势都被劣势中和了,劣势还是那么突出,自然是得负分,自然是弃用,自然是没有好印象。我在这里可以说观点鲜明、态度明确,不和稀泥。与其看那些盲目推崇Go语言的人和文章,笼统的说“好”,不如也顺便看看本文,具体到细节地说“不好”。凡是具体到细节的东西,都是容易证实或证伪的,比笼统的东西(无论是"黑"还是"粉")可信性更高一些。

     

    关于对作者阴谋论的声明

    有某些阴谋论者(例如谢某),说我因一个Pull Request被Go开发者拒绝而“怀恨至今”,暗示此文是故意报复、抹黑Go语言。我对Golang有恨吗?当然是有的,那是一个不爽接一个不爽(如本文一一罗列的那些),逐步累积,由量变形成质变的结果,是我对Golang综合客观评估之后的主观态度,并非由哪一个单独的事件所主导。要说Pull Request被拒绝,Rust开发者拒绝我的PR次数还少吗?比如 https://github.com/mozilla/rust/pull/13014 和 https://github.com/liigo/rust/tree/xp (https://github.com/rust-lang/rust/issues/12842),要是再算上被拒的Issues,那就多的数不清了。我显然不可能因为某些个别的事件,影响到我对某个事物的综合评估(参见前文)。那本文是“故意抹黑”Go语言吗?我觉得不是,理由有二:1、这是作者的主观感受,2、这些感受是以许多客观事实为基础的。如果本文一一列出的那些现象,是不存在的,是虚构出来的,是凭空生成的,那么作者一定是“低级黑”。问题是,那些都是客观存在的事实。把事实说出来,怎么能叫“黑”呢?欢迎读者客观而详细的指正本文中的所有错误。

     

    关于Golang 2.0的泛型

    今天(2020年2月19日)看到HN的一篇关于 Go2 Generics 的讨论。有网友说到:

    Ken Thompson and Rob Pike are mostly out not at all involved with Go anymore. They are 2/3 of the original creators. It’s different people making the decisions now.

    我找到如下两个链接基本证实了Rob Pike确实已经淡出Golang的核心开发组:

    Rob Pike最近两年仅提交了4k行无关紧要的代码;Ken Thompson就更不用说了,许多年前就已经淡出;Russ Cox似乎也不太参与Go2相关的决策。如此看来,对于Go2的泛型而言,非技术方面的障碍已不存在,剩下只是技术性障碍。

    Ian Lance Taylor 上周(2020年2月13日)说到

    We're working on it. Some things take time.

     

    展开全文
  • Go适合做什么?为何这么多人偏爱Go语言

    万次阅读 多人点赞 2018-12-15 22:10:42
    Go作为Google2009年推出的语言,其被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。 对于高性能分布式系统领域而言,Go 语言无疑比...哪些大公司在使用Go语言: 1、Goog...

    Go作为Google2009年推出的语言,其被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。

    对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。

    到现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。

    Go适合做什么?为何这么多人偏爱Go语言?

     

    哪些大公司在使用Go语言:

    1、Google

    这个不用多做介绍,作为开发Go语言的公司,当仁不让。Google基于Go有很多优秀的项目,比如:https://github.com/kubernetes/kubernetes ,大家也可以在Github上 https://github.com/google/ 查看更多Google的Go开源项目。

    2、Facebook

    Facebook也在用,为此他们还专门在Github上建立了一个开源组织facebookgo,大家可以通过 https://github.com/facebookgo 访问查看facebook开源的项目,比如著名的是平滑升级的grace。

    3、腾讯

    腾讯作为国内的大公司,还是敢于尝试的,尤其是Docker容器化这一块,他们在15年已经做了docker万台规模的实践,具体可以参考http://www.infoq.com/cn/articles/tencent-millions-scale-docker-application-practice

    4、百度

    目前所知的百度的使用是在运维这边,是百度运维的一个BFE项目,负责前端流量的接入。他们的负责人在2016年有分享,大家可以看下这个http://www.infoq.com/cn/presentations/application-of-golang-in-baidu-frontend

    5、阿里

    阿里巴巴具体的项目不太清楚,不过听说其系统部门、CDN等正在招Go方面的人。

    6、京东

    京东云消息推送系统、云存储,以及京东商城等都有使用Go做开发。

    7、小米

    小米对Golang的支持,莫过于运维监控系统的开源,也就是 http://open-falcon.com/

    此外,小米互娱、小米商城、小米视频、小米生态链等团队都在使用Golang。

    8、360

    360对Golang的使用也不少,一个是开源的日志搜索系统Poseidon,托管在Github上,https://github.com/Qihoo360/poseidon

    还有很多公司我们在这里就不一一列举了,从中我们也可知道Go语言的受欢迎程度。

    Go适合做什么?为何这么多人偏爱Go语言?

     

    为什么这么多人偏爱Go语言:

    除了上述业内大牛之外,Go语言也颇受国内很多云创业公司的喜爱,例如DaoCloud。那他们为什么会选择Go呢?与其他语言的应用相比,它有什么优点呢?

    1、学习曲线

    它包含了类C语法、GC内置和工程工具。这一点非常重要,因为Go语言容易学习,所以一个普通的大学生花一个星期就能写出来可以上手的、高性能的应用。在国内大家都追求快,这也是为什么国内Go流行的原因之一。

    2、效率

    Go拥有接近C的运行效率和接近PHP的开发效率,这就很有利的支撑了上面大家追求快速的需求。

    3、出身名门、血统纯正

    之所以说Go出身名门,是因为我们知道Go语言出自Google公司,这个公司在业界的知名度和实力自然不用多说。Google公司聚集了一批牛人,在各种编程语言称雄争霸的局面下推出新的编程语言,自然有它的战略考虑。而且从Go语言的发展态势来看,Google对它这个新的宠儿还是很看重的,Go自然有一个良好的发展前途。我们看看Go语言的主要创造者,血统纯正这点就可见端倪了。

    Go适合做什么?为何这么多人偏爱Go语言?

    Go强大的开发团队

    4、自由高效:组合的思想、无侵入式的接口

    Go语言可以说是开发效率和运行效率二者的完美融合,天生的并发编程支持。Go语言支持当前所有的编程范式,包括过程式编程、面向对象编程以及函数式编程。程序员们可以各取所需、自由组合、想怎么玩就怎么玩。

    5、强大的标准库

    这包括互联网应用、系统编程和网络编程。Go里面的标准库基本上已经是非常稳定了,特别是我这里提到的三个,网络层、系统层的库非常实用。

    6、部署方便:二进制文件、Copy部署

    我相信这一点是很多人选择Go的最大理由,因为部署太方便了,所以现在也有很多人用Go开发运维程序。

    7、简单的并发

    它包含了降低心智的并发和简易的数据同步,我觉得这是Go最大的特色。之所以写正确的并发、容错和可扩展的程序如此之难,是因为我们用了错误的工具和错误的抽象,Go可以说这一块做的相当简单。

    8、稳定性

    Go拥有强大的编译检查、严格的编码规范和完整的软件生命周期工具,具有很强的稳定性,稳定压倒一切。那么为什么Go相比于其他程序会更稳定呢?这是因为Go提供了软件生命周期(开发、测试、部署、维护等等)的各个环节的工具,如go tool、gofmt、go test。

    这里引用知乎里一个同学对Go评论的话:最开始准备上线的时候其实心里挺忐忑,毕竟一旦出现故障,不仅黑锅得自己背,面子也上过不去啊。还好结果蛮漂亮,自上线后没出现过一次突发性BUG,降低运维难度的同时还减少了机器的负载。我相信这也是大多数人用了Go之后的感言。

    Go适合做什么?为何这么多人偏爱Go语言?

     

    Go适合做什么

    很多朋友可能知道Go语言的优势在哪,却不知道Go语言适合用于哪些地方。

    其实Go语言主要用作服务器端开发,其定位是用来开发“大型软件”的,适合于很多程序员一起开发大型软件,并且开发周期长,支持云计算的网络服务。Go语言能够让程序员快速开发,并且在软件不断的增长过程中,它能让程序员更容易地进行维护和修改。它融合了传统编译型语言的高效性和脚本语言的易用性和富于表达性。

    Go语言作为服务器编程语言,很适合处理日志、数据打包、虚拟机处理、文件系统、分布式系统、数据库代理等;网络编程方面,Go语言广泛应用于Web应用、API应用、下载应用等;除此之外,Go语言还可用于内存数据库和云平台领域,目前国外很多云平台都是采用Go开发。

    Go语言的就业前景:

    Go适合做什么?为何这么多人偏爱Go语言?

     

    Go适合做什么?为何这么多人偏爱Go语言?

     

    Go语言的安装:

    • 环境安装:

    安装包下载地址为:https://golang.org/dl/。

    如果打不开可以使用这个地址:https://golang.google.cn/dl/。

    各个系统对应的包名:

    Go适合做什么?为何这么多人偏爱Go语言?

     

    Go适合做什么?为何这么多人偏爱Go语言?

     

    • UNIX/Linux/Mac OS X, 和 FreeBSD 安装

    1、下载源码包:go1.4.linux-amd64.tar.gz。

    2、将下载的源码包解压至 /usr/local目录。

    Go适合做什么?为何这么多人偏爱Go语言?

     

    3、将 /usr/local/go/bin 目录添加至PATH环境变量:

    Go适合做什么?为何这么多人偏爱Go语言?

     

    注意:MAC 系统下你可以使用 .pkg 结尾的安装包直接双击来完成安装,安装目录在/usr/local/go/ 下。

    • Windows 系统下安装

    Windows 下可以使用 .msi 后缀(在下载列表中可以找到该文件,如go1.4.2.windows-amd64.msi)的安装包来安装。

    默认情况下.msi文件会安装在 c:Go 目录下。你可以将 c:Goin 目录添加到 PATH 环境变量中。添加后你需要重启命令窗口才能生效。

    安装测试

    创建工作目录 C:>Go_WorkSpace。

    文件名: test.go,代码如下:

    Go适合做什么?为何这么多人偏爱Go语言?

     

    使用 go 命令执行以上代码输出结果如下:

    Go适合做什么?为何这么多人偏爱Go语言?

     

    链文

     

    展开全文
  •  先简单介绍一下Golang吧,Go是Google开发的一种编译型,可平行化,并具有垃圾回收功能的编程语言,如果你有C语言基础,那么学习go将会比较easy,go语言一般用在服务器编程。上述这些概念哈,看完一遍没

            哈哈,名字起的像那些教科书似的,入门到精通,看似简单的几个字,实际上我对能不能精通golang还是有点压力的,学这门语言也完全是个人兴趣,好了,废话不多说,进入我们的正题。

           先简单介绍一下Golang吧,GoGoogle开发的一种编译型,可平行化,并具有垃圾回收功能的编程语言,如果你有C语言基础,那么学习go将会比较easy,go语言一般用在服务器编程。上述这些概念哈,看完一遍没什么感觉很正常,大致了解这是一门语言,而且是谷歌亲儿子,并且可以写服务器就OK了。

         我个人的习惯是学一门语言,先搭好环境,选好IDE,写个helloworld再说,下面就开始动手。  

         先从网上下一个go,一般是.exe那种执行文件或者是一个压缩包,如果是前者,直接傻瓜式地安装即可,如果是后者,解压以后即可,建议大家在安装和解压的时候都选在根目录下,我的环境配置是这样的:


    记住咱们的路径是D:\go, bin文件的路径是D:\go\bin(后面会用到)

    安装好GO以后,还要搭建环境变量,桌面右键计算机点进属性


    点击更改设置,就可以看到



    在环境变量我们要做三件事,首先是在用户变量里的path添加go的安装路径,然后在系统变量中添加:


     GOPATH字段:这个路径用来存储你以后编写的代码

    GOROOT字段:让GO语言运行起来

    添加好以后,打开CMD,输入go version,显示以下信息则说明你已经成功安装GO:



    很多语言的开始都是helloworld,这个伟大的传统不能搁我这儿断了,废话不多说,上代码了:

    package main 

    import "fmt" 
    func main() {  
    fmt.Printf("hello, world\n") 
    }

    代码很简单,只需要新建一个txt文档然后copy进入,再把后缀名改为go(别告诉我你不会改后缀名)

    然后在CMD执行即可:


    大功告成,伟大的helloworld搞定!

    展开全文
  • 课程目标:帮助学员快速掌握Go语言入门:1.常量变量 2.基本类型 3.字符串 4.函数以及数据结构 课程亮点: 一图胜千言,让文科生都能看得懂的Go教程!!! 课程特色: 1.图解Go语言:用130多张原创图表表述所有...
  • 将写好的go语言项目发布到服务器,需要进行以下几个步骤: 1.下载安装go安装包: (1)go语言下载地址:Go语言中文网 下载linux版本的安装包。 (2)使用Xftp将安装包上传至指定的路径: (3)解压并移到/...

    将写好的go语言项目发布到服务器,需要进行以下几个步骤:

    1.下载安装go安装包:

    (1)go语言下载地址:Go语言中文网

     下载linux版本的安装包。

    (2)使用Xftp将安装包上传至指定的路径:

    (3)解压并移到/usr/local/下:

    进入指定目录,查看已有文件并且解压文件:

    解压完成后发现目录下多了一个go文件夹:

    将文件夹移动到/usr/local/

    2.配置环境变量:

    (1)进入目的目录查看go文件夹是否移动成功:

    (2)在usr下创建文件夹,用来存放自己的项目:

    • mkdir workspace

    (3)进入新建的目录workspace新建三个文件夹:

    • mkdir src
    • mkdir pkg
    • mkdir bin

    说明:

    • src 目录存放的是我们的go源代码,不同工程项目的代码以包名区分
    • pkg 编译后生成的文件
    • bin文件夹存放go install命名生成的可执行文件(这个文件夹会配置到环境变量中)

    (4)配置环境变量:

    进入 /etc 修改profile文件:

    在此文件夹下加入上图的代码,代码如下:

    // 设置go安装路径
    export GOROOT=/usr/local/go
    export PATH=$PATH:$GOROOT/bin
    
    // 设置工程目录
    export GOPATH=/usr/workspace
    export PATH=$PATH:$GOPATH/bin

     (5)刷新环境变量:

    source /etc/profile

     (6)查看go环境是否配置成功:

    go version

    结果如下:

    (7)查看详细配置:

    go env
    

    结果如下:  

     3.上传项目代码:

    在刚刚创建的workspace下新创建的三个文件夹中,src 目录存放的是我们的go源代码,将我们的项目和所需要的依赖文件传上去:

     在我的依赖包(github.com)中包含很多的依赖,如下图:

    4.运行:

    (1)进入到项目所在文件夹:

    cd usr/workspace/src/liteblog/
    

     (2)运行项目:

    go run main.go

     说明项目启动成功

    去浏览器访问可得到下图:

     其他的web项目也应该是相似的部署方法,其实感觉上和本地是很相似的,服务器不管是ubuntu还是centos,都和本地的项目有一定的联系,如有疑问请联系我。

    来源于:微信公众号【李歘歘】

    作者:李歘歘

    扫码关注,领取众多粉丝福利,阅读更多原创文章,联系作者

    展开全文
  • go build main.go 编译后会在同级目录生成可执行文件 main.exe   linux服务器 方法一:服务器上去编译 安装go,配置GOPATH 1,把服务器上配置成本地一样的环境 2,包括项目里面所依赖的包 3,项目源码拷贝...
  • beego项目部署上线完整过程

    千次阅读 2019-01-07 15:44:01
    前言 博客做完了,但是因为一开始就是在本地使用 bee run 来跑测试,那么到了正式服务器,如何来进行部署呢.网上查了好多发现只是略微说了下使用什么部署,却没有完整的部署过程,我将描述下本博客在部署上线的完整过程 ...
  • Go-Beego Web程序的打包和部署

    千次阅读 2019-10-22 11:22:00
    一.bee pack 命令打包 首先要修改conf/app.conf文件:端口改成8086,运行环境改成prod appname = beego01 ...runmode = prod 进入项目根目录下,执行bee pack 命令: bee pack 执行后,发现在项目根目录生成了beego01...
  • golang orm对比

    千次阅读 2019-06-11 13:35:50
    golang orm对比 golang https://segmentfault.com/a/1190000015606291 各主流的golang orm介绍 当前较为主流/活跃的orm有gorm、xorm、gorose等 xorm 文档 github document godoc 支持的数据库有:...
  • 代码: import os os.system('adb'); 然后显示 其实就是:'adb' 不是内部或外部命令,也不是可运行的程序 或批处理文件。...可能由于pycharm编码不同的关系导致显示乱码。...adb="C:\\Users\\z\\AppData\\Local\\...
  • go mod初探及踩坑(GO11包管理工具)

    万次阅读 2019-05-08 21:20:00
    1、go mod是什么 go mod 是Golang 1.11 版本引入的官方包(package)依赖管理工具,用于解决之前没有地方记录依赖包具体版本的问题,方便依赖包的管理。 之前Golang 主要依靠vendor和GOPATH来管理依赖库,vendor...
  • 过年的疫情,让我有了...这篇是关于如何学习golang这门语言的。实例代码一分享到github 点击获取源码github 学习golang 本项目是个go gin框架写的web 项目。前端使用的是x-admin的开源前端。 项目截图: ...
  • go入门及进阶书籍推荐

    万次阅读 热门讨论 2019-08-16 10:40:52
    c c++了解即可 ... Cloud.Native.Go.pdf C和指针.pdf C++面向对象多线程编程.pdf Design Pattern In Go[go语言设计模式].pdf Docker —— 从入门到实践 - v1.0.pdf Docker 容器与容器云(第2版).pdf ...
  • Go语言图形界面开发:Go版GTK

    万次阅读 热门讨论 2020-02-26 10:23:10
    本人录制的Go入门视频 go语言开发实战:https://pan.baidu.com/s/1bqOR9qZ Go语言GUI编程:https://pan.baidu.com/s/13yoUhqEUyrT_9bpi7K0rYQ ...Go语言快速入门 04、Go入门教程 Hello GTK 05、一...
  • 百度云网盘下载
  • 2019千锋GO语言超详细入门教程(笔记+课件+源码)(连载)https://pan.baidu.com/s/1SAOdgmd7d82MBVFiJsj2sQ 提取码:egyb 2019千锋区块链初识与职业发展https://pan.baidu.com/s/1VrUJ6Qn19fd1D40_uQuKTQ 2019...
  • 介绍Go语言是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。为了方便搜索和识别,有时会将其称为GolangGo语言于2009年11月正式宣布推出,成为开放源代码项目,并在Linux及Mac OS X...
  • Web基础:Go编程基础:下载地址:百度网盘(全网资源最全)
1 2 3 4 5 ... 20
收藏数 50,007
精华内容 20,002
关键字:

go