什么是Go语言?

news2024/11/19 6:41:20

本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注!

作者|慕课网精英讲师 Codey

1. Go 语言的出身

Go(又称 golang)是 Google 开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。

罗伯特·格里泽默(Robert Griesemer),罗布·派克(Rob Pike)及肯·汤普逊(Ken Thompson)于 2007 年 9 月开始设计 Go,后来 Ian Lance Taylor、Russ Cox 加入项目。Go 是基于 Inferno 操作系统所开发的,于 2009 年 11 月正式宣布推出,成为开放源代码项目,并在 Linux 及 Mac OS X 平台上进行了实现,后来追加了 Windows 系统下的实现。在 2016 年,Go 被软件评价公司 TIOBE 选为“TIOBE 2016 年最佳语言”。 目前,Go 已经开始每半年发布一个二级版本(即从 a.x 升级到 a.y)。

 2. Go 语言的特点

  • Go 语言可以直接编译成主流操作系统支持的可执行文件,部署服务只需要扔一个可执行文件上去直接运行就好了;
  • Go 语言有不输于动态语言的丰富静态库。归功于强大的官方团队和社区,目前 Go 语言几乎什么都可以开发;
  • Go 语言天生支持并发,这是个近乎无敌的设定;
  • Go 语言具有自动垃圾回收机制;
  • Go 语言简单易学,因为它几乎支持常用的语言的所有特性:继承、封装等等;
  • Go 语言内嵌支持 C 语言,你甚至可以直接在 Go 语言里面写 C 语言代码;
  • Go 语言支持交叉编译,你可以在 Windows 环境中编译任何平台的 Go 可执行程序。但是需要注意的是,如果你在 Go 程序中写了 C 语言,你就不能只用交叉编译的特性了,所谓鱼和熊掌不可兼得嘛。

3. Go 语言的使用场景

  • 服务器编程;
  • 分布式系统,数据库代理器;
  • 网络编程,这一块目前应用最广,包括 Web 应用、API 应用、下载应用;
  • 内存数据库,前一段时间 Google 开发的 groupcache,couchbase 的部分组件;
  • 云平台,目前国外很多云平台在采用 Go 开发,CloudFoundy 的部分组件,前 VMare 的技术总监自己出来搞的apcera 云平台;
  • 区块链技术研发。

4. Go 语言开发的经典项目

  • Docker:基于 lxc 的一个虚拟打包工具,能够实现 PAAS 平台的组建。
  • Hyperledger fabric:市面上最流行的两大区块链平台之一。

5. 与其他开发语言对比

Go 语言为什么能在现有的成熟语言中脱颖而出呢?这要归功于它比 Java 还简洁的语法,接近 C 语言的编译执行速度,甚至还有不亚于脚本语言的开发速度。在目前最要求效率的当下,它无疑会是一匹黑马。但是和其它语言比起来劣势也很明显,因为它出现的时间短,学习资料少,第三方支持库虽然多,但是比起 Java 以及 C 语言还是远远不够。Go 语言不支持泛型,对于学习 Java 的开发人员来说一开始会很不适应。

6. 为什么要学习 Go 语言

综上所述, Go 语言出身名门,血统纯正。从学习难度上来说语法简单,功能强大。从可扩展性上来说第三方库众多,标准库强大稳定。性能上更是拥有无可挑剔的自动调度线程。Go 语言完美地协调了运行效率和开发效率之间的关系。而且 Go 语言目前已经广泛应用于虚拟容器、区块链等传统的和高精尖的产业中,将来会有巨大的前景。不管是国内还是国外,对 Go 语言的程序员的需求只会越来越多。

7. Go 语言的代码

接下来我们来看看 Go 语言怎么用代码来和你 say hello。

package main

import "fmt"

func main() {
    fmt.Println("Hello Codey !")
}
代码块1234567

上述代码的输出结果就是:Hello Codey !

8. 小结

Go 语言目前的用途主要是在服务器和区块链上。但是它的功能不止于此,需要我们多去开发多去使用,使得 Go 语言的生态更加完整,更加强大。

欢迎关注「慕课网」,发现更多IT圈优质内容,分享干货知识,帮助你成为更好的程序员!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/194924.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenMMLab AI实战课笔记-第1节课

1. 第一节课(课程链接) 1.1 计算机视觉任务 计算机视觉主要实现以下目标: 分类目标检测分割:语义分割、实例分割 (对像素进行精确分类, 像素粒度或细粒度)关键点检测 1.2 OpenMMLab框架 框架选择:PyTorchOpenMML…

多级缓存案例说明

多级缓存案例说明1.安装MySQL1.1.准备目录1.2.运行命令1.3.修改配置1.4.重启2.导入SQL3.创建Demo工程3.1.分页查询商品3.2.新增商品3.3.修改商品3.4.修改库存3.5.删除商品3.6.根据id查询商品3.7.根据id查询库存3.8.启动4.创建商品查询页面4.1.运行nginx服务4.2.反向代理为了演示…

CSS网格教程:网格布局模块/网格容器/网格项目

目录 CSS 网格布局模块 网格布局 浏览器支持 网格元素 实例 Display 属性 实例 实例 网格列(Grid Columns) 网格行(Grid Rows) 网格间隙(Grid Gaps) 实例 实例 实例 实例 网格行&#xff0…

java基础面试题1

目录 Java语言有哪些特点 Java都有那些开发平台? Jdk和Jre和JVM的区别【重要】 面向对象和面向过程的区别 什么是数据结构?Java的数据结构有哪些? 1.数组: 2.队列 Queue 3.链表 Linked List 4.栈Stack 5.树Tree 什么是…

13薪|初级测试工程师

"众推职聘”以交付结果为宗旨的全流程化招聘服务平台!今日招聘信息↓【工作内容】1、制定、编写软件测试方案与计划2、根据需求文档编写测试用例,组织测试用例评审3、按时完成软件测试工作任务,执行测试,跟踪缺陷状态&#x…

第十四章 集合(集合框架体系、List)

一、集合框架体系 (1)可以动态保存任意多个对象 (2)提供了一系列方便的操作对象的方法:add、remove、set、get等 集合框架体系: 二、Collection 1. Collection 接口常用方法 (1)add…

学习QCustomPlot【3】库结构

文章目录一、前言二、库结构三、图层3.1、坐标轴层一、前言 学习一个陌生的库,我们首先要明确它有什么用,可以结合库官方examples,学习怎么简单的用。 但是如果要对该库有一个全面的认识,还是需要了解它的开发思路和库结构。 例…

2、计算机视觉之图像分类算法基础(笔记)

什么是图像分类? 识别图像所表示内容的任务称为图像分类。我们可以对图像分类模型进行训练以识别各类图像。例如,您可以训练模型来识别表示三种不同类型动物的照片:兔子、仓鼠和狗。 下面几个神经网络重点关注准确率的问题 上图只是训练方式…

java—for结构

for循环语句1.1循环结构循环结构的组成:初始化语句条件判断语句循环体语句条件控制语句循环结构对应的语法:初始化语句条件判断语句循环体语句条件控制语句1.2for循环语句格式//格式 for (初始化语句;条件判断语句;条件控制语句){ 循环体语句; }执行流程…

记录每日LeetCode 环形链表II Java实现

题目描述: 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环&#xf…

06_PyTorch 模型训练[学习率与优化器基类]

当数据、模型和损失函数确定,任务的数学模型就已经确定,接着就要选择一个合适 的优化器(Optimizer)对该模型进行优化。 PyTorch 中所有的优化器(如:optim.Adadelta、optim.SGD、optim.RMSprop 等)均是 Optimizer 的子类,Optimizer…

STM32串口收发、串口中断、串口波特率的理解、普通IO模拟串口

STM32串口收发、串口中断一 、串口中断二、使用DMA三、串口波特率的理解开发环境:stm32cubuMax Keil5一 、串口中断 1.当收到消息的时候,立即进入控制程序,实现通过串口控制硬件; 2.在stm32cubeMax中配置串口 配置全局中断 2.在main函数中…

Django项目搭建_修改目录结构

1.安装环境 使用conda下载Django项目需要的依赖 pip install django2.2.6 -i https://pypi.douban.com/simple/pip install djangorestframework -i https://pypi.douban.com/simple/pip install PymySQL -i https://pypi.douban.com/simple/pip install Pillow -i https://p…

CSDN为什么会发展社区?看看官方怎么说

文章目录🌟 课前小差🌟 23年可兼收名利?🌟 博客之星🌟 红包活动🌟 相聚线下🌟 妙笔生花🌟 原力计划🌟 个人定位🌟 为什么要发展社区?&#x1f31f…

100种思维模型之决策树思维模型-004

选择决定了现状和未来,在生活中有很多选择的机会,但是真的选择对了吗?在该读书的年纪,却想着长大真好。在该工作奋斗的年纪,却后悔自己年轻时没好好读书,而悔恨。其实不是我们没有选择的权利,而…

2023年情人节浪漫表白神器(附源码下载)

2023年情人节将要来临,作为一名程序猿也不要落后了,快来用代码展示你的爱吧!下面给大家准备了6款情人节表白神器,把说不出口的话,放到代码里送给你爱的人吧!祝大家表白成功,俘获美人心&#xff…

Spring Boot集成 Swagger2 展现在线接口文档

一:swagger是什么? Swagger是一款RESTFUL接口的文档在线自动生成功能测试功能软件。Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务。目标是使客户端和文件系统作为服务器以同样的速度来更新文件的方法,参数和模型紧…

浅析云边端协同框架下的“AI+”视频融合能力以及场景应用

随着边缘侧与终端侧业务的规模化落地部署,很多新的业务场景已经逐渐不满足于中心化的云端计算模式。尤其是在AI人工智能技术进一步落地应用的趋势下,基于云边端深度融合与协同的“AI”模式,在满足用户对视频服务的智能识别需求上,…

centos环境docker安装nexus3搭建maven私有仓库

拉取最新nexus3镜像docker pull nexus3创建宿主机上的映射文件目录,并授权[root1-0002 ~]# mkdir -p /mnt/lckj/nexus/data [root1-0002 ~]# chmod -R 777 /mnt/lckj/nexus/data运行redis,生成相应容器-d 后台启动[root1-0002 ~]# docker run -d --name …

Go并发读取string的Panic问题

上问题,先看下panic的函数栈信息,说现实strings.Count()发生了panic,来看下函数 第一个参数是字符串s,再结合函数栈信息的十六进制,0x0、0x9表示字符串s的地址和长度 这里来看一下string的底层数据结构:…