本文始发于个人公众号:TechFlow,原创不易,求个关注

今天是Go语言系列的第一篇文章,我们来聊聊这门新的语言和它的基础语法。

浅谈Golang

作为程序员而言,往往对于学习新的语言都是有抗拒的。如果你用惯了Java,那么你可能不太愿意去学Python,如果你刚学C或者C++可能你也会看不上Java。因为这个原因还会引发很多口水仗,这很正常。我当时写C++的时候也看不上Java,写了Java又不想学Python,现在学会了Python,有时候也会不想看其他语言写的代码。

但是随着我们的成长和实力的提升,我逐渐发现学习一门语言的成本在飞快地下降。毕竟天下语言都是程序,就好像武侠小说里各门各派的武功眼花缭乱,但是归结起来无非是拳脚功夫、刀剑或者是内功这么几种。语言也是一样,虽然我会的语言也不够多,远远没达到可以指点江山的地步。但也发现了很多语言之间的相关性实在是很强,有些理念一脉相承,有些更像是一个模子里刻出来的。既然如此,我们为什么需要学习Go这样一门语言呢?

网上相关的信息很多,很多大牛架构师高谈阔论。很多观点和看法我并没有很深的体会,所以我就不做搬运工了。简单说下我个人的一点浅薄的看法

当初学习Golang这门语言的原因很简单,纯粹是因为工作需要。当前的公司几乎所有的系统都是以Golang写的,所以学习Golang是必须的。但是学会语言基本的使用和精通一门语言这是两回事,学会基本的用法是因为工作需要,而让我想要花时间把这门语言精通是因为一门课程。这门课程非常著名,它是MIT(麻省理工)的分布式系统的公开课,当中的内容和课后作业都非常硬核,更关键的是课后作业是用Golang写的。

在学习这门课程的过程当中,经过了一些思考和一些观察,Golang的确在分布式处理的场景和问题当中有一定的优势,许多优秀的解决方案都是基于Golang写的。并且这两年各类语言的流行变迁情况也印证了这一点,在最新的全世界程序员最想要学习的语言当中,Golang排名前3。在全球语言流行排行当中,Golang也冲进了前十,要知道这门语言才诞生十年。

并且在国内Golang工程师的需求量也与日俱增,我纯属好奇去拉勾网看了一下,全国Golang的岗位是341个。

看起来似乎不多,但是我们再来看下就业大户Java,也才500+

要知道,Java几乎是CS必学的语言,所有CS毕业以及相关专业毕业的学生都可以号称自己会Java。但是Go不一样,它太新了,诞生不过十年,以目前高校的反应速度以及筛选课程的能力,它入选中国的教材目测最少还需要5-10年。并且和Java相比,Golang要好学的多。所以如果你还没有毕业,想要成为一名工程师,想要找一份工作,那可以考虑学习一下Go,说不定竞争压力会比Java小得多

我个人觉得Golang是一门非常有个性的语言,长处与短处都非常的明显。关于它的长处很多,相比于一一列举出来,在实际学习和运用的过程当中领会到的感受会深得多。

Hello World

学语言第一件事就是敲Hello World,我想所有语言都不例外,我们也来看下Golang的Hello World,来看下它的基本结构。

package main

import (
 "fmt"
)

func main() {
 fmt.Println("Hello World")
}

我们来简单看下这段代码,可以把这段代码分成三个部分。

最上面的是模块名,也可以说成是包名,然后是引入包的语句。这一块其实没什么好说的,很多语言都是这样的结果,比如Java和Python。在Golang当中main package表示一个独立的程序,而不是一个包。在main package下的main函数代表这个独立程序的执行入口,和C++以及Java当中的main函数比较类似。我们可以在main函数里调用其他包的各种函数。

fmt是Golang当中的标准输出包,我们调用它来输出我们想打印的东西。

写完了Hello World之后就要执行了,Golang提供了两种执行方式,一种是直接go run + 要执行的文件名。还有一种是和C++一样先进行编译,再通过./调用编译之后的二进制包。

当然执行之前我们需要在电脑上配置Golang的环境,这方面网上的资料很多,并且Golang的安装也比较简单,基本上没有什么坑,所以照着网上的博客安装就好了

我们来分别看下这两种调用方式,第一种我们直接使用go run执行代码:

还有一种方式是我们先通过go build对Golang的代码先进行编译,会生成一个二进制文件,之后我们直接./运行这个文件。

所以从这里我们可以看出来,Golang是编译型语言而不是解释性语言,因此它的效率会非常高,实际上由于Golang的一些底层设计和特性,Golang的运行效率非常高,在绝大多数场景比Java更快,仅仅次于C++。

IDE

最后简单聊聊Golang的开发环境,其实现在开发环境已经普世化了,很多代码编辑器可以用来写各种语言。比如业内比较流行的vscode,Atom,Sublime等等,这几种当中我个人最喜欢vscode,功能非常强大,拥有海量的插件支持,并且页面风格和使用体验也不错,并且还是免费的。

另外一个比较常用的是Goland,它是Jet Brains公司专门为Golang开发的IDE。Jet Brains公司专门发开各种语言的IDE,几乎每一种语言的IDE都广受欢迎。写过Java的同学应该对IDEA都不陌生,它的体验比eclipse要好用得多。同样,Goland对于Golang的支持也非常好,使用体验非常棒,而且如果之前用过它家的其他产品会非常适应。

Goland页面风格以及各方面体验都非常棒,但缺点也很明显,一个是基本上只支持Golang,另一个缺点就是。免费的社区版要阉割掉一些功能,而专业版则要好几千人民币。不过如果是学生的话可以免费申请,不得不说还是非常人性化。

除了这些之外,还有七牛团队开源的liteide,基于C++ QT开发,因此执行效率很高,但据说调试功能不太好用。我也没有用过,感兴趣的小伙伴可以试试。

今天的文章就是这些,如果觉得有所收获,请顺手点个在看或者转发吧,你们的举手之劳对我来说很重要。

GoLang——Hello World,打开新世界的大门的更多相关文章

  1. Python打开新世界的大门-入门篇1

    目录 题记 Python技巧.避坑及心得 八种数据类型 循环 函数 Homework 题外话 之前没有写博客的习惯,现在开始写觉得入门也太晚了吧,看看同龄的大哥都写了十几万字.于是 ...

  2. echart 打开新世界的大门

    实时折线图 option = { backgroundColor:'#2B2B2B', tooltip: { trigger: 'axis' }, legend: { data:['频率'], tex ...

  3. 在网址前加神秘字母,让你打开新世界(z)

    在网址前加神秘字母,让你打开新世界 1.在百度云后面加“wp”可以高速下载百度云资源<ignore_js_op> 2.在任何网址前面加“wn.run”(一定要加到这个网址www的前面)之后 ...

  4. 打开新世界的第一步:学习servlet

    什么是servlet? 是用Java编写的服务器端程序.其主要功能在于交互式地浏览和修改数据,生成动态Web内容. 创建servlet 一.创建一个web project 1)流程:eclipse-F ...

  5. 文科生打开python的大门

    作为唯一的一名教育学院的学生,加入python课程,一定要声明我可不是并不是被迫选课的!虽然是文科生,但是是对编程这种东西很感兴趣的文科生.从站在python门口的张望,到现在悄悄把门打开,越来越感觉 ...

  6. AI生万物,新世界的大门已敞开

    四月是万物复苏的时节,一年一度的GMIC全球移动互联网大会也在这个时间如期而至,在4月26日-28日的会议期间,有超过三百位行业专家进行了精彩的演讲,更有数万名现场观众感受到思维碰撞迸发出的火花. 作 ...

  7. 第一步,怎么打开react的大门?

    前言 其实我的react的实战经验很少,大概是17年-18年写了一个react全家桶的后台管理系统.猜测这个项目应该还一直在使用 在我手里的vue项目就比较多了,技术栈一直是vue全家桶.最近也在深入 ...

  8. 菜鸟VUER学习记——零0章、打开新的大门

    是什么 基于MVVM模型,核心库只关注视图层,通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件的js框架.根据项目的复杂度和需求,渐进的加入插件以达到恰到好处的程度. 解决问题 UI组件化 ...

  9. 打开CDQ的大门&BZOJ3262

    题目传送门 第一次接触CDQ分治,感谢YZ大佬的教导. CDQ分治就是一种奇特的分治方法,它用左区间的区间信息来更新右区间. 设CDQ(L,R,l,r)表示递归到区间[L,R],区间的值为[l,r]. ...

随机推荐

  1. 【JDK】JDK源码分析-Semaphore

    概述 Semaphore 是并发包中的一个工具类,可理解为信号量.通常可以作为限流器使用,即限制访问某个资源的线程个数,比如用于限制连接池的连接数. 打个通俗的比方,可以把 Semaphore 理解为 ...

  2. c#语言 中FileStream类的基本使用

    FileStream类不是静态类,使用时需要创建对象,FileStream类既可以对文本文件进行读也可以对多媒体文件进行写,以字节数组的形式进行读和写,多用于对大文件进行读写,区别于File类的是它对 ...

  3. js 碰撞+拖拽

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. Layui select下拉框改变之 change 监听事件(转)

    在layui中使用 jquery 触发select 的 change事件无效 使用layui.use监听select事件 <select lay-filter="demo" ...

  5. 深入理解计算机系统 (CS:APP) - 高速缓存实验 Cache Lab 解析

    原文地址:https://billc.io/2019/05/csapp-cachelab/ 这个实验是这学期的第四个实验.作为缓存这一章的配套实验,设计得非常精妙.难度上来讲,相比之前的修改现成文件, ...

  6. 【Weiss】【第03章】练习3.13:桶排序

    [练习3.13] 利用社会安全号码对学生记录构成的数组排序.编写一个程序进行这件工作,使用具有1000个桶的基数排序并且分三趟进行. Answer: 首先,对社会安全号码不了解的就把它当成一个不超过9 ...

  7. oracle去除重复数据与oracle分页

    一.去除oracle中重复数据,可以使用rowid列,rowid列是一个伪列,该列在数据库中灭一个表中都有,但是我们查询数据库的时候,默认都没有给我们返回这一列,这一列用来区分数据库中的每一行时间,可 ...

  8. C# UDP通讯实例

    1.发送方代码 void SendMsg(string toip, int port ) { try { string message="发送内容"; UdpClient udpc ...

  9. 「 Offer收割机之JVM」:生存还是毁灭

    这两天,广州的天气又开始热了起来,又到了小动物交配的季节,啊呸,又到了一个收割 offer 的季节.年底将至,又到了面试的高峰期,JVM 作为Java 程序员面试绕不过的一道坎儿,它又来了,你准备好了 ...

  10. [模拟]Codeforces Circle of Students

    Circle of Students time limit per test 2 seconds memory limit per test 256 megabytes input standard ...