【Go系列】 Go语言的入门

        为什么要学习Go

        从今天起,我们将一同启程探索 Go 语言的奥秘。我会用简单明了的方式,逐一讲解 Go 语言的各个知识点,帮助你从基础做起,一步步深化理解。不论你之前是否有过 Go 语言的接触经验,这个系列文章都将助你收获满满。

        现在,让我以一个经典的例子“Hello World”来带你入门 Go 语言,了解它是如何运行起来的。

开始学习

Hello, 世界

        若你曾学习过 C 语言,那么对下面这个经典示例应该颇为熟悉。借助这个例子,我将首先为你简要介绍 Go 语言的一些关键概念,帮助你初步把握 Go 语言代码的结构和风貌。以下是示例代码:

package mainimport "fmt"func main() {fmt.Println("Hello, World!")}

        这五行的代码组合便形成了一个完整的 Go 程序,你会发现它非常易于理解。接下来,我将执行这段代码,让我们观察一下运行后的输出。操作步骤是打开命令行终端,输入以下指令,并按下回车键。

$ go run main.goHello, World!

        当我输入命令 go run main.go 并按下回车键后,屏幕上显示的“Hello, World!”便是我们的 Go 程序运行后的输出结果。

        在这里,go 是 Go 语言附带的工具链中的一个命令,它与您可能熟悉的如 ls 这样的命令行工具一样,是一个可执行程序。go 命令提供了多种功能,包括运行、编译 Go 代码,以及生成可执行文件等。

  run 是 go 命令下的一个选项,它用于指示工具链执行指定的 Go 程序。而 main.go 则是我编写的 Go 代码文件。因此,整个命令 go run main.go 的含义是,使用 Go 工具链来运行 main.go 文件中的代码。

程序结构分析

        为了让一个 Go 语言程序顺利执行,关键在于包含 package main 和 main 函数这两个要素。package main 指示这是一个可执行的应用程序,而 main 函数则是程序启动的入口点。

        在“Hello, 世界”这个基础示例中,我们见证了 Go 语言程序的基本骨架。以下是对程序结构的逐步解析,以及 Go 语言核心概念的介绍。

        首行的 package main 声明了当前文件 ch01/main.go 所属的包。在 Go 语言中,package 是声明包的关键字,而 main 是包的名称。main 包在 Go 语言中具有特殊意义,它表明你的项目是一个独立的可执行程序,而不是供其他项目引用的库。

        第二行的 import "fmt" 是引入 fmt 包的声明。import 是 Go 语言的关键字,用于导入所需的包。这里我们导入了 fmt 包,以便在后续代码中使用它提供的功能。

        第三行的 func main() 定义了 main 函数。func 是 Go 语言中声明函数的关键字,main 是函数名,而空括号 () 表示该函数不接受任何参数。在 Go 语言中,main 函数是程序的入口点,程序启动时首先执行的就是 main 函数,通过它来调用其他函数以实现业务逻辑。

        第四行的 fmt.Println("Hello, 世界") 是调用 fmt 包中的 Println 函数来输出文本“Hello, 世界”。要使用一个包的功能,必须先将其导入。Println 函数是 fmt 包提供的一个函数,用于在控制台上打印信息。

        最后一行的大括号 } 标志着 main 函数体的结束。至此,我们完成了对这段代码的分析,执行程序后便能看到“Hello, 世界”的输出。

        通过上述分析,我们可以看出 Go 语言的代码结构简洁而完整,仅凭 packageimport 和 func main 这些基本概念就能构建一个可运行的程序。

        在后续,我们将进一步探讨如何使用变量、自定义函数等内容。在此之前,我们先来了解 Go 语言的开发环境如何搭建,这是运行上述 Go 代码并让程序运行起来的前提。

Go 语言环境搭建

        要搭建 Go 语言的开发环境,首先需要下载 Go 语言的安装包。你可以访问 Go 官方网站 https://golang.org/dl/ 或者国内的镜像网站 https://golang.google.cn/dl/ 来下载(由于网络原因,如果无法访问国外官网,可以选择国内的镜像网站进行下载)。

在下载页面,根据你所使用的操作系统(无论是 Windows、macOS 还是 Linux)选择合适的安装包。以下是下载步骤的简要说明:

  1. 访问 Go 语言官方网站或国内镜像网站。
  2. 在下载页面中,找到适合你操作系统的 Go 版本。
  3. 点击相应的下载链接,下载 Go 安装包。

Windows MSI 下安装

        在 Windows 系统中,MSI 安装包是一个便捷的选择,因为它提供了一个直观的安装界面,让用户能够轻松地配置 Go 语言开发环境。对于大多数现代的 Windows 操作系统,它们都是 64 位的,因此你应该下载 go1.20.windows-amd64.msi。如果你使用的是 32 位的 Windows 系统,那么你应该选择 go1.15.windows-386.msi

        下载并双击安装包后,你会被引导通过一系列的安装步骤。在安装过程中,你可以选择将 Go 安装到默认的 C:\Go 目录,或者根据自己的喜好选择一个不同的目录。

        一旦你选择安装到 C:\Go 目录,安装程序会自动将 C:\Go\bin 目录添加到你的系统 PATH 环境变量中。这样,你就可以在任何命令提示符中直接运行 Go 命令了。如果你发现安装程序没有添加这个路径,你也可以手动将其添加到 PATH 环境变量。

手动添加步骤如下:

  1. 打开“控制面板”。
  2. 选择“系统和安全”。
  3. 点击“系统”。
  4. 在系统属性窗口中,选择“高级”选项卡。
  5. 点击“环境变量”按钮。
  6. 在环境变量窗口中,找到并选择“Path”变量,然后点击“编辑”。
  7. 在编辑环境变量窗口中,点击“新建”,然后输入 C:\Go\bin
  8. 点击“确定”保存更改。
  9. 退出所有打开的命令行窗口,然后打开一个新的命令行窗口以使更改生效。

Linux 下安装

如果要安装1.18以下的版本可以直接

sudo apt-get install golang-goyum install golang-go

第一行为Ubuntu的下载,第二行为Redhat的下载方式。

如果要通过安装包安装的话,由于Linux 系统有 32 位和 64 位,你可以根据你的 Linux 操作系统选择相应的压缩包,它们分别是 go1.20.linux-386.tar.gz 和 go1.20.linux-amd64.tar.gz。

下载成功后,需要先进行解压,假设你下载的是 go1.20.linux-amd64.tar.gz,在终端通过如下命令即可解压:

sudo tar -C /usr/local -xzf go1.20.linux-amd64.tar.gz

然后把 /usr/local/go/bin 添加到 PATH 环境变量中,就可以使用 Go 语言开发工具包了。

把下面这段添加到 /etc/profile 或者 $HOME/.profile 文件中,保存后退出即可成功添加环境变量。

export PATH=$PATH:/usr/local/go/bin

macOS 下安装

        如果你的操作系统是 macOS,可以采用 PKG 安装包。下载 go1.20.darwin-amd64.pkg 后,双击按照提示安装即可。安装成功后,路径 /usr/local/go/bin 应该已经被添加到了 PATH 环境变量中,如果没有的话,你可以手动添加,和上面 Linux 的方式一样,把如下内容添加到 /etc/profile 或者 $HOME/.profile 文件保存即可。

export PATH=$PATH:/usr/local/go/bin
安装测试

        安装成功后,可以打开终端或者命令提示符,输入 go version 来验证 Go 语言是否安装成功。如果成功的话,会打印出 Go 语言的版本和系统信息,如下所示:

$ go versiongo version go1.20 darwin/amd64

环境变量设置

        在安装了 Go 语言开发工具包之后,虽然你已经拥有了编译和运行 Go 程序的基本能力,但还有一些重要的环境变量需要设置,以确保 Go 开发环境完整。这两个关键的环境变量是 GOPATH 和 GOBIN

  • GOPATH:这是 Go 项目的工作目录,它在 Go Module 之前是非常重要的,现在主要用于存放使用 go get 命令获取的项目。
  • GOBIN:这是 Go 编译生成的程序的安装目录。当你使用 go install 命令时,编译后的 Go 程序会被安装到 GOBIN 目录中,这样你就可以在命令行中直接使用这些程序。

假设你的工作目录是 /Users/ubuntu/go,你需要将 GOPATH 环境变量设置为 /Users/ubuntu/go,并将 GOBIN 环境变量设置为 $GOPATH/bin

在 Linux 和 macOS 系统下,你可以将以下内容添加到 /etc/profile 或者你的用户目录下的 .profile 文件中,以设置这些环境变量:

export GOPATH=/Users/ubuntu/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN

如果在 Windows 系统中,可以通过控制面板 -> 高级 -> 环境变量选项添加这两个环境变量。

项目结构

        在 Go 语言的现代项目中,Go Module 是一个推荐的管理依赖和构建项目的工具。它允许你在项目的任何位置创建一个 Go 语言项目,而不需要依赖于全局的 GOPATH 环境变量。

假设你的项目位置是 /Users/ubuntu/goProject/,打开终端,输入如下命令切换到该目录下:

$ cd /Users/ubuntu/goProject/

可以执行如下命令创建一个 Go Module 项目, 会生成一个go.mod文件:

$ go mod init

然后在当前目录下创建一个 main.go 文件,这样整个项目目录结构是:

goProject├── go.mod├── lib└── main.go

其中 main.go 是整个项目的入口文件,里面有 main 函数。lib 目录是项目的子模块,根据项目需求可以新建很多个目录作为子模块,也可以继续嵌套为子模块的子模块。

编译发布

        完成了你的 Go 项目后,你可以选择将代码编译成一个可执行文件,以便在终端中直接运行,或者将其发布到 $GOBIN 目录,以便在系统环境中直接使用。

$ go build main.go

回车执行后会在当前目录生成 main 可执行文件,现在,我们来测试下它是否可用。

$ ./main Hello, World!

如果成功打印出“Hello, World!”,证明程序成功生成。

把它安装到 $GOBIN 目录或者任意位置:

$ go install main.go

跨平台编译

在 Go 语言开发工具包中,一个令人印象深刻的功能就是它的跨平台编译能力。这意味着你可以在一个操作系统上开发代码,然后编译出可以在其他操作系统上运行的可执行程序。例如,如果你在 macOS 上开发,你可以编译出能在 Linux 或 Windows 上运行的程序。

跨平台编译允许你选择你最喜欢的操作系统作为开发环境,然后轻松地将代码编译成适合发布平台的可执行程序。

Go 语言通过两个环境变量来控制跨平台编译:

  • GOOS:代表要编译的目标操作系统。常见的值有 linuxwindowsdarwin 等。
  • GOARCH:代表要编译的目标处理器架构。常见的值有 386amd64arm64 等。

通过组合不同的 GOOS 和 GOARCH 值,你可以编译出适用于不同平台的可执行程序。例如,如果你在 macOS 上开发,且你的系统是 AMD64 架构,你可以这样编译出一个适用于 Linux AMD64 架构的可执行程序:

$ GOOS=linux GOARCH=amd64 go build main.go

在这个命令中:

  • GOOS=linux:告诉 Go 编译器目标操作系统是 Linux。
  • GOARCH=amd64:告诉 Go 编译器目标处理器架构是 AMD64。
  • go build -o linux-amd64-hello-world .:编译当前目录下的 Go 源文件,并将输出命名为 linux-amd64-hello-world

完成编译后,你将得到一个名为 linux-amd64-hello-world 的可执行文件,它可以在 Linux AMD64 架构的系统上运行。这样,你就可以选择在 macOS 上开发,然后编译出适用于其他平台的可执行程序,以便在不同环境中运行你的 Go 程序。

Go 编辑器推荐

        在软件开发领域,选择一款合适的编辑器对于提高工作效率至关重要。今天,我想向大家推荐两款备受开发者喜爱的编辑器,它们分别是 Visual Studio Code 和 JetBrains 的 Goland。

        Visual Studio Code 这款编辑器是一款由微软开发的免费开源代码编辑器,拥有丰富的插件和扩展功能。对于 Go 语言开发,Visual Studio Code 提供了专门的 Go 扩展插件,它可以帮助你更高效地编写、调试和测试 Go 代码。你可以在 Visual Studio Code 的官方网站 Visual Studio Code - Code Editing. Redefined 下载这款编辑器,并安装 Go 扩展插件来开始你的 Go 开发之旅。

        Goland是一款由老牌 IDE 厂商 JetBrains 推出的 Go 语言集成开发环境。它不仅集成了所有必要的 Go 插件,还提供了一系列强大的功能,如代码补全、代码格式化、代码重构、代码导航等。Goland 适合所有水平的开发者,无论是初学者还是经验丰富的老手,都能在 Goland 中找到适合自己的开发体验。你可以在 Goland 的官方网站 GoLand by JetBrains: More than just a Go IDE 下载并安装 Goland,开始使用这款功能强大的 Go 开发工具。

        选择哪款编辑器取决于你的个人偏好和需求。如果你喜欢轻量级的编辑器并且需要丰富的插件支持,Visual Studio Code 是一个不错的选择。而如果你更倾向于使用集成度更高、功能更全面的 IDE,Goland 可能会更符合你的需求。无论你选择哪款编辑器,它们都能帮助你更高效地开发 Go 语言应用程序。

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

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

相关文章

题解[自己出的题]

题解 题目&#xff1a; 舞伴配对 思路&#xff1a; 首先我们初始化两个队列 男生队列为q1,女生为q2 然后我们入队 因为我们现在每一个队伍都是有编号的 那我们先处理q1(男生队)&#xff1a; M M M个人 我们要为每一个人进行入队 在第一个循环的第二行(见<)让队首入队&a…

比curl更直观的网站性能测试工具httpstat——筑梦之路

GitHub - davecheney/httpstat: Its like curl -v, with colours. wget https://raw.githubusercontent.com/reorx/httpstat/master/httpstat.pymv httpstat.py /usr/bin/httpstat #移动到环境变量路径chmod x /usr/bin/httpstat #添加可执行权限 exec bash #重置当前bash进…

请编写函数,删除字符串中指定位置下的字符,删除成功函数返回被删字符,否则返回空值

char arr_del(char* p, int pos) {if (pos> strlen(p) || pos<0){printf("这是一个无效下标\n");exit(1);}//到这里就是有效下标char ch p[pos];//把要删除的下标存储for (int i pos; p[i] ! \0; i){p[i] p[i 1];}return ch; } int main() {char arr[100];…

MySQL9.0的新特性

MySQL 9.0 版本出来了&#xff0c;我也学学它的一些新特性。 高级 JSON 数据处理&#xff1a;MySQL 9.0 增强了对 JSON 数据的处理能力&#xff0c;允许用户将 EXPLAIN ANALYZE 命令的 JSON 输出直接保存到用户变量中&#xff0c;这使得查询调试和优化更加容易。例如&#xff0…

使用conda安装openturns

目录 1. 有效方法2. 整体分析使用pip安装使用conda安装验证安装安装过程中可能遇到的问题 1. 有效方法 conda install -c conda-forge openturns2. 整体分析 OpenTURNS是一个用于概率和统计分析的软件库&#xff0c;主要用于不确定性量化。你可以通过以下步骤在Python环境中安…

芋道源码 yudao-cloud 文档,视频,开发指南如何看全部

进入官网后可以看到相关内容 但是后端手册开始就看不了了 必须加入知识知识星球才行&#xff0c;很烦 闲**鱼搜索用户 水城打坐的藤壶 找到这个链接 这下大家都懂了吧 现在就可以看到看不到的内容了 在线文档的弹窗可技术去除&#xff0c;很简单 直接起飞哈 包括更新sq…

数据结构与算法基础篇--二分查找

必要前提&#xff1a;有序数组 算法简述&#xff1a;通过不断取中间值和目标target值进行比较&#xff08;中间值&#xff1a;mid (left right) / 2&#xff09; 如果目标值等于中间位置的值&#xff0c;则找到目标&#xff0c;返回中间位置如果目标值小于中间位置的值&…

YOLOv10改进 | 图像去雾 | MB-TaylorFormer改善YOLOv10高分辨率和图像去雾检测(ICCV,全网独家首发)

一、本文介绍 本文给大家带来的改进机制是图像去雾MB-TaylorFormer&#xff0c;其发布于2023年的国际计算机视觉会议&#xff08;ICCV&#xff09;上&#xff0c;可以算是一遍比较权威的图像去雾网络&#xff0c; MB-TaylorFormer是一种为图像去雾设计的多分支高效Transformer…

vim编辑器的使用

vim编辑器&#xff1a; u:撤销操作 ctrlr取消u操作 w&#xff1a;向后按单词移动 b&#xff1a;向前按照单词移动 :%s/printf/cout/g 将printf替换为cout vs copy.c 分屏操作 ctrlww跨屏操作 &#xff01;gcc test.c :!./a.out在vim中对代码进行编译执行 Centos下配置…

嵌入式系统中的加解密签名(2)--- mbedtls认识与使用

笔者来介绍一下mbedtls认识与使用 1、mbedtls认识 mbedtls&#xff08;Embedded TLS&#xff09;&#xff0c;是嵌入式里面实现的TLS协议&#xff0c;用C语言实现。相关的TLS协议以及加密等知识可以看笔者上一篇文章----嵌入式系统中的加解密签名。 基本特点如下图所示&#x…

【自监督学习】DINO in ICCV 2021

一、引言 论文&#xff1a; DINO: Emerging Properties in Self-Supervised Vision Transformers 作者&#xff1a; Facebook AI Research 代码&#xff1a; DINO 特点&#xff1a; 对于一张图片&#xff0c;该方法首先进行全局和局部的裁剪与增强并分别送入教师和学生网络&am…

tesla p100显卡显示资源不足,api调用失败

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

有关去中心化算路大模型的一些误区:低带宽互连导致训练速度太慢;小容量设备无法生成基础规模的模型;去中心化总是会花费更多;虫群永远不够大

目录 有关去中心化算路大模型的一些误区 低带宽互连导致训练速度太慢 挑战与解决方案 展望 小容量设备无法生成基础规模的模型 1. 模型规模与设备内存 2. 解决方案 3. 效率挑战 FSDP(Fully Sharded Data Parallel) Zero-3 去中心化总是会花费更多 虫群永远不够大…

git撤销push

1. 切换到刚刚push的分支 git checkout 分支名 2. 撤回最近一次的 push git revert HEAD 如果想要撤回多个提交&#xff0c;可以指定这些提交的版本号&#xff0c;例如&#xff1a; git revert <commit_hash1> <commit_hash2> ... 3. 执行 git revert 命令后…

SpringMVC源码分析

文章目录 概要启动阶段请求阶段 概要 以下是调试mvc源码过程中用到的demo以及配置文件 webapp/WEB-INF/web.xml <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi"http://…

二十五、常用API之String和StringBuilder

一、String类 Java 提供了 String 类来创建和操作字符串 String类就是&#xff1a;字符串类&#xff0c;java程序中的所有的字符串值”abc”都是该类的实例 、字符串是常量&#xff0c;值创建后不能更改 String 类包括的方法 可用于检查序列的单个字符、比较字符串、搜索字符…

java-类加载机制

Java 中的类加载机制是一种动态加载类的方式&#xff0c;主要负责将类的字节码从文件系统或网络中读取到 JVM 内部&#xff0c;并进行相应的解析、链接和初始化。类加载机制保证了 Java 程序在运行时能够动态加载所需的类。以下是 Java 类加载机制的几个关键概念和过程&#xf…

QImage显示图片像素

在Qt中&#xff0c;QImage 类是用来表示和处理图像的。如果你想查看或显示一个图片的像素数据&#xff0c;你可以使用 QImage 提供的方法来访问这些数据。以下是一些基本的方法来获取和显示图片的像素信息&#xff1a; 获取图像的像素格式&#xff1a; 使用 QImage::format() …

阶段三:项目开发---民航功能模块实现:任务24:航空实时监控

任务描述 内 容&#xff1a;地图展示、飞机飞行轨迹、扇区控制。航空实时监控&#xff0c;是飞机每秒发送坐标&#xff0c;经过终端转换实时发送给塔台&#xff0c;为了飞机位置的精准度&#xff0c;传输位置的密度很大&#xff0c;在地图位置显示不明显。本次为了案例展示效…

Linux基础知识(十六)shell脚本编程

一、简介 用户通过shell向计算机发送指令计算机通过shell给用户返回指令的执行结果 1.1 通过shell编程可以达到的效果 提高工作效率可以实现自动化 1.2 需要学习的内容 Linuxshell的语法规范 1.3 编写shell的流程 第一步&#xff1a;用vi/vim创建一个.sh的文件第二步&am…