如何在macOS上安装Go并搭建本地编程环境
引言
Go是一种诞生于挫折中的编程语言。在谷歌,开发人员厌倦了在为新项目选择语言时必须做出权衡。有些语言执行效率很高,但需要很长时间编译,而另一些语言易于编写,但在生产环境中运行效率很低。因此,谷歌发明了Go语言,并设计了这门语言以拥有这一切:快速编译、快速执行、易于编写和易于部署。
虽然Go是一种通用语言,可用于从web应用程序到命令行工具的各种项目,但它特别适合于分布式系统和微服务架构,为它赢得了云语言的声誉。它帮助现代程序员使用一套强大的工具做更多的事情,通过将格式作为语言规范的一部分来消除关于格式的争论,以及通过将每个程序及其所有依赖项编译为单一的二进制文件来简化部署。Go易于学习,具有非常少的关键字集合,这使它成为初学者和资深开发人员的绝佳选择。
在本教程中,您将在本地macOS机器上安装Go,并运行您的第一个程序以证明安装有效。
前期准备
你需要一台macOS计算机,具有管理权限,并且可以连接到互联网。
第1步 - 打开终端
macOS终端是一个可以用来访问命令行界面的应用程序。你可以在Finder中找到它,导航到Applications文件夹,然后进入Utilities文件夹。在这里双击终端。
现在您已经打开了终端,您可以下载并安装Xcode,这是安装Go所需的开发人员工具包。
第2步 — 安装Xcode
Xcode是一个包含macOS软件开发工具的集成开发环境 (IDE)。要检查Xcode是否已经安装,可以在终端中输入以下命令:
xcode-select -p
下面的输出表明已经安装了Xcode:
Output/Library/Developer/CommandLineTools
如果你收到一个错误,安装Xcode从App Store并接受默认选项。
安装好Xcode后,回到终端窗口。接下来,需要安装Xcode的命令行工具应用程序,可以通过输入:
xcode-select --install
至此,Xcode及其命令行工具应用程序已经完全安装完毕,可以开始安装包管理器Homebrew了。
第3步 - 安装和设置Homebrew
虽然macOS终端非常类似于Linux终端和其他Unix系统的终端,但它没有像Linux发行版那样提供官方的命令行包管理器。包管理器可以帮助你安装软件、升级、配置和卸载,可以通过终端交互,也可以在脚本中进行。macOS上有一些开源(和非官方)的包管理器,Homebrew是最流行的一个。它提供了一种在macOS上快速灵活地安装和更新Go的方法。
要安装Homebrew,请在终端中运行以下命令:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
这个命令从GitHub下载一个脚本并安装Homebrew。如果您需要输入密码,请注意您的击键不会显示在终端窗口中,但它们会被记录下来。输入密码后,只需按return
键。否则,当系统提示您确认安装时,请按y
为“yes”。
安装完成后,你要把Homebrew的目录放在PATH
环境变量的顶部,这样你通过Homebrew安装的任何程序都将优先于macOS上默认安装的同名程序(如果有的话)。由于macOS没有附带Go,在这种情况下,将Homebrew放在PATH
的顶部并不是严格必要的,但为了适应其他情况,许多开发人员更喜欢将Homebrew添加到他们的PATH
的顶部。
为此,使用命令行文本编辑器nano
创建或打开文件~/.zprofile
:
nano ~/.zprofile
**注意:**如果你运行的macOS版本高于10.15 Catalina,你的终端可能会使用Bash shell (/bin/bash
)而不是Z-shell (/bin/zsh
)。在这种情况下,你需要创建或打开文件~/.bash_profile
而不是~/.zprofile
。要查看您正在使用的shell,请运行echo $SHELL
。
将下面这行添加到文件中:
eval "$(/opt/homebrew/bin/brew shellenv)"
通过输入CTRL+x
退出nano,当提示保存文件时,按y
,然后按ENTER
。
现在激活这些修改:
source ~/.zprofile
要确保Homebrew安装成功,可以输入以下命令:
brew doctor
如果此时不需要更新,则输出为:
OutputYour system is ready to brew.
否则,你可能会得到一个警告,要求你运行另一个命令,例如brew update
,以确保你安装的Homebrew是最新的。
Homebrew准备好后,您可以安装Go。
第4步 - 安装Go
你可以使用brew search
命令搜索所有可用的Homebrew包。就本教程而言,您将搜索go相关的包或模块:
brew search golang
注意:不要运行brew search go
,因为它会返回太多结果。Go语言通常被称为Golang,所以使用golang
作为搜索词来缩小结果范围。
终端会输出一个你可以安装的列表:
Outputgolang golang-migrate golangci-lint glslang
你想要得到第一个结果golang
。现在安装它:
brew install golang
安装过程可能需要几分钟。完成后,检查您安装的Go版本:
go version
Homebrew应该已经安装了最新的稳定版本的Go。在撰写本书时,该版本是1.19.4。
要在将来更新Go,您可以运行这两个命令来首先更新Homebrew,然后更新Go:(您现在不需要这样做,因为您刚刚安装了最新版本)。
brew update
brew upgrade golang
brew update
将更新Homebrew本身的公式,确保你拥有想要安装的软件包的最新信息。brew upgrade golang
将把golang
包更新到最新版本。
安装Go后,您就可以编译并运行第一个程序了。
第5步 — 用Go写Hello World
本节不会解释任何关于Go编程的内容。我们的目标只是编译和运行最简单的程序,以说服您自己Go是有效的。
在你的主目录下,使用像nano
这样的文本编辑器创建一个新文件:
nano hello.go
粘贴这个程序:
package mainimport "fmt"func main() {fmt.Println("Hello, World!")
}
通过输入CTRL+x
退出nano,当提示保存文件时,按y
,然后按ENTER
。
然后用下面这条命令编译并运行程序:
go run hello.go
OutputHello, World!
Go是活着的!你已经准备好开始你的冒险之旅。
总结
本教程提供了Go编程语言的简单介绍。你安装了Go并运行了第一个程序。
相关文章:
如何在macOS上安装Go并搭建本地编程环境
引言 Go是一种诞生于挫折中的编程语言。在谷歌,开发人员厌倦了在为新项目选择语言时必须做出权衡。有些语言执行效率很高,但需要很长时间编译,而另一些语言易于编写,但在生产环境中运行效率很低。因此,谷歌发明了Go语…...

postgresql-存储过程
postgresql-存储过程 简述PL/pgSQL 代码块结构示例嵌套子块 声明与赋值控制结构IF 语句CASE 语句简单case语句搜索 CASE 语句 循环语句continuewhilefor语句遍历查询结果 foreach 游标游标传参 错误处理报告错误和信息检查断言 捕获异常自定义函数重载VARIADIC 存储过程示例事务…...
改造user ,使得userId相同视为一个对象,user是Key,User的username做value
如果您想要将具有相同userId的用户视为一个对象,其中User对象是键,而User对象的username是值,您可以使用Java的Map<User, String>数据结构来实现。以下是示例代码: java import java.util.*;class User {private int userI…...

力扣刷题-数组-滑动窗口法相关题目总结
209. 长度最小的子数组(最小滑窗) 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。 示例: 输入&…...

Qt创建线程(线程池)
1.线程池可以创建线程统一的管理线程(统一创建、释放线程) 2.使用线程池方法实现点击开始按钮生成10000个随机数,然后分别使用冒泡排序和快速排序排序这10000个随机数,最后在窗口显示排序后的数字: mainwindow.h文件…...
【Java】泛型 之 使用泛型
使用ArrayList时,如果不定义泛型类型时,泛型类型实际上就是 Object: // 编译器警告: List list new ArrayList(); list.add("Hello"); list.add("World"); String first (String) list.get(0); String second (Strin…...
消费者NPS调查,帮您了解客户满意度!
随着市场竞争的日益激烈,了解消费者需求和对企业品牌的认知程度,对于企业的持续发展至关重要。您的客户对您的产品或服务有多满意?您是否想提升客户忠诚度,从而增加业务的持续增长?群狼调研(长沙产品包装测试)为您提供全新的消费者NPS调查服…...

Webpack监视文件修改,自动重新打包文件
方法一:使用watch监视文件变化 在终端中输入以下指令: npx webpack --watch 我们使用这种方法监听文件变化时只会监听我们计算机本地的文件变化,在开发场景中我们的项目是要部署到服务器中的,因此这种方式并不推荐。 方法二&…...

list容器排序案例
案例描述:将Perspn自定义数据类型进行排序,Person中属性有姓名、年龄、身高 排序规则:按照年龄进行升序,如果年龄相同按照身高进行降序 代码示例 #include <iostream> #include <string.h> #include <iterator> #include <vector…...

PHP使用Analysis中英文分词
1、下载Analysis,创建test.php测试 2、引入Analysis实现中文分词 <?php include "./Analysis/Analysis.php";$annew \WordAnalysis\Analysis(); $content"机器学习是一门重要的技术,可以用于数据分析和模式识别。"; //10分词数…...

视频汇聚/视频云存储/视频监控管理平台EasyCVR录像存储功能如何优化?具体步骤是什么?
视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同,支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。视频监控系统EasyCVR拓展性强,视频能力丰富,具体可实现视频监控直播、视频轮播、视频录像、云存储、…...

Web服务(Web Service)
简介 Web服务(Web Service)是一种Web应用开发技术,用XML描述、发布、发现Web服务。它可以跨平台、进行分布式部署。 Web服务包含了一套标准,例如SOAP、WSDL、UDDI,定义了应用程序如何在Web上实现互操作。 Web服务的服…...
Java第4章 类的继承
目录 内容说明 章节内容 一、继承的概念 二、继承的使用 extends关键字...
Linux网络和安全:配置、远程访问与防御指南
文章目录 Linux 网络和安全引言网络配置IP地址配置配置网络接口防火墙设置安全性加强 Linux网络配置及端口管理网络配置命令端口管理 防火墙和安全性设置防火墙管理工具安全性设置 Linux远程访问技术:SSH和VPNSSHVPN Linux软件和服务网络工具文件传输VPN技术安全审计…...

如何搭建Linux环境
W...Y的主页 😊 代码仓库分享 💕 当我们想要搭建一个Linux系统,我们应该怎么使用呢? 今天我就带领大家搭建Linux系统!!! 目录 Linux环境安装 双系统(不推荐) poww…...

【解决方案】edge浏览器批量添加到集锦功能消失的解决方案
edge的集锦功能很好用,右键标签页会出现如下选项: 但在某次edge更新后,右键标签页不再出现该选项: 这里可以参考为什么我的Edge浏览器右键标签页没有“将所有标签页添加到集锦”功能? - Microsoft Community 一文提出…...
JS操作字符串方法学习系列(1)-每天学习10个方法
目录 **字符串连接 (Concatenation)**:**字符串长度 (Length)**:**字符串查找 (Search)**:**字符串替换 (Replace)**:**字符串分割 (Split)**:**字符串大小写转换 (Case Conversion)**:**字符串切片 (Slice)**:**字符串删除空白 (Trim)**:**字符串检查开头和结尾 (Starts/EndsW…...

iterator和generator
iterator和generator iterator es6: let/const ...展开 迭代器 是一种机制,比如在控制台输出Iterator是没有这个类的,为不同的数据结构提供迭代循环的机制。 迭代器对象:具备next方法,next能够对你指定的数据进行迭代循环&#x…...
ipv6笔记及总结
1、路由器请求消息Router Solicitation和路由器通告Router Advertisement消息主要用于无状态地址的情况下,有状态的情况使用的是dhcpv6 server分配(例如:IPv6地址以及其他信息(DNS、域名等))。 2、关于IPv…...

64位Ubuntu20.04.5 LTS系统安装32位运行库
背景: 在ubutu(版本为20.04.5 LTS)中运行./arm-none-linux-gnueabi-gcc -v 后提示“no such device”。 经多方查证,是ubutu的版本是64位的,而需要运行的编译工具链是32位的,因此会不兼容。 解决方法就是在…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...

相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...

Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...

短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...

push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...