Go语言

news2024/11/15 21:42:33

文章目录

  • Go语言
    • 特点
    • 应用领域
    • Go语言和Java语言的对比
      • Java
      • Go
    • 总结
  • Go语言安装
    • 配置环境变量
    • Hello World

Go语言

Go语言全称Golanguage,Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译并发型语言。于2009年首次发布

官网

特点

  1. 简单易学:Go语言语法简洁明了,易于学习和使用。
  2. 高性能:Go语言编译为机器码,执行速度接近C/C++,适用于高性能需求的应用
  3. 内置并发支持:通过协程(goroutine)通道(channel),Go语言内置了强大的并发处理能力,非常适合多核处理和网络服务
  4. 垃圾回收:自动内存管理
  5. 跨平台:编译后的二进制文件可以在不同的操作系统上运行
  6. 强大的标准库:Go的标准库非常强大,涵盖了网络编程、文件处理、加密、压缩等常见任务

应用领域

  1. 网络服务器:如Web服务器、Api服务器等。Go语言的并发处理能力和高性能非常适合开发高并发、高性能的服务器
  2. 微服务架构:Go语言的快速编译、低内存占用和高效执行使其成为微服务的理想选择
  3. 云计算和分布式系统:许多云计算平台和分布式系统,如Kubernetes、Docker、Etcd等,都是Go语言编写的
  4. DevOps工具:很多DevOps工具和平台,如Prometheus、Grafana、Terraform等,使用Go语言开发。
  5. 数据库和缓存系统:一些高性能数据库和缓存系统也采用Go语言编写,如InfluxDB、CockroachDB等。

Go语言和Java语言的对比

这里因为我本身是学习Java出身的,因为工作的原因,要转Go语言,所以进行这二者的比较

Java

优势

  • 成熟和稳定:自1995年发布以来,已经发展三十余年,有非常成熟的生态系统和广泛的社区支持以及大量的第三方库的支持
  • 跨平台性:一次编写,到处运行,前提需要系统支持Jvm
  • 丰富的企业级工具和框架:例如Spring、Java EE等
  • 性能:JIT(Just-In-Time)编译和高度优化的JVM,以及垃圾回收
  • 丰富的安全机制:Java内置了强大的安全机制,包括类加载器、字节码验证和安全管理器,保证了应用程序的安全性。

劣势

  • 复杂性和冗长的语法:开发需要编写大量编码,即使是简单的项目应用
  • 启动和内存开销:启动时间长,用过SpringBoot的同学都知道,Java项目启动的时间真的很长,占用内存较高
  • 并发模型复杂:虽然提供丰富的并发处理机制,但相对复杂,容易出现死锁、竞争等问题

Go

优势

  • 简洁高效:Go语言设计简洁,语法清晰,开发人员可以快速编写,编译速度快,接近解释型语言的速度
  • 高效的并发处理:Go内置了轻量级的并发机制(goroutine和channel),使得并发编程变的简单而高效,适合高并发应用;Go的调度器可以高效的管理成千上万个goroutine
  • 内存管理:Go拥有高效的垃圾回收机制和内存管理,减少了内存泄漏和碎片化风险
  • 静态二进制文件:Go编译为静态链接的二进制文件,无需依赖外部库,方便部署和分发,这种特性非常适合微服务和云原生应用
  • 跨平台:Go支持跨平台编译,可以方便的生成不同平台的可执行文件

劣势

  • 生态不够成熟
  • 缺乏泛型(在Go 1.18之前):在1.18前不支持,尽管Go 1.18引入了泛型,但其使用和优化还有待社区的广泛应用和检验。
  • 功能较少的标准库:尽管Go的标准库已经很强大,但某些高级功能和企业级功能仍需要依赖第三方库或自行实现。

总结

  • Java:适合需要高可靠性、跨平台、复杂企业级应用的开发。其成熟的生态系统和强大的企业级工具链使得开发大型项目变得更加高效,但其复杂性和高内存开销可能在某些场景下不太合适。
  • Go:适合需要高性能、高并发、快速开发和部署的应用,如微服务、网络服务器和云原生应用。其简洁的语法和高效的并发模型使得开发速度快且维护成本低,但生态系统相对较新,在某些复杂功能上还不及Java。

从我个人角度而言,我觉得Java语言的生态是任何语言的比较不了的,要说跨平台性,出现了Docker,跨平台不再是一个难题,但是生态系统这一块,Java一定是最强的

Go语言安装

官网下载:https://go.dev/dl/

Go语言的下载安装几乎是傻瓜式安装,一路next即可

安装完后我们在cmd中输入命令go version,查看是否安装成功

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果无法显示,等一会即可,或者配置完系统环境变量再试一下

配置环境变量

Go语言的环境变量主要配置GOROOTGOPATH

GOROOT是环境变量,GOPATH是工作目录

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里的变量值一定是我们刚才安装Go语言的目录

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

到这里我们的GOROOT环境变量已经配置完了

GOPATH工作目录的配置

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里的变量值的文件夹是自己创建的,名字可以随意起,但是注意不要有中文路径,变量名一定是GOPATH

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注意,在我们的用户变量的地方也一定要进行配置,否则默认在C盘,影响我们电脑的性能

随后,我们在cmd中输入go env查看我们的配置是否成功

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Hello World

这里我们推荐使用的是GoLand开发,GoLand是jetbrains全家桶的一份子,和我们所熟知的IDEA、PyCharm一家的

首先,我们用GoLand打开一个文件夹

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

进来后我们创建一个go文件,这里的一切都跟IDEA、PyCharm的使用一样

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们创建一个demo1.go文件,并写入我们的代码

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

package main

import "fmt"

func main() {
    fmt.Println("hello go!!!")
}

然后我们在终端运行go run demo1.go命令即可成功

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

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

相关文章

数组Array

数组的基本用法 概念 数组是有序元素序列。如果将若干个数据类型相同的变量的集合命名,那么该命名就是数组名。数组元素的重点是类型相同并且连续在内存中存放的数据。 定义格式 存储类型 数据类型 数组名 [ 元素个数 ] ; 例如: &#x…

AHB与APB总线介绍

1 什么是AHB、APB? AHB(Advanced High-performance Bus)高速总线,接高速master,APB(Advanced Peripheral Bus)外设总线,用来接低速slave,一个master可以有多个slave,AH…

若依微服务实现分布式事务

一、基本介绍 1、什么是分布式事务 指一次大的操作由不同的小操作组成的,这些小的操作分布在不同的服务器上,分布式事务需要保证这些小操作要么全部成功,要么全部失败。从本质上来说,分布式事务就是为了保证不同数据库的数据一致…

2.1 数据类型-常量-变量(整型-浮点-字符)

目录 1 数据类型 1.1 关键字 2 常量 3 变量 3.1 命名规则 4 整形数据 4.1 符号常量 4.2 整型变量 5 浮点型数据 5.1 浮点型常量 5.2 浮点型变量 6 字符型数据 6.1 字符型常量 转义字符 6.2 字符数据在内存中的存储形式及其使用方法 6.3 ASCII码表 7 字符串型常…

homebrew安装mysql的一些问题

本文目录 一、Homebrew镜像安装二、mac安装mysql2.1、修改mysql密码 本文基于mac环境下进行的安装 一、Homebrew镜像安装 Homebrew国内如何自动安装,运行命令/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 会…

2024年,游戏行业还值得进入吗?

来自知乎问题“2024年,游戏行业还值得进入吗?”的回答。 ——原问题描述:从超小厂执行策划做起,未来有前途吗? 展望2024年,国内外的游戏市场环境或将变得更加复杂,曾经那个水大鱼大的时代过去了…

ArduPilot开源飞控之MAVProxy深入研读系列 - 2蜂群链路

ArduPilot开源飞控之MAVProxy深入研读系列 - 2蜂群链路 1. 源由2. 蜂群链路2.1 拓扑结构2.2 设备标识2.3 命令列表 3. 蜂群应用4. 总结技术进步未来挑战 5. 参考资料 1. 源由 MAVProxy的一个关键功能是它能够通过UDP将来自无人机的消息转发到网络上的多个其他设备上的地面站软…

AI绘画图生图有什么用?

随着AI渗透到我们生活中的各个角落,AI绘画图生图的出现,更是在艺术领域引起了广泛的关注和讨论。那么,AI绘画图生图究竟有什么作用呢? 首先,AI绘画图生图能够极大地提高创作效率。传统的绘画过程需要艺术家们花费大量的时间和精力…

uni-app实现页面之间的跳转传参(八)

界面之间的参数传递在 开发中经常会用到,这节主要将一下uni-app开发应用是的传参情况。如下图所示,我的一级界面将点检分成三类:日点检、周点检和年保养;在点击相应的会导航到相应的功能。 在uni-app中常用的方法有uni.navigateTo(OBJECT)、uni.redirectTo(OBJECT);简单的…

一文带你学会如何部署个人博客到云服务器,并进行域名备案与解析!

哈喽,大家好呀!这里是码农后端。之前我给大家介绍了如何快速注册一个自己的域名,并创建一台自己的阿里云ECS云服务器。本篇将介绍如何将个人博客部署到云服务器,并进行域名备案与解析。 1、域名备案 注册了域名并购买了云服务器之…

牛客循环5.27

1006 错误代码 不知道原因,有大佬解答一下吗 ac代码 1007 错误代码 ac代码

AI音乐神器Suno V3.5进化全解析:功能升级吊炸天,让音乐创作更简单!

前言 目前,suno的v3.5版本已经向Pro和Premier会员开放,从更新当天到现在我已经使用了近2000积分,接下来我将v3.5的使用体验和与旧版本v3进行比较,让大家更直观的感受到v3.5的强大。 其中一个最屌的功能,我放在最后介绍…

linux下cp和mv命令显示进度条

1.查看当前系统下coreutils工具包的版本号: [rootk8s-master ~]# rpm -qa | grep -w coreutils coreutils-8.22-24.el7_9.2.x86_64当前版本为8.22。 因为cp 和 mv 命令由 coreutils 软件包提供,所以需要重新下载 coreutils 软件包配置补丁 2.下载core…

创意学习剪辑利器:一键添加动图水印,轻松提升视频专业度与创意新境界!

在数字化时代,视频已成为我们生活中不可或缺的一部分。无论是学习分享、工作展示还是生活记录,视频都以其直观、生动的形式,赢得了广大用户的喜爱。然而,如何在众多的视频中脱颖而出,展现出自己的专业度和创意&#xf…

CI/CD:持续集成/持续部署

1. 安装docker、docker-compose # 安装Docker yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sed -i sdownload.docker.commirrors.aliyun.com/docker-ce /…

【AD21】原理图PDF文件的输出

原理图PDF文件可以共享给团队成员,用于设计审核、讨论和协同工作。 菜单栏中点击文件->智能PDF。 在弹出的界面点击Next,勾选当前项目,修改文件名,避免与制造装备图PDF文件重名将其覆盖,点击Next。 只输出原理图…

谷歌AI搜索功能“翻车”,用户体验引担忧

近期,谷歌对其搜索引擎进行重大更新,推出了全新AI搜索功能“AI Overview”,试图通过人工智能技术提供更智能便捷的搜索体验,并追赶微软和OpenAI等竞争对手。然而事与愿违,这项备受期待的功能上线后却频频出错&#xff…

实现一个自定义 hook,用于强制刷新当前组件

写在前面 在 react 中,如果 state 数据发生变化,我们知道,会重新渲染该组件。 但是这个前提是我们需要依赖 state 数据的变化,那比如我们并不想定义 state,又或者说我们的操作不能引起 state 的变化,此时…

如何把学浪的视频保存到手机

你是不是还在为无法将学浪的视频保存到手机而烦恼?别担心,接下来我将为大家分享一个非常实用的方法,让你轻松实现这一目标! 下载学浪的工具我已经打包好了,有需要的自己下载一下 学浪下载工具打包链接:百…

【408真题】2009-18

“接”是针对题目进行必要的分析,比较简略; “化”是对题目中所涉及到的知识点进行详细解释; “发”是对此题型的解题套路总结,并结合历年真题或者典型例题进行运用。 涉及到的知识全部来源于王道各科教材(2025版&…