原创文章转载请注明出处:@协思, 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. mac iterm2配置

    iterm2的配置分为如下几个部分: 1. 字体大小的配置: iTerm->Preferences->Profiles->Text->Regular Font: 我在这里设置成 ...

  2. Maven入门示例(3):自动部署至外部Tomcat

    Maven入门示例(3):自动部署至外部Tomcat 博客分类:  maven 2012原创   Maven入门示例(3):自动部署至外部Tomcat 上一篇,介绍了如何创建Maven项目以及如何在内 ...

  3. Google Chrome 调试

    [原文地址:http://www.cnblogs.com/QLeelulu/archive/2011/08/28/2156402.html ] 在Google Chrome浏览器出来之前,我一直使用F ...

  4. textarea 在浏览器中固定大小和禁止拖动

    HTML 标签 textarea 在大部分浏览器中只要指定行(rows)和列(cols)属性,就可以规定 textarea 的尺寸,大小就不会改变,不过更好的办法是使用 CSS 的 height 和 ...

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

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

  6. Samba网络配置

    Samba网络配置 操作环境 ubuntu14.04 1. 更新Linux源列表 sudo apt-get update 2. 安装Samba服务 sudo apt-get install samba ...

  7. 第十三章:降维:主成分分析PCA

  8. Postman-进阶

    Postman-简单使用 Postman-进阶使用 Postman-CI集成Jenkins 管理请求 保存请求-添加“打开百度首页请求” 设置请求方式为Get,地址为www.baidu.com.点击右 ...

  9. #ing# CSS细节注意点

    目录: 常用简写 权重(优先级) Hack 常用简写 权重(优先级) Hack    etc

  10. 怎么让让整个HTML页面变灰

    怎么让让整个HTML页面变灰 其实很简单,我们只需要一句话. html {filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1 ...