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

如何在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的用户视为一个对象&#xff0c;其中User对象是键&#xff0c;而User对象的username是值&#xff0c;您可以使用Java的Map<User, String>数据结构来实现。以下是示例代码&#xff1a; java import java.util.*;class User {private int userI…...

力扣刷题-数组-滑动窗口法相关题目总结

209. 长度最小的子数组&#xff08;最小滑窗&#xff09; 给定一个含有 n 个正整数的数组和一个正整数 s &#xff0c;找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组&#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0。 示例&#xff1a; 输入&…...

Qt创建线程(线程池)

1.线程池可以创建线程统一的管理线程&#xff08;统一创建、释放线程&#xff09; 2.使用线程池方法实现点击开始按钮生成10000个随机数&#xff0c;然后分别使用冒泡排序和快速排序排序这10000个随机数&#xff0c;最后在窗口显示排序后的数字&#xff1a; mainwindow.h文件…...

【Java】泛型 之 使用泛型

使用ArrayList时&#xff0c;如果不定义泛型类型时&#xff0c;泛型类型实际上就是 Object&#xff1a; // 编译器警告: List list new ArrayList(); list.add("Hello"); list.add("World"); String first (String) list.get(0); String second (Strin…...

消费者NPS调查,帮您了解客户满意度!

随着市场竞争的日益激烈&#xff0c;了解消费者需求和对企业品牌的认知程度&#xff0c;对于企业的持续发展至关重要。您的客户对您的产品或服务有多满意?您是否想提升客户忠诚度&#xff0c;从而增加业务的持续增长?群狼调研(长沙产品包装测试)为您提供全新的消费者NPS调查服…...

Webpack监视文件修改,自动重新打包文件

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

list容器排序案例

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

PHP使用Analysis中英文分词

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

视频汇聚/视频云存储/视频监控管理平台EasyCVR录像存储功能如何优化?具体步骤是什么?

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

Web服务(Web Service)

简介 Web服务&#xff08;Web Service&#xff09;是一种Web应用开发技术&#xff0c;用XML描述、发布、发现Web服务。它可以跨平台、进行分布式部署。 Web服务包含了一套标准&#xff0c;例如SOAP、WSDL、UDDI&#xff0c;定义了应用程序如何在Web上实现互操作。 Web服务的服…...

Java第4章 类的继承

目录 内容说明 章节内容 一、继承的概念 二、继承的使用 extends关键字...

Linux网络和安全:配置、远程访问与防御指南

文章目录 Linux 网络和安全引言网络配置IP地址配置配置网络接口防火墙设置安全性加强 Linux网络配置及端口管理网络配置命令端口管理 防火墙和安全性设置防火墙管理工具安全性设置 Linux远程访问技术&#xff1a;SSH和VPNSSHVPN Linux软件和服务网络工具文件传输VPN技术安全审计…...

如何搭建Linux环境

W...Y的主页 &#x1f60a; 代码仓库分享 &#x1f495; 当我们想要搭建一个Linux系统&#xff0c;我们应该怎么使用呢&#xff1f; 今天我就带领大家搭建Linux系统&#xff01;&#xff01;&#xff01; 目录 Linux环境安装 双系统&#xff08;不推荐&#xff09; poww…...

【解决方案】edge浏览器批量添加到集锦功能消失的解决方案

edge的集锦功能很好用&#xff0c;右键标签页会出现如下选项&#xff1a; 但在某次edge更新后&#xff0c;右键标签页不再出现该选项&#xff1a; 这里可以参考为什么我的Edge浏览器右键标签页没有“将所有标签页添加到集锦”功能&#xff1f; - Microsoft Community 一文提出…...

JS操作字符串方法学习系列(1)-每天学习10个方法

目录 **字符串连接 (Concatenation)**:**字符串长度 (Length)**:**字符串查找 (Search)**:**字符串替换 (Replace)**:**字符串分割 (Split)**:**字符串大小写转换 (Case Conversion)**:**字符串切片 (Slice)**:**字符串删除空白 (Trim)**:**字符串检查开头和结尾 (Starts/EndsW…...

iterator和generator

iterator和generator iterator es6: let/const ...展开 迭代器 是一种机制&#xff0c;比如在控制台输出Iterator是没有这个类的&#xff0c;为不同的数据结构提供迭代循环的机制。 迭代器对象&#xff1a;具备next方法&#xff0c;next能够对你指定的数据进行迭代循环&#x…...

ipv6笔记及总结

1、路由器请求消息Router Solicitation和路由器通告Router Advertisement消息主要用于无状态地址的情况下&#xff0c;有状态的情况使用的是dhcpv6 server分配&#xff08;例如&#xff1a;IPv6地址以及其他信息&#xff08;DNS、域名等&#xff09;&#xff09;。 2、关于IPv…...

64位Ubuntu20.04.5 LTS系统安装32位运行库

背景&#xff1a; 在ubutu&#xff08;版本为20.04.5 LTS&#xff09;中运行./arm-none-linux-gnueabi-gcc -v 后提示“no such device”。 经多方查证&#xff0c;是ubutu的版本是64位的&#xff0c;而需要运行的编译工具链是32位的&#xff0c;因此会不兼容。 解决方法就是在…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

如何做好一份技术文档?从规划到实践的完整指南

如何做好一份技术文档&#xff1f;从规划到实践的完整指南 &#x1f31f; 嗨&#xff0c;我是IRpickstars&#xff01; &#x1f30c; 总有一行代码&#xff0c;能点亮万千星辰。 &#x1f50d; 在技术的宇宙中&#xff0c;我愿做永不停歇的探索者。 ✨ 用代码丈量世界&…...

理想汽车5月交付40856辆,同比增长16.7%

6月1日&#xff0c;理想汽车官方宣布&#xff0c;5月交付新车40856辆&#xff0c;同比增长16.7%。截至2025年5月31日&#xff0c;理想汽车历史累计交付量为1301531辆。 官方表示&#xff0c;理想L系列智能焕新版在5月正式发布&#xff0c;全系产品力有显著的提升&#xff0c;每…...

MySQL基本操作(续)

第3章&#xff1a;MySQL基本操作&#xff08;续&#xff09; 3.3 表操作 表是关系型数据库中存储数据的基本结构&#xff0c;由行和列组成。在MySQL中&#xff0c;表操作包括创建表、查看表结构、修改表和删除表等。本节将详细介绍这些操作。 3.3.1 创建表 在MySQL中&#…...

JUC并发编程(二)Monitor/自旋/轻量级/锁膨胀/wait/notify/锁消除

目录 一 基础 1 概念 2 卖票问题 3 转账问题 二 锁机制与优化策略 0 Monitor 1 轻量级锁 2 锁膨胀 3 自旋 4 偏向锁 5 锁消除 6 wait /notify 7 sleep与wait的对比 8 join原理 一 基础 1 概念 临界区 一段代码块内如果存在对共享资源的多线程读写操作&#xf…...

Yolo11改进策略:Block改进|FCM,特征互补映射模块|AAAI 2025|即插即用

1 论文信息 FBRT-YOLO&#xff08;Faster and Better for Real-Time Aerial Image Detection&#xff09;是由北京理工大学团队提出的专用于航拍图像实时目标检测的创新框架&#xff0c;发表于AAAI 2025。论文针对航拍场景中小目标检测的核心难题展开研究&#xff0c;重点解决…...

Linux实现线程同步的方式有哪些?

什么是线程同步&#xff1f; 想象一下超市收银台&#xff1a;如果所有顾客&#xff08;线程&#xff09;同时挤向同一个收银台&#xff08;共享资源&#xff09;&#xff0c;场面会一片混乱。线程同步就是给顾客们发"排队号码牌"&#xff0c;确保&#xff1a; 有序访…...

NLP学习路线图(三十四): 命名实体识别(NER)

一、命名实体识别(NER)是什么? 命名实体识别(Named Entity Recognition, NER)是自然语言处理中的一项关键序列标注任务。其核心目标是从非结构化的文本中自动识别出特定类别的名词性短语,并将其归类到预定义的类别中。 核心目标:找到文本中提到的命名实体,并分类。 典…...