初识Golang编程语言
初识Golang编程语言
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
Go 是年轻而有活力的语言,有网友说:"Go语言将超过C,Java,成为未来十年最流行的语言",也有人说:"Go 是21世纪的C语言"。而我想说的是,不要盲目崇拜一门语言,语言只是一个工具,我们要找到语言的长处并将它的优势发挥到最大。比如在大数据生态圈领域,已经被Java站住脚跟了,当然还有一些C++的身影,但是很少看到Golang的身影。在数据分析领域,Python正在逐步取代R语言的进行开发。但是在容器编程领域,以Google为首的Kubernetes为例,就是使用Golang语言研发的。
本篇博客主要是对Golang的一些特性做简单的介绍,如果刚刚接触开发的同学也别总想着一门语言打遍天下无敌手,编程语言只是我们完成日常工作的一个工具,我们要做认识编程语言的伯乐,而不要人云亦云。一般能把一门语言吹成全能的基本上都是一些培训机构,他们通常喜欢把一门语言吹上天,这样做的目的大多数都是为了"割韭菜",即不是让你花费巨额报名培训班就是想要卖书给你,当你把钱从腰包里掏出之后,对编程语言有个系统的了解才发现和培训机构讲的并太一样。
一.什么是Go语言
1>.Go语言官方介绍
Go语言是有谷歌推出的一门编程语言。 Go 是一个开源的编程语言,它能够让构造简单,可靠且高效的软件变得容易。
2>.Go语言主要开发者
Go 语言始于2007年,当时只是Google内部的一个项目,其最初设计目的是Rebert Griesemer,Unix泰斗Rob Pike和Ken Thompsopn。2009年11月10日,Go语言以一个自由的开源许可方式公开亮相。 Go语言由其原始设计者加上Russ Cox,Andrew Gerrand,Ian Lance Taylor以及其它许多人在内的一个Google团队开发。Go语言采取一种开放的开发模式,吸引了许多来自世界各地的开发者为这门语言的发展贡献力量。其中有些开发者获得了非常好的声望,因此他们也获得了与Google员工一样的代码提交权限。
3>.Go 语言在最近两年比较显而易见的变化
本身的自举:
也就是说,Go语言几乎完全用Go语言程序重写了自己,仅留有一些汇编程序。
Go 语言的自举非常彻底,包括了最核心的编译器,链接器,运行时系统等。
现在任何学习Go语言的人都可以直接读它的源代码了。此变化也使用Go程序的跨平台编译变得轻而易举。
运行时系统的改进:
这主要体现在更高效的调度器,内存管理以及垃圾回收方面。
调度器已能让goroutine更及时地获得运行机制。运行时系统对内存的利用和控制也更加精细了。因垃圾回收而产生的调度停顿时间已经小于原来的1%。
另外,最大P数量的默认值由原先的1变为与当前计算机的CPU核心数相同。
标准工具的增强:
在Go 1.4加入go generate之后,一个惊艳的程序调试工具go tool trace也被添加进来了。
另外,go tool compile,go tool asm和go tool link等工具也已到位;一旦你安装好Go,就可以直接使用他们。同时,几乎所有的标准库工具和命令都得到了不同程度的改进。
访问控制的细化:
这种细化始于Go 1.4,正式支持始于 Go 1.5,至今已被广泛应用。
经过细化,对于Go程序中的程序实体,除了原先的两种访问控制级别(公开和包级私有)之外,又多了一种-模块级私有。这是通过把名称首字母大写的程序实体放入internal代码包实现的。 vendor机制的支持:
自Go 1.5在之后,一个特殊的目录vendor被逐渐启用。
它用于存放其父目录中的代码包所依赖的那些代码包。
在程序被编译时,编译器会优先引用存于其中的代码包,这为固化程序的依赖代码迈出了很重要的一步。在Go 1.7中,vendor目录以及其背后的机制被正式支持。 当然,上述变化并是不是全部。它的标准库也经历了超多的功能和性能改进。
4>.Go 语言的发展方向
网络编程语言 区块链开发领域 高性能分布式系统领域
5>.Go 语言环境安装
博主推荐阅读:
https://www.cnblogs.com/yinzhengjie2020/p/12241858.html
二.Go 语言特性
开放源代码:
这显示了Golang作者开放的态度以及营造语言生态的决心。顺便说一句,Go本身就是用Go语言编写的。 静态类型和编译型:
在Golang中,每个变量或常量都必须在声明时指定类型,且不可改变。
另外,程序必须通过编译生成归档文件或可执行文件,而后才能被使用或执行。
不过,其语法非常简介,就像一些解释性脚本语言那样,易学易用。 跨平台:
这主要是指跨计算架构和操作系统。目前,它以及支持绝大部分主流的计算架构和操作系统,并且这个范围还在不断扩大。
只要下载与之对应的Go语言安装包,并且经过简单的安装和设置,就可以使Go就绪了。
除此之外,在编写Go语言程序的过程中,我们几乎感觉不到不同平台的差异。 自动垃圾回收:
程序在运行过程中的垃圾回收工作一般由Go运行时系统全权负责。不过,Go也允许我们对此项工作进行干预。 原生的并发编程:
拥有自己的并发编程模型,其主要组成部分有goroutine(也课称为Go例程)和channel(也可称为通道)。
另外,还拥有一个特殊的关键字go。 完善的构建工具:
它自带了很多强大的命令和工具,通过他们,可以很轻松完成Go程序的获取,编译,测试,安装,运行,分析等一系列工作。 多编程范式:
Go支持函数式编程。函数类型为第一等类型,可以方便地传递和赋值。
此外,它还支持面向对象编程,有接口类型于实现类型的概念,但使用嵌入替代了继承。 代码风格强制统一:
Go安装包中有一个自己的代码格式化工具,可以用来统一程序的编码风格。 高效的编程和运行:
Go简介,直接的语法使我们可以快速编写程序。加之它更强大的运行时系统,程序可以充分利用计算环境飞快运行。 丰富的标准库:
Go是通用的编程语言,其标准库中有很多开箱即用的API。尤其是在编写者如系统级程序,Web程序和分布式程序时,我们几乎无需依赖第三方库。
三.博主分享学习Golang 的途径
无论是学习Golang还是其它技术,博主认为获取学习途径的方法有很多种,每个人都有自己的学习方法:
(1)去Golang的官方网站获取第一手学习资料;
(2)去网上找一些博主的博客进行学习,因为有的博主比你先接触该语言,会有关于该语言的一些心得体会;
(3)去网上搜索一些电子书籍,有经济实例的话建议大家购买正版授权的书籍,电子书估计你下载后也懒得看,博主推荐两本Golang相关的书<<Go语言程序设计>>和<<Go并发编程实战>>,这两本书我都买了,关注我的博客会发现我后续会分享的很多资料都摘自这两位大佬的内容;
(4)网上找一些免费的视频学习,比如去"某宝"搜搜看;
(5)报个培训班学习,博主并不推荐,因为大多数机构都是讲的入门级别的知识点,就讲解一些语法的使用,然后在Github上找了一些项目改动后教给你,在生产环境中压根就用不上,很难学到Golang的精髓,不仅浪费你的时间还非常耗费你的钱。
初识Golang编程语言的更多相关文章
- 初识golang
golang是一门编译型的语言. 问题1:int和*int有啥区别?和c语言中有区别么? var a int = 32 var b *int = &a fmt.Println("ty ...
- 初识 Swift编程语言(中文版)
前言 今天Apple公布了新的编程语言Swift.也提供了一本将近400页的 The Swift Programming Language(Swift编程语言). 尽管我没有开发人员账号.没法实际上机 ...
- golang打造基于mail的提醒服务
初识golang 逻辑如下: 程序开启http服务器接收请求,且每隔20秒查询一次表auto_backup中flag为0的值,如果有查到且计划执行时间小于当前时间,则将表to_do的数据抓出来,通过邮 ...
- golang开发集训营
初识golang Go与VScode开发工具 Golang开门见山
- 人生要golang
第一篇 : 初识golang 第二篇 : 下载及安装 未完待续 ............................................
- [易学易懂系列|golang语言|零基础|快速入门|(一)]
golang编程语言,是google推出的一门语言. 主要应用在系统编程和高性能服务器编程,有广大的市场前景,目前整个生态也越来越强大,未来可能在企业应用和人工智能等领域占有越来越重要的地位. 本文章 ...
- 数据结构和算法(Golang实现)(1)简单入门Golang-前言
数据结构和算法在计算机科学里,有非常重要的地位.此系列文章尝试使用 Golang 编程语言来实现各种数据结构和算法,并且适当进行算法分析. 我们会先简单学习一下Golang,然后进入计算机程序世界的第 ...
- 周末IT入门锦鲤
周末总结 第一小节 typora软件 是目前最火的文本编辑器 下载安装 路径尽量不要安装C盘,安装其他盘路径尽量简单方便后续查找使用. 文件路径 路径:计算机上一个文件资源的坐标,C:\XX文件\a. ...
- golang基础之初识
golang 简介 很久以前,有一个IT公司,这公司有个传统,允许员工拥有20%自由时间来开发实验性项目.在2007的某一天,公司的几个大牛,正在用c++开发一些比较繁琐但是核心的工作,主要包括庞大的 ...
随机推荐
- 如何确定Redis集群中各个节点的主从关系
1.首先通过命令(以192.168.203.141为例,-c代表集群的意思) ./redis-cli -h 192.168.203.141 -p 8001 -c 2.然后在输入 cluster no ...
- spinner的使用
item.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:an ...
- 如何让图片在div里左右居中,上下居中
如何让图片在div里左右居中,上下居中 转载▼ 1.要想让图片左右对齐,我们可以在div里写入"style:text-align:center;"代码来实现. 2.要想使图片居 ...
- 【高软作业3】:原型化系统 DevTools
原型化系统:DevTools 密码:lcx 1. 这是一个什么样的平台? DevTools,可译为:开发者工具库.初衷是聚集各类开发工具,方便开发者获取:此外,大家可以分享自己的工具库与工 ...
- 嵊州普及Day6T1
题意:有一个矩形,由正负整数构成.一个位子的魅力值为相邻的格子,若与邻格同号则减去绝对值,若异号则加上绝对值. 思路:一个格子一个格子计算即可,没什么好说的. 见代码: #include<ios ...
- python-python基础4
本章内容: 装饰器 生成器 迭代器 json & pickle 模块 软件目录结构规范 一.装饰器 装饰器 在不改动函数代码的基础上无限制扩展函数功能的一种机制,本质上讲,装饰器是一个返回函数 ...
- 怎样快速高效的定义Django的序列化器
1.使用Serializer方法自己创建一个序列化器 先写一个简单的例子 class BookInfoSerializer(serializers.Serializer): ""& ...
- layerui上传文件
参考: http://www.layui.com/doc/modules/upload.html <1> 文件上传(以下函数必须要在js文件加载时执行) upload.render({ e ...
- node批量修改文件名称
let fs = require('fs');//引用文件系统模块 let PATH = `./app_zijietiaodong/`;//当前文件夹 let ext = { readFileList ...
- Python测试进阶——(7)动手编写Bash脚本启动Python监控程序并传递PID
如下: #./cf_workload_functions.sh function timestamp(){ # get current timestamp sec=`date +%s` nanosec ...