我喜欢Go编程语言,或者有人称它为Golang。 很简单,也很棒。

我在切线上写这个。 没想到Golang会这么好。

我首先在2016年1月左右回去,那里有一个相对较小但热情的社区。

当时我并没有考虑太多,我在磨练自己的编程技能,而Golang只是我用来完成任务的工具。

甚至在一年前,使用go还是很棒的。 一旦掌握了通用语言,该过程就很简单了。

我为Visualead (我工作的公司)编写了关键代码,但它并没有让我们失望,一年后仍在生产中运行,此后零维护。

最近,我发现自己再次使用Golang,不得不写关于我爱上Golang的原因。

GOPATH环境

这是您开始使用Go编写后必须首先处理的事情之一。

在计算机上的任何位置设置GOPATH目录,其中包含bin,src和pkg目录,您就可以开始编写了。

// How the directory structure looks like: go - bin - pkg - src

在我的主目录下,我为所写的每种编程语言创建一个新目录。我的用户主目录中充满以下文件夹:

chef cpp elixir elm go javascript meteor ocaml php python scala

除了Go之外,这些语言都没有强制执行此结构。 Go会强制您为所有Golang物品定义一个根目录,并且这样做的确有充分的理由。

Golang应用程序

是否要创建新的Golang应用程序? 简单。

转到$ GOPATH / src目录,创建一个新文件夹,创建一个新文件。go,调用包main,添加一个func main(){}函数即可。 从那一刻开始,您就可以使用所有的Go功能。

更多关于Go的好东西即将出现! 但首先要谈谈Golang模块。

Golang模块

我最喜欢的编程范例做得很好。 我认为模块系统是面向对象类系统的一种替代。

Golang称其为模块包。 因此,从现在开始,每当我们说一个模块时,我们就意味着一个包,反之亦然。

Module == Package == Module

在Golang中,您创建的每个目录都将成为一个包。 如果包的名称为main,则它可以成为应用程序。这有助于将代码自然地分离为可管理的逻辑块。

您始终希望从可重用的组件或程序包(如果使用Golang)中创建业务逻辑。

在我当前的应用程序中,我必须处理某些文件中的某些行,并在完成后将其上传到AWS S3。

我的应用程序结构如下所示:

src - my_app - - main.go - - main_test.go - - uploader - - - uploader.go - - - uploader_test.go - - replace_file_lines - - - replace.go - - - replace_test.go - - - strings_util.go - - - strings_util_test.go

_test.go文件当然是为Golang进行单元测试文件的方式,Golang具有内置的测试框架。

对于那些来自面向对象语言的人来说,也可以认为这里的每个目录都是完整的静态类,.go文件中的每个函数或变量都将成为属性或方法。

这是一个replace.go可能看起来像的示例:

如果一个目录共享多个.go文件,则所有方法和变量在整个程序包之间共享,甚至在私有程序包之间也是如此。 它有助于将包分成更小的块,并避免大的单个文件。

在不涉及面向对象与功能/过程的情况下,重要的是要知道Go创建者决定不将经典类包括在语言中。 相反,选择使用结构/接口和程序包。

Golang Gofmt

Golang约定了所有内容的外观,每种情况和每行所需的确切间距。

这使开发人员可以专注于编写代码,而不是对花括号位置发动战争。

旧的{} vs {\ n}战争:

或者,也许我只是因为我一方在围棋中获胜而感到高兴?

在此处了解更多信息: https : //golang.org/cmd/gofmt/

Golang导入

导入始终相对于GOPATH / src。 总是。 我不能高估这个决定为我节省了多少挫败感。

警告:下一行有意混淆。

在使用其他语言时,您可以使用相对/绝对导入,或者以某种方式设置一个怪异的导入,该导入将允许您从不知道位置的位置导入文件(我在看Python)。

Go以独特的方式解决了问题。 所有导入,无论在哪个文件中,都始终相对于GOPATH / src

因此,在my_app的情况下,其主要导入将如下所示:

my_app在src下,因此我们需要先提及它,然后导入my_app下存在的包,例如uploader和replace_file_lines。 注意,我们不是导入单个文件,而是导入整个包。 像魅力一样工作并引起零混乱。

此外,除非您实际使用导入的软件包,否则Golang不会编译,此小功能可帮助您知道实际使用了每个导入。

期望您的程序员编写干净的代码而没有未使用的导入? 您为什么不让当地的Gopher来照顾呢?

Golang Get系统

导入部分将引导我们转到Golang的下一个重要功能,即go get功能。 虽然其他人对JavaScripts NPM软件包管理器印象深刻,但Go只是使用任何git存储库作为其软件包管理器。

它是如何工作的?

我之前写过我需要上传到S3,对吗? 那么那意味着我需要AWS开发工具包来完成该任务。

为了使这项工作有效,我只需打开终端并输入:

go get github.com/aws/aws-sdk-go

这里发生了什么? 没什么特别的,Golang只是从https://github.com/aws/aws-sdk-go下载回购文件到您的GOPATH / src目录中。

然后,只需使用aws-sdk即可导入它:

还记得所有导入都相对于GOPATH / src吗? 由此可见,例如s3包现在位于GOPATH / src / github.com / aws / aws-sdk-go / services / s3下。

简单。 优雅。 地鼠的另一颗星。

Golang构建和打包系统

到目前为止,我们一直将重点放在GOPATH / src上,但还有其他目录需要我们处理,即GOPATH / pkg和GOPATH / bin。

Golang是一种编译语言,这意味着必须对其进行编译才能运行。 Golang快速编译。 它是如何工作的?

每次编译代码以运行它时,Golang都会在与包相同的路径中仅在GOPATH / pkg目录下创建一个.a文件。 这意味着,例如,如果您编译aws-sdk。 它将被编译一次,并在所有其他代码之间共享。

当然,这并不是Golang快速编译的唯一原因,但这只是一个介绍,可以帮助您了解GOPATH / pkg的作用

现在,GOPATH / bin呢? 当您运行go install命令时,go将创建一个二进制文件,并将其放在GOPATH / bin下,在本例中,该文件将获得主软件包目录my-app的名称。

为什么这么好? 好了,您可以将GOPATH / bin添加到全局PATH变量中,并且您的构建的所有二进制文件都可以在命令行中使用,而无需执行任何额外的工作! (很棒:D吗?)

Golang跨平台构建

部署到其他发行版而不是编写代码的发行版? 好吧,不用担心,您不需要Windows机器就可以为Windows构建代码。 高朗让你受够了。

赶紧跑:

GOOS=windows GOARCH=amd64 go install

并且我们的代码将输出一个二进制文件,准备在Windows机器上进行部署。 .exe文件将出现在GOPATH / bin / windows_amd64 / my_app.exe中。 像在公园散步。

Golang语言

Golang旨在成为一种简单的语言。

我喜欢以下帖子,询问为什么Go并非设计成功能语言: https : //www.quora.com/Why-wasnt-Go-writing-as-a-functional-language

“在Google工作的程序员是职业生涯的早期,并且最熟悉过程语言,尤其是C家族的语言。 需要以一种新的语言快速提高程序员的工作效率,这意味着该语言不能过于激进。”

而且很简单。

以下是Golang不支持的一些功能:

  1. 班级
  2. 运算符超载
  3. 函数重载
  4. 可选参数
  5. 例外情况

尽管有时我发现自己在使用Go编写语言时缺少语言功能,但我总是可以做我想做的所有事情。 只是有时它需要更多的写作和思考。 最重要的是,它导致代码更容易推理,因为它不那么抽象。

有时候,这使我感到惊讶,因为没有那么多年的经验,仅仅因为该语言是如此的融洽和清晰,我就能以多么快的速度实现目标。

Golang并发

我出于最后目的离开了并发性讨论。 为什么? 因为我认为这并不重要。

这是该语言的惊人功能。 但有时它被视为Go的本质,但我认为并非如此。

因此,让我尝试将其总结为一个段落。

是的,Golang具有很好的并发性。 您无需处理线程,而是创建廉价的goroutine,这些例程易于制造和管理。 Goroutine允许您在所有CPU上分配负载,而不必担心如何管理所有负载。

仍然对了解goroutines感兴趣吗? 在这里阅读有关它们的信息: https : //tour.golang.org/concurrency/1

戈朗地鼠

来吧,他真可爱!


我是否提到我是函数式编程的狂热者? 那为什么我对Golang如此着迷呢? 它甚至没有关于mondas的概念。 谁知道……宇宙以神秘的方式运转。

From: https://hackernoon.com/why-i-love-golang-90085898b4f7

为什么我爱Golang相关推荐

  1. QCon讲师对对碰——洪小军采访梁宇鹏:就是爱Golang

    编者按:QCon北京2015将于4月23日~25日在北京国际会议中心召开.在大会开始之前,InfoQ推出了讲师对对碰栏目,邀请一些技术专家相互采访,碰撞出思维的火花.在QCon上,美图架构平台部门负责 ...

  2. 20小时快速入门go语言视频 - Day1

    20小时快速入门go语言视频 - Day1 一.第一个 Go 程序 1.1 入口 1.2 Golang 保留的关键字 1.3 Golang预定义标识符 二.数据类型 2.1 数据类型的作用 2.2 数 ...

  3. 20小时快速入门go语言视频 - Day5

    笔记声明 本人智商较低,好记性不如烂笔头.笔记记录了网上一套Golang免费视频教程的知识点,以供未来自己翻阅查看.不写源视频的名称和网站地址了,免得被说是广告! 20小时快速入门go语言视频 - D ...

  4. # 新冠假期 - 实习/面试经历分享(1)

    距离上次写<四次面试经历足以->,已经过去了差不多一百天, 还记得写上次那篇博客的时候,是在去桂林的火车上,不知不觉间,一百天转瞬即逝,我欣赏了故乡甜美的桃花,领略了白洋淀大堤的盎然春意, ...

  5. Go语言竟成恶意软件的最爱!4年来Go编写的恶意软件飙增2000%,网友:这也能怪Go?...

    杨净 发自 凹非寺 量子位 报道 | 公众号 QbitAI Go,或许从诞生之日起就没想过. 自己会以这种方式成为语言中的C位: 最新数据显示,Go语言成为恶意软件的最爱. 4年内基于Go语言的恶意软 ...

  6. php简单还是go简单_PHP转Golang一些感想

    由于某些原因参与到团队Golang项目的开发中,之前开发主要用的PHP,现在Golang用了也有较长一段时间了,就想着写篇博客分享下现在的一些感想,缕一缕Golang的优缺点. 缺点1:没有异常,Em ...

  7. 调查显示开发者最讨厌 PHP,最爱 Python

    开发四年只会写业务代码,分布式高并发都不会还做程序员?   Hired 网站近日发布了"2019 年软件工程师现状"报告,亮点颇多. 该报告数据由 Hired 数据科学团队收集与分 ...

  8. 实习第一周(Golang)

    目录 一,序 二,基础学习 三,环境安装 四,项目操练 GO111MODULE 五,此外附上我用过的一些资料 一,序 2020年8月3我来实习了,试想一个Java都还没学会熟练使用的人,却要用gola ...

  9. golang自定义路由控制实现(一)

        由于本人之前一直是Java Coder,在Java web开发中其实大家都很依赖框架,所以当在学习Golang的时候,自己便想着在Go开发中脱离框架,自己动手造框架来练习.通过学习借鉴Java ...

最新文章

  1. java字符串缓冲池分析
  2. 2019ICCV论文 Non-Local ConvLSTM for Video Compression Artifact Reductio
  3. 学习ASP.NET Core Razor 编程系列十八——并发解决方案
  4. Hibernate4之session核心方法
  5. 基于RTP协议的数据通讯程序
  6. Leetcode每日一题:977.squares-of-a-sorted-array(有序数组的平方)
  7. 在Apache中利用ServerAlias设置虚拟主机接收多个域名和设置域名泛解析
  8. python while循环例题_【学习笔记】python:5for循环与while循环(上)
  9. java form上传图片_js formData图片上传(单图上传、多图上传)后台java
  10. Manjaro - KDE - i3wm - PloyBar 使用配置全指南
  11. 【cs231】反向传输与神经网络
  12. airtest基本介绍
  13. linux打开dwg格式文件怎么打开软件,DWG 文件扩展名: 它是什么以及如何打开它?...
  14. 微信开发-JS接口微信定位
  15. 交换机trunk接口
  16. php 汉字、字母验证码 例子
  17. akoj-1170-国王的魔镜
  18. 零售业小程序行业解决方案
  19. 荧光标记肿瘤细胞解决方案
  20. java无法访问封闭类型实例怎么解决_错误:无法访问OOPTutorial类型的封闭实例

热门文章

  1. 为什么人类很难被错误思想蛊惑
  2. 宝塔Linux面板的搭建
  3. 面试自我介绍5句话公式
  4. 施乐700彩机服务器维修,佳铭办公设备:施乐彩机维修代码
  5. 《漫步华尔街》摘抄与读后感
  6. 20180402-E · US Tuition Costs · ggplot2, 地图 热力图 gganimate 动图 · R 语言数据可视化 案例 源码
  7. SQL Server错误代码大全及解释(留着备用)
  8. 最优化方法一:微分求极值
  9. java实现家庭关系图_左孩子右兄弟二叉树实现家族家谱
  10. 使用OrientationEventListener实时监听手机旋转的角度