本文始发于个人公众号: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. Python中使用subprocess模块远程执行命令

    使用subprocess模块执行远程命令 服务端代码 1 import socket 2 import subprocess 3 4 sh_server = socket.socket() 5 sh_ ...

  2. JAVA设计模式之-模板方法+(钩子函数)

    1.定义 允许子类对父类的一个或多个步骤进行重写.例如聚合支付场景中有很多共同的步骤,比如验签.四要素验证.风控等等,但是在支付的时候走不同的渠道可能在调用和参数上有很大的不同,比如有的是xml,有的 ...

  3. Button相关设置

    2020-03-11 每日一例第4天 1.添加按钮1-6,并修改相应的text值:  2.窗体Load事件加载代码: private void Form1_Load(object sender, Ev ...

  4. $props, $attrs,$listeners的具体使用例子

    我在这使用属性重新render饿了么ui的tree: <el-tree ref="tree" icon-class="fa fa-caret-right" ...

  5. nodejs中的并发编程

    从sleep的实现说起 在nodejs中,如果要实现sleep的功能主要是通过"setTimeout + promise"实现,也可以通过"循环空转"来解决.前 ...

  6. Java基础语法(2)-变量

    title: Java基础语法(2)-变量 blog: CSDN data: Java学习路线及视频 1.什么是变量? 变量的概念 内存中的一个存储区域 该区域的数据可以在同一类型范围内不断变化 变量 ...

  7. Angularjs优点

    数据双向绑定,前后台的更改都可以随时生效, 提供mvc开发模式模式,剥离前端各部分代码,使代码便于维护管理. 简化了你写DOM操作

  8. 洛谷1880 区间dp+记忆化搜索 合并石子

    题目网址:https://www.luogu.com.cn/problem/P1880 题意是:给定一个序列,最小规则是相邻两个值的合并,开销是他们的和,将整个序列合并成一个值的情况下,求解该值的最小 ...

  9. redis中setbit bitcount命令详解

    bitmap,位图,即是使用bit. redis字符串是一个字节序列. 1 Byte = 8 bit SETBIT key offset value 设置或者清空key的value(字符串)在offs ...

  10. vue采坑记录

    1.项目在浏览器运行的时候没有ico图标 <link rel="shortcut icon" type="image/x-icon" href=" ...