当前位置: 首页 > news >正文

x-cmd pkg | go - Google 开发的开源编程语言

目录

    • 简介
    • 首次用户
    • 技术特点
    • 竞品分析
      • 编译型语言
      • 解释型语言
      • Java
      • WebAssebmly
    • 进一步阅读

简介

Go 语言(或 Golang)是 Google 开发的开源编程语言,诞生于 2006 年。其设计目标是“兼具 Python 等动态语言的开发速度和 C/C++ 等编译型语言的性能与安全性”。语法接近 C 语言,但对于变量的声明有所不同。支持垃圾回收功能。

  1. 原生支持并发:在多核并发上拥有原生的设计优势,无须第三方库、开发者的编程技巧和开发经验。
  2. 代码风格统一:代码的格式化不再是开发者的个人喜好,而是一种强制性的规范。其有统一的一套格式化工具 go fmt,保证了不同开发者编写的代码风格统一。
  3. 语法简洁:语言风格类似于 C 语言,但是去掉了很多 C 语言中很少使用的语法,如继承、重载、泛型、异常、构造函数和操作符重载等。这些语法的去除,使得 Go 语言的语法更加简洁,易于学习和使用。
  4. 自动垃圾回收:开发者不需要关心内存的分配和回收,大大降低了开发者的负担。

首次用户

  1. 使用 x go 即可自动下载并使用

    • 在终端运行 eval "$(curl https://get.x-cmd.com)" 即可完成 x 命令安装, 详情参考 x-cmd 官网
  2. x-cmd 提供1分钟教程,其中包含了 Go 的基本用法,可以帮你快速上手 Go 。

  3. 使用示例:

    go-1min-cn

    # 查看 go 的环境信息
    x go env GOPROXY GOROOT# 查看 go package 的文档
    x go doc fmt.Println# 调整代码格式
    x go fmt ./hello.go# 编译 go 代码生成可执行的二进制文件
    x go build ./hello.go# 编译并运行 go 代码
    x go run ./hello.go
    

技术特点

  1. 强制规范的代码风格
    • 命名大小写有严格的要求,例如,npm package ID,在 Go 内,一率采用严格驼峰风格,统一为 NpmPackageID,而不是 NPMPackgeID 或 NpmPackageID。
    • 代码文件编译前强制以官方指定的统一风格进行格式化:从结尾空行,到行尾去空格等等,不再是个选择,在编译前强制执行。
    • 这些举措虽然有争议,但客观上减少项目团队关于风格统一的争吵(某种程度,Go 语言开发团队扛起了原本由项目管理者所承担的怨念),利于团队聚集,并快速展开合作。
  2. 简单且开箱即用的包管理、代码测试,格式化、构建、运行工具
    • 包管理(go get):可以根据要求和实际情况从互联网上下载或更新指定的代码包及其依赖包,并对它们进行编译和安装。
    • 代码测试(go test):用于对 Go 语言编写的程序进行测试。
    • 代码格式化(go fmt):用于格式化 Go 语言的源代码文件。
    • 代码构建(go build): 用于编译指定的源代码文件或代码包及其依赖包。
    • 包运行(go run):用于编译并运行指定的源代码文件或代码包。
  3. 并发机制:以 go routine 为特色的并发机制,非常容易理解,同时也不需要引入额外复杂的开发模式。
  4. 交叉编译自:带的编译器能够轻松交叉编译出能在适合在其它系统和硬件平台运行的二进制执行文件
  5. WebAssembly:Go 是较早在其编译工具链直接提供 WebAssembly 作为编译目标的语言,其高效和编译工具的高效简单使其在 WASM 领域有着一定的竞争优势

由于上述的特点,Go 在最近十年广泛应用于 IO 效率要求较高的网络应用、云计算和分布式网络相关的工具和项目。

竞品分析

编译型语言

Rust,Zig,这类新型的编译型开发语言,经常拿来与 Go 进行对比。

  1. 运行效率上,在一些场景 Go 可能会稍逊。
  2. Go 为了保证编译速度,跳过了编译时的部分优化。
  3. Go 自带 GC,不需要用户自行管理内存,来简化编程模型;客观也会因为 GC 而导致在响应时间会有所影响。
  4. 对于高吞吐量,高并发的高负荷的复杂程序,Go 在效率上的差距并不明显;相反因为 Go 的开发模型往往更简单,从而提升了项目的可维护性。
  5. 当然,对于追求极致性能的团队,在需求相对稳定的项目,rust 和 zig 以及 传统的 C/C++ 自然是更佳的选择
  6. 由于 Go 自带 GC,编译出的 WASM 尺寸,相比 Rust 和 C/C++ 更大。

解释型语言

如 Node/Deno/Bun,Python 等,这类语言的优势在于开发效率,但在运行效率上,相比编译型语言,有一定的劣势。

  1. 虽然上述编译语言都引入了语言级别的 异步,但计算效率还是编译型语言的优势。
  2. 虽然非编译型能够快速部署(尤其是在 x-cmd、nvm等工具的加持下),但在没有安装该语言的情况下,语言的安装包压缩包至少在20MB以上。而 Go 的项目二进制压缩包包很少超过15MB。一般网络型的应用都在 5MB左右,甚至更小。
  3. 启动时间,相较非编译型语言,编译型语言 Go 有很大的优势。

Java

  1. 在 Go 问世之前,Java 是很多分布网络项目的开发语言。但 Go 问世后马上因为其在 goroutine 上的优势(高效易用)马上变成一众网络工具的首选。虽然 Java 对异步的支持很早( NIO )也很丰富,最近 JDK 19 的虚拟线程也相当惊艳。
  2. Java 的启动时间是一直是一大诟病,虽然也在优化。另外,最近 Java 也在 GraalVM 方面做更多的编译尝试。
  3. Java 的 垃圾收集器选择更多,开发者可以根据项目特点进行选择和配置。
  4. Java 拥有一个极其庞大和成熟的开发者生态。

WebAssebmly

  1. 最近两年,WebAssembly后端运行时和各种 WASM语言(AssemblyJS)不断问世。最近 来自中国深圳团队的 Moonbit 更是引起了热议。
  2. 利用 WASM,选择一种易于使用的语言,配合一个强大的 WASM 编译器,既有接近编译型的效率,又有解释型语言的灵活和开发效率的优势。
  3. 我们认为,在技术上,WASM 与 Java 字节码,以及 Go 底层抽象机制一样,其唯一的优势是拥有更高工业界共识,并以存在于主流浏览器当中。得益于开放的技术氛围,在足够工程投入前提下,某项技术取得完全压倒的优势可能不大。因此,技术选型的关键是在于,各个方案的取舍以及运行场景的要求。原生二进制部署的确没有 WASM 当前在后台灵活部署的优势,但其效率上的优势,加上后台集群的同构性,可谓是瑕不掩瑜。而 Go 在没有对性能做出明显妥协的前提下,大大的降低编译语言使用(开发,构建,分发)的难度,在以团队开发为主要模式的后台项目领域中,其优势非常稳固。

进一步阅读

  • 官方入门教程:Tutorial: Get started with Go - The Go Programming Language - 通过该文章可以快速上手 Go 语言。
  • 官方仓库 GitHub - golang/go: The Go programming language - Go 的源代码托管在 GitHub,你可以在这里找到最新版本的 Go 和参与社区贡献。
  • 前景 · Go 语言中文文档 - 你也可以通过阅读这篇文章,进一步的了解 Go 语言的前景。

相关文章:

x-cmd pkg | go - Google 开发的开源编程语言

目录 简介首次用户技术特点竞品分析编译型语言解释型语言JavaWebAssebmly 进一步阅读 简介 Go 语言(或 Golang)是 Google 开发的开源编程语言,诞生于 2006 年。其设计目标是“兼具 Python 等动态语言的开发速度和 C/C 等编译型语言的性能与安…...

32个Java面试必考点-09(下)MySQL调优与最佳实践

详解 MySQL 下面来学习互联网行业使用最为广泛的关系型数据库 MySQL,它的知识点结构图如下所示。 常用 SQL 语句 对于手写常用 SQL 语句,没有什么特殊的技巧,根据所列的语句类型多做一些练习就好。 数据类型 要知道 MySQL 都提供哪些基本的…...

优思学院|精益管理如何判定哪些活动是增值或非增值?

“时间就是金钱”——这句老话我们都耳熟能详。但在工作中,我们真正从事的、对组织增加价值的活动有多少呢?我们常常认为自己的每一项任务都是维持运营的关键。然而,当我们从精益管理的视角进行分析,可能会惊讶地发现,…...

详解操作系统各章大题汇总(死锁资源分配+银行家+进程的PV操作+实时调度+逻辑地址->物理地址+页面置换算法+磁盘调度算法)

文章目录 第三章:死锁资源分配图例一例二 第三章:银行家算法第四章:进程的同步与互斥做题步骤PV操作的代码小心容易和读者写者混 1.交通问题(类似读者写者)分析代码 2.缓冲区问题(第二个缓冲区是复制缓冲区…...

用ASM HEMT模型提取GaN器件的参数

标题:Physics-Based Multi-Bias RF Large-Signal GaNHEMT Modeling and Parameter Extraction Flow (JEDS 17年) 模型描述 该模型的核心是对表面势(ψ)及其随施加的栅极电压(Vg)和漏极电压(Vd&#xff09…...

github ssh ssh-keygen

生成和使用 SSH 密钥对是一种安全的身份验证方式,用于在你的本地系统和 GitHub 之间进行身份验证。以下是在 GitHub 上生成和使用 SSH 密钥对的基本步骤: 1. 生成 SSH 密钥对 在命令行中执行以下命令来生成 SSH 密钥对: ssh-keygen -C &q…...

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例5-2 JavaScript 获取HTML元素对象

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>JavaScript 获取 HTML 元素对象</title> </head><body> <input type"text" value"admin" /> <br> <input …...

微信实现如何批量自动添加好友?

在快节奏的社交环境中&#xff0c;我们常常需要扩展我们的社交圈子并与更多人建立联系。那么&#xff0c;有没有一种方法可以帮助我们更高效地批量添加微信好友呢&#xff1f;答案是肯定的&#xff01;借助微信管理系统&#xff0c;你将能够轻松实现这一目标。 首先&#xff0…...

vue3+echarts绘制某省区县地图

vue3echarts绘制某省区县地图 工作中经常需要画各种各样的图&#xff0c;echarts是使用最多的工具&#xff0c;接近春节&#xff0c;想把之前画的echarts图做一个整合&#xff0c;方便同事和自己随时使用&#xff0c;因此用vue3专门写了个web项目&#xff0c;考虑之后不断完善…...

MyBatis详解(2)-- mybatis配置文件

MyBatis详解&#xff08;2&#xff09; mybatis配置文件 mybatis配置文件 1.构建SqlSessionFactory的依据。 2.MyBatis最为核心的内容&#xff0c;对MyBatis的使用影响很大。 3.配置文件的层次顺序不能颠倒&#xff0c;一旦颠倒会出现异常。 < c o n f i g u r a t i o n…...

蓝桥杯备战——8.DS1302时钟芯片

1.分析原理图 由上图可以看到&#xff0c;芯片的时钟引脚SCK接到了P17,数据输出输入引脚IO接到P23,复位引脚RST接到P13。 2.查阅DS1302芯片手册 具体细节还需自行翻阅手册&#xff0c;我只截出重点部分 总结&#xff1a;数据在上升沿写出&#xff0c;下降沿读入&#xff0c;…...

freeRTOS / day02

1. 定时器使用流程 1.1 ST32CubeMX 设置 1.1.0 选择定时器 --> TIM1 1.1.1 Clock Source --> Internal Clock 1.1.2 Prescaler --> 预分频系数 1.1.3 Counter Period -- > 重装值 1.1.4 Prescaler 和 Counter Period 计算公式 定时时间&#xff08;s) &…...

Ubuntu 18.04 x86_64 上交叉编译 boost 库(ARMv7L)

先安装 ARMv7L 交叉编译器环境&#xff1a; 在 Ubuntu 18.04 x86_64 上面安装 Linux-ARMv7 A/L GCC编译器-CSDN博客 1、下载 boost 1.84 的源代码访问要编译的目录&#xff0c;并且解压出来源代码&#xff0c;切入源代码根目录 2、./bootstrap.sh --with-librariesfilesyste…...

为什么 FPGA 比 CPU 和 GPU 快?

FPGA、GPU 与 CPU——AI 应用的硬件选择 现场可编程门阵列 (FPGA) 为人工智能 (AI) 应用带来许多优势。图形处理单元 (GPU) 和传统中央处理单元 (CPU) 相比如何&#xff1f; 人工智能&#xff08;AI&#xff09;一词是指能够以类似于人类的方式做出决策的非人类机器智能。这包…...

js常用函数总结

js常用函数总结 1、模糊搜索 export const fuzzyQuery (list, keyWord, attribute name) > {const reg new RegExp(keyWord)const arr []for (let i 0; i < list.length; i) {if (reg.test(list[i][attribute])) {arr.push(list[i])}}return arr } list 原数组 ke…...

cartographer离线建图报错:data_.trajectory_nodes.SizeOfTrajectoryOrZero

cartographer离线建图报错: data_.trajectory_nodes.SizeOfTrajectoryOrZero [FATAL] [1706177325.876019302, 1706015603.398505596]: F0125 18:08:45.000000 17607 pose_graph_2d.cc:1314] Check failed: data_.trajectory_nodes.SizeOfTrajectoryOrZero(trajectory_id) &…...

【YOLO系列算法俯视视角下舰船目标检测】

YOLO系列算法俯视视角下舰船目标检测 数据集和模型YOLO系列算法俯视视角下舰船目标检测YOLO系列算法俯视视角下舰船目标检测可视化结果 数据集和模型 数据和模型下载&#xff1a; YOLOv6俯视视角下舰船目标检测训练好的舰船目标检测模型舰船目标检测数据YOLOv7俯视视角下舰船…...

python进程间使用共享内存multiprocessing.shared_memory来通讯

python多个进程通讯使用共享内存 1、multiprocessing.shared_memory ​ 使用这个模块可从进程直接访问共享内存,该模块提供了一个 SharedMemory 类,用于分配和管理多核或对称多处理器(SMP)机器上进程间的共享内存。 ​ 为了协助管理不同进程间的共享内存生命周期,multi…...

经典目标检测YOLO系列(三)YOLOv3的复现(2)正样本的匹配、损失函数的实现

经典目标检测YOLO系列(三)YOLOv3的复现(2)正样本的匹配、损失函数的实现 我们在之前实现YOLOv2的基础上&#xff0c;加入了多级检测及FPN&#xff0c;快速的实现了YOLOv3的网络架构&#xff0c;并且实现了前向推理过程。 经典目标检测YOLO系列(三)YOLOV3的复现(1)总体网络架构…...

编程笔记 html5cssjs 061 JavaScrip简介

编程笔记 html5&css&js 061 JavaScrip简介 一、JavaScript概述二、JavaScript的主要特点三、历史延革四、JavaScript与前端开发小结 JavaScript 是 web 开发者必学的三种语言之一&#xff1a;HTML 定义网页的内容&#xff1b;CSS 规定网页的布局&#xff1b;JavaScript…...

隧道裂缝剥落病害AI识别系统

我国现有公路隧道超2.5万座&#xff0c;总里程超2.8万公里&#xff0c;其中运营超过15年的老旧隧道占比达35%。据交通运输部2025年统计&#xff0c;年均因隧道结构病害导致的交通中断超1200次&#xff0c;直接经济损失超45亿元。传统检测模式暴露四大核心痛点&#xff1a;检测周…...

保姆级教程:在ROS2 Humble/Foxy的Gazebo中配置RGB-D相机(附解决点云颜色/坐标问题)

ROS2 Humble/Foxy中Gazebo深度相机仿真全攻略&#xff1a;从配置到点云问题解决在机器人仿真开发中&#xff0c;深度相机&#xff08;RGB-D&#xff09;是不可或缺的传感器之一。它能够同时提供彩色图像和深度信息&#xff0c;为SLAM、物体识别、避障等任务提供关键数据支持。本…...

孤舟笔记 互联网常用框架篇三 Dubbo是如何动态感知服务下线的?注册中心和服务端双保险

文章目录先说结论机制一&#xff1a;注册中心通知机制二&#xff1a;心跳检测机制三&#xff1a;连接事件感知机制四&#xff1a;定时拉取四种机制的协作回答技巧与点评加分回答面试官点评个人网站微服务环境下&#xff0c;服务实例随时可能上下线——重启、扩容、宕机……调用…...

为Claude Code配置稳定API源并解决访问限制

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为Claude Code配置稳定API源并解决访问限制 Claude Code 作为一款强大的 AI 编程辅助工具&#xff0c;其原生服务在某些情况下可能…...

如何在3分钟内为任何活动搭建专业级滚动抽奖系统?Magpie-LuckyDraw全平台开源方案深度解析

如何在3分钟内为任何活动搭建专业级滚动抽奖系统&#xff1f;Magpie-LuckyDraw全平台开源方案深度解析 【免费下载链接】Magpie-LuckyDraw &#x1f3c5;A fancy lucky-draw tool supporting multiple platforms&#x1f4bb;(Mac/Linux/Windows/Web/Docker) 项目地址: https…...

终极免费音乐解锁工具:5步轻松解密你的加密音乐文件

终极免费音乐解锁工具&#xff1a;5步轻松解密你的加密音乐文件 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库&#xff1a; 1. https://github.com/unlock-music/unlock-music &#xff1b;2. https://git.unlock-music.dev/um/web 项目地址: https:/…...

XZ1018,100V,40A,NMOS 封装:TO252

封装&#xff1a;TO252类型&#xff1a;NVDS&#xff1a;100V VGS&#xff1a; 20V ID&#xff1a;40ARDS(ON)&#xff1a;10V <14mΩRDS(ON)&#xff1a;4.5V <19mΩ型号&#xff1a; XZ1018 封装&#xff1a;TO252类型&#xf…...

模拟电路实现自主循线机器人:无MCU的硬件逻辑设计

1. 项目概述&#xff1a;用最纯粹的模拟电路&#xff0c;造一台会“思考”的机器人每次看到那些在赛道上灵巧穿梭的循线小车&#xff0c;你是不是也手痒&#xff0c;想自己动手做一个&#xff1f;但一听到“单片机”、“编程”、“Arduino”这些词&#xff0c;又觉得门槛太高&a…...

避坑指南:Unity动态加载模型时,TriLib插件材质丢失、缩放异常的5个常见问题解决

Unity动态加载模型避坑指南&#xff1a;TriLib插件材质丢失与缩放异常的深度解决方案当你在Unity项目中尝试使用TriLib插件动态加载外部模型时&#xff0c;是否遇到过这些令人抓狂的情况&#xff1a;模型加载后材质全部变成刺眼的粉红色&#xff0c;贴图神秘消失&#xff0c;或…...

AI专著生成必备工具,轻松撰写20万字专著,质量与效率双保障!

学术专著的写作是一个严谨的过程&#xff0c;其背后需要大量的资料和数据作为基础。搜集和整理这些资料与数据往往是写作过程中最繁琐且耗时的部分。研究人员需要广泛收集国内外的前沿文献&#xff0c;确保所用文献不仅具备权威性&#xff0c;还要与研究主题密切相关。同时&…...