如何在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位的,因此会不兼容。 解决方法就是在…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...
智能职业发展系统:AI驱动的职业规划平台技术解析
智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...
ui框架-文件列表展示
ui框架-文件列表展示 介绍 UI框架的文件列表展示组件,可以展示文件夹,支持列表展示和图标展示模式。组件提供了丰富的功能和可配置选项,适用于文件管理、文件上传等场景。 功能特性 支持列表模式和网格模式的切换展示支持文件和文件夹的层…...
Vue 3 + WebSocket 实战:公司通知实时推送功能详解
📢 Vue 3 WebSocket 实战:公司通知实时推送功能详解 📌 收藏 点赞 关注,项目中要用到推送功能时就不怕找不到了! 实时通知是企业系统中常见的功能,比如:管理员发布通知后,所有用户…...
电脑桌面太单调,用Python写一个桌面小宠物应用。
下面是一个使用Python创建的简单桌面小宠物应用。这个小宠物会在桌面上游荡,可以响应鼠标点击,并且有简单的动画效果。 import tkinter as tk import random import time from PIL import Image, ImageTk import os import sysclass DesktopPet:def __i…...
Java设计模式:责任链模式
一、什么是责任链模式? 责任链模式(Chain of Responsibility Pattern) 是一种 行为型设计模式,它通过将请求沿着一条处理链传递,直到某个对象处理它为止。这种模式的核心思想是 解耦请求的发送者和接收者,…...
