千呼万唤始出来,犹抱琵琶半遮面-go语言初识

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 千呼万唤始出来,犹抱琵琶半遮面-go语言初识

@[toc]

前言

在云原生领域,随着docker,k8s的普及,go越来越火;使用go对分布式存储,云计算产品进行二次开发,也是大势所趋。

选择哪个语言作为自己的第一个初始学习语言这件事,不仅仅是我有知道,连国外的网友都纷纷献策.

LMAOO,国外的网友分析起问题来,和咱们一样头头是道。
在这里插入图片描述

看看这个小哥的回答 :
在这里插入图片描述

行文流水都像极了国内小哥,要不是看着有头像,真以为是国内小哥.

在这里插入图片描述

go语言的简单介绍

go语言的历史

Go语言诞生于2007年由谷歌公司研发,2009年开源,2012年推出1.0版本,大多数公司选择使用golang的主要原因是: golang和c++ 相比有GC, 和java相比更简洁,与Python相比更快。

我们公司的主打语言是C++ ,但是总出现内存泄露或者crash, 改成Python之后,总是在重构,不堪其扰,于是就想着换门新语言,或许能解决这个问题。

的确使用go之后,之前的代码问题全部都没有了,但这并不是go语言的功劳,而是因为原先老的代码一团浆糊,用新的代码重构,屏弃掉了写老代码程序员的陋习,让代码更规范。

能够解决代码问题的不是语言本身,而是人。

现如今很多程序员,从来没有深入去钻研过软件工程的规律和技术,也没有深入去学习过一门编程语言的特色,写代码完全凭心情。 就像开车一样,有交通规则你不遵守,最终出问题,你又怪车或者路不好。

为什么要创建go这门语言

go属于静态强类型,编译开发型语言,语法和C相近,每个语言都有一个吉祥物,go也不例外,go的吉祥物是: 金花鼠

在这里插入图片描述

Go每半年发布一个二级版本(即从a.x升级到a.y)。

为什么要创建Go语言,起源是Google的几位大牛正在使用C++开发一些比较繁琐但是核心的工作,主要是分布式集群,当时大牛们内心都是比较烦躁的。

这时C++委员会来他们公司做技术演讲,说C++将要添加35个新特性,本身就烦躁的大牛们内心国粹满天飞,因为C++的特性已经够多了。

于是罗布·派克(Rob Pike)说要不自己搞一个简单一点的语言吧,首先名字得简单好记,大腿一拍就叫"Go"。

动态语言和静态语言的区

动态类型语言和静态类型语言的区分:

动态类型的语言:

动态类型语言和动态语言是完全不同的两个概念。

动态类型语言:是指在运行期间才去做数据类型检查的语言,说的是数据类型,

动态语言:说的是运行是改变结构,说的是代码结构。 动态类型语言的数据类型不是在编译阶段决定的,而是把类型绑定延后到了运行阶段。

动态主要语言:Python、Ruby、Erlang、JavaScript、swift、PHP、Perl。

静态类型语言

静态语言的数据类型是在编译期间(或运行之前)确定的,编写代码的时候要明确确定变量的数据类型。
主要语言:C、C++、C#、Java、Object-C。

Go 语言是一种静态类型的编程语言,所以在编译器进行编译的时候,就要知道每个值的类型,这样编译器就知道要为这个值分配多少内存,并且知道这段分配的内存表示什么。
提前知道值的类型的好处有很多,比如编译器可以合理的使用这些值,可以进一步优化代码,提高执行的效率,减少 bug 等等。

目前go语言的招聘

目前在boss直聘上,go语言的招聘岗位还是蛮多的:
在这里插入图片描述

go的优势

Go语言是集多编程范式之大成者,体现了优秀的软件工程思想和原则,其特性可以使开发者快速地开发、测试和部署程序,大大提高了生产效率。

下面我们来看看与其他主流语言相比,Go语言具有的优势。

1) 相对于 C/C++ 来讲,Go语言拥有清晰的依赖管理和全自动的垃圾回收机制,因此其代码量大大降 低,开发效率大大提高。

2) 相对于 Java 来讲,Go语言拥有简明的类型系统、函数式编程范式和先进的并发编程模型。因此其

代码块更小更简洁、可重用性更高,并可在多核计算环境下更快地运行。

3) 对于 PHP 来讲,Go语言更具通用性和规范性。这使得其更适合构建大型的软件,并能够更好地各个模块组织在一起。

4) 对于 Python/Ruby 来讲,Go 的优势在于其简洁的语法、非侵入式和扁平化的类型系统和浑然天成

的多范式编程模型。与 PHP 一样,Python 和 Ruby 也是动态类型的解释型语言,这就意味着它们 的运行速度会比静态类型的 编译型语言慢很多。

总而言之,Go语言对于当前大多数主流语言来讲,最大的优势在于具有较高的生产效率、先进的依赖管理和类型系统,以及原生的并发计算支持。

因此,Go语言自发布以来就受到了各个领域开发者的关注和青睐。

有哪些公司在用go

Go语言是Google公司创造的语言,也是Google主推的语言。国外如Google、AWS、Cloudflare、CoreOS等,国内如七牛、阿里、小米、等都已经开始大规模使用Golang开发其云计算相关产品。

很多大公司的项目,比如腾讯的蓝鲸平台,百度的BFE项目,阿里的CDN以及其他系统部门,京东的推送系统,云存储,以及京东商城,都在使用go

而对于运维来说,可以使用go语言做运维,甚至开发一些k8s控制节本

为什么大家都热衷于使用go语言呢?

因为,安全性高,而且能提高开发人员的生产力,并发性比较强。

有哪些go语言的优秀项目?

  • docker,golang头号优秀项目,通过虚拟化技术实现的操作系统与应用的隔离,也称为容器;
  • kubernetes,由google开发,简称k8s,k8s和docker是当前容器化技术的重要基础设施;
  • etcd,一种可靠的分布式KV存储系统,有点类似于zookeeper,可用于快速的云配置;
  • codis,由国人开发提供的一套优秀的redis分布式解决方案; tidb,国内PingCAP 团队开发的一个分布式SQL
  • 数据库,国内很多互联网公司在使用; influxdb,时序型DB,着力于高性能查询与存储时序型数据,常用于系统监控与金融领域;
  • cockroachdb,云原生分布式数据库,继NoSQL之后出现的新的概念,称为NewSQL数据库;
  • beego,国人开发的一款及其轻量级、高可伸缩性和高性能的web应用框架; caddy,类比于nginx,一款开源的,支持HTTP/2的
  • Web 服务端; flynn,一款开源的paas平台;
  • consul,HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置;
  • go-kit,Golang相关的微服务框架,这类框架还有go-micro、typthon;
  • go-ethereum,官方开发的以太坊协议实现; couchbase,是一个非关系型数据库;
  • nsq,一款高性能、高可用消息队列系统,每天能处理数十亿条的消息;
  • packer,一款用来生成不同平台的镜像文件的工具,例如VM、vbox、AWS等;
  • doozer:高速的分布式数据同步服务,类似ZooKeeper; tsuru:开源的PAAS平台,和SAE实现的功能一模一样
  • gor:一款用Go语言实现的简单的http流量复制工具;

go相关的资料及书籍推荐

  • go语言中文网 算是一个比较全的网站了,汇集了go相关的学习资料与技术文章
  • GO技术交流论坛 目前活跃度还算可以,整体来看用户不是很多,毕竟go也属于小众语言,能够理解
  • Go语言知识图谱 为打造个人体系做参考
  • 推荐书籍:

-《Go语言趣学指南》
《Go语言入门经典》
《Go语言编程》
《Go语言高级编程》
《Go语言并发实战》
《Go Web编程》
《Go学习笔记》

其他可能你无法使用但不代表不存在的资源:

  1. Perhaps the best primer for new people learning Go and programming

    https://www.golang-book.com/books/intro

How much time does it take to learn Go (Go language)?

大约半年时间进行学习,学习过程中遇到问题解决问题,当然越快越好.

如果能用4个月时间学完是最好的.

总结

go语言相对来说比较简单,这一点国内外的说法都是一致的,接下来跟着我的文档学习吧.

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
10天前
|
程序员 Go PHP
为什么大部分的 PHP 程序员转不了 Go 语言?
【9月更文挑战第8天】大部分 PHP 程序员难以转向 Go 语言,主要因为:一、编程习惯与思维方式差异,如语法风格和编程范式;二、学习成本高,需掌握新知识体系且面临项目压力;三、职业发展考量,现有技能价值及市场需求不确定性。学习新语言虽有挑战,但对拓宽职业道路至关重要。
40 10
|
8天前
|
Go API 开发者
深入探讨:使用Go语言构建高性能RESTful API服务
在本文中,我们将探索Go语言在构建高效、可靠的RESTful API服务中的独特优势。通过实际案例分析,我们将展示Go如何通过其并发模型、简洁的语法和内置的http包,成为现代后端服务开发的有力工具。
|
10天前
|
算法 程序员 Go
PHP 程序员学会了 Go 语言就能唬住面试官吗?
【9月更文挑战第8天】学会Go语言可提升PHP程序员的面试印象,但不足以 solely “唬住” 面试官。学习新语言能展现学习能力、拓宽技术视野,并增加就业机会。然而,实际项目经验、深入理解语言特性和综合能力更为关键。全面展示这些方面才能真正提升面试成功率。
34 10
|
10天前
|
编译器 Go
go语言学习记录(关于一些奇怪的疑问)有别于其他编程语言
本文探讨了Go语言中的常量概念,特别是特殊常量iota的使用方法及其自动递增特性。同时,文中还提到了在声明常量时,后续常量可沿用前一个值的特点,以及在遍历map时可能遇到的非顺序打印问题。
|
7天前
|
存储 监控 数据可视化
Go 语言打造公司监控电脑的思路
在现代企业管理中,监控公司电脑系统对保障信息安全和提升工作效率至关重要。Go 语言凭借其高效性和简洁性,成为构建监控系统的理想选择。本文介绍了使用 Go 语言监控系统资源(如 CPU、内存)和网络活动的方法,并探讨了整合监控数据、设置告警机制及构建可视化界面的策略,以满足企业需求。
25 1
|
14天前
|
安全 大数据 Go
深入探索Go语言并发编程:Goroutines与Channels的实战应用
在当今高性能、高并发的应用需求下,Go语言以其独特的并发模型——Goroutines和Channels,成为了众多开发者眼中的璀璨明星。本文不仅阐述了Goroutines作为轻量级线程的优势,还深入剖析了Channels作为Goroutines间通信的桥梁,如何优雅地解决并发编程中的复杂问题。通过实战案例,我们将展示如何利用这些特性构建高效、可扩展的并发系统,同时探讨并发编程中常见的陷阱与最佳实践,为读者打开Go语言并发编程的广阔视野。
|
12天前
|
存储 Shell Go
Go语言结构体和元组全面解析
Go语言结构体和元组全面解析
|
17天前
|
Go
golang语言之go常用命令
这篇文章列出了常用的Go语言命令,如`go run`、`go install`、`go build`、`go help`、`go get`、`go mod`、`go test`、`go tool`、`go vet`、`go fmt`、`go doc`、`go version`和`go env`,以及它们的基本用法和功能。
25 6
|
16天前
|
存储 Go
Golang语言基于go module方式管理包(package)
这篇文章详细介绍了Golang语言中基于go module方式管理包(package)的方法,包括Go Modules的发展历史、go module的介绍、常用命令和操作步骤,并通过代码示例展示了如何初始化项目、引入第三方包、组织代码结构以及运行测试。
19 3
|
18天前
|
缓存 安全 Java
如何利用Go语言提升微服务架构的性能
在当今的软件开发中,微服务架构逐渐成为主流选择,它通过将应用程序拆分为多个小服务来提升灵活性和可维护性。然而,如何确保这些微服务高效且稳定地运行是一个关键问题。Go语言,以其高效的并发处理能力和简洁的语法,成为解决这一问题的理想工具。本文将探讨如何通过Go语言优化微服务架构的性能,包括高效的并发编程、内存管理技巧以及如何利用Go生态系统中的工具来提升服务的响应速度和资源利用率。