原创文章转载请注明出处:@协思, http://zeeman.cnblogs.com
 
话说当今世界各种语言和伪语言群雄并起,连Rob Pike, Ken Thompson和Robert Griesemer等几位大神也坐不住了,推出了云时代的Go语言,期望其能延续C语言在系统层开发的辉煌。

 
Go语言的语法设计要求简单,从事过OO开发的人来看GO语言的语法,甚至简单到变态,比如Function称为Func, if不需要括号, 没有Class,以func和struct来组合实现,类似C#中的扩展方法。总体来说,延续了C的风格,并且吸收了一些现代语言的特点。
 
Go语言有一套自动依赖管理机制,可以很方便的引入第三方包。缺点是:不能区分版本,一旦更新则相同GoPath下所有的项目都要使用最新版本。同时由于Go是强类型编译语言,要更新依赖就要重新整个项目重新编译发布,没有更新某个模块之说。如果你是要开发类似Framework这样的包,你发布了更新,则所有依赖于你的项目都要重新编译部署,这一点比较麻烦。
 
Go语言支持函数多返回值,并且约定最后一个值为Error,理由是在离异常最近的地方最容易处理异常,不提倡像C#或者Java那样将异常层层传递出去。如果非要那样做,可以用panic, 但Go认为只有发生致命异常才可以这样做。
 
Go语言中所有引入的包和定义的变量都必须要使用,未使用是不能编译的,从优化上说是有道理的,只是在debug的时候会麻烦一点。并且对代码风格也有严格的约定,对有个性化需求的同学可能不太能接受。
 
Go语言可以方便的使用C代码,得益于此,大量高质量的C库丰富了Go的生态,可以很容易的将这些库包装为Go语言的包。
 
以上吐槽以Go本身的设计哲学来看可能都不是问题,但是对于刚接触的同学看着有些难受,所以做Go项目的时候要转变思维,以Go的方式处理Go的问题。

对Golang的一些看法的更多相关文章

  1. golang编程之我见

    golang编程之我见 学习了两个月的golang,语法算是基本掌握了,从一个C++程序员的角度,提出自己的几个看法吧. 1,没有一个好的包管理工具. 我在公司用的是glide的包管理,这个工具的好处 ...

  2. 详解golang net之transport

    关于golang http transport的讲解,网上有很多文章读它进行了描述,但很多文章讲的都比较粗,很多代码实现并没有讲清楚.故给出更加详细的实现说明.整体看下来细节实现层面还是比较难懂的. ...

  3. 谈谈RPC——golang中jsonrpc和grpc的使用

    前言 不知从什么时候rpc这个东西开始进入我们的视野,一开始做开发的时候经常使用的都是http,偶尔使用的是socket进行通信,使用的是restful的方式.但是,一次偶然的机会你会发现RPC这个东 ...

  4. Golang入门(1):安装与配置环境变量的意义

    摘要 在几年前学习Java的时候,环境的配置就会劝退一部分的初学者.而对于Golang来说,也需要从环境的配置开始学起.这一篇文章将从如何安装Golang开始讲起,随后将会提到Golang中的环境变量 ...

  5. GoLang——Hello World,打开新世界的大门

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Go语言系列的第一篇文章,我们来聊聊这门新的语言和它的基础语法. 浅谈Golang 作为程序员而言,往往对于学习新的语言都是有抗拒的. ...

  6. Golang, 以17个简短代码片段,切底弄懂 channel 基础

    (原创出处为本博客:http://www.cnblogs.com/linguanh/) 前序: 因为打算自己搞个基于Golang的IM服务器,所以复习了下之前一直没怎么使用的协程.管道等高并发编程知识 ...

  7. 说说Golang的使用心得

    13年上半年接触了Golang,对Golang十分喜爱.现在是2015年,离春节还有几天,从开始学习到现在的一年半时间里,前前后后也用Golang写了些代码,其中包括业余时间的,也有产品项目中的.一直 ...

  8. TODO:Golang指针使用注意事项

    TODO:Golang指针使用注意事项 先来看简单的例子1: 输出: 1 1 例子2: 输出: 1 3 例子1是使用值传递,Add方法不会做任何改变:例子2是使用指针传递,会改变地址,从而改变地址. ...

  9. Golang 编写的图片压缩程序,质量、尺寸压缩,批量、单张压缩

    目录: 前序 效果图 简介 全部代码 前序: 接触 golang 不久,一直是边学边做,边总结,深深感到这门语言的魅力,等下要跟大家分享是最近项目 服务端 用到的图片压缩程序,我单独分离了出来,做成了 ...

随机推荐

  1. 如何写出优雅兼备可读性的javascript代码

    即或是最简单的需求,不同的程序员也会写出不一样的代码: 需求:充值程序过虑不符合条件的充值金额,即只能充入100.200.500.1000金额,其它过虑: 1.菜鸟程序员可能会这样写,虽然可读性强,代 ...

  2. liunx 防火墙开放端口的设置

    今天在liunx 服务器上遇到一个问题,tomcat服务启动后怎么也访问不到项目,找了好久的原因,终于发现原来是liunx服务防火墙限制服务端口的访问,也就不多说了,看下面解决方法. 1.查看防火墙的 ...

  3. 关于hover

    要想实现a:hover b{} 得到样式的话,a必须是b的父元素

  4. Redis多机常用架构-主从

    本文内容摘录自同事Perry Zhang的讲解,如需转载须本人同意. 1.主从 命令:slaveof <IP><PORT> redis主从配置:redis支持master-sl ...

  5. jquery 常用方法

    1:判断checkbox是否选中 <input type="checkbox" id="cbx" /><label for="cbx ...

  6. Head First 设计模式读书笔记

    在网上学习了一段时间设计模式,总感觉不系统,很容易忘,最近买书,学习了<Head First设计模式>,受益匪浅,特做此记录,以便激励自己不断的向后学习. 原书JAVA版本,本次学习记录及 ...

  7. ExecutorService中submit和execute的区别(转)

    在Java5之后,并发线程这块发生了根本的变化,最重要的莫过于新的启动.调度.管理线程的一大堆API了.在Java5以后,通过Executor来启动线程比用Thread的start()更好.在新特征中 ...

  8. win7挂载NFS

    以下是在win7旗舰版下挂载NFS服务的步骤: 1 打开NFS服务 控制面板-->程序-->打开程序和功能-->NFS服务

  9. 8.4.1 ImageLoader

    ImageLoader 的工作原理(已经不维护了) 在显示图片的时候,它会先在内存中查找:如果没有,就去本地查找:如果还没有,就开一个新的线程去下载这张图片,下载成功会把图片同时缓存到内存和本地. 基 ...

  10. MVC3/4伪静态 jexus mvc伪静态

    第一步修改RouteConfig.cs文件 public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute ...