01 基础入门 编写你的第一个 Go 语言程序

news2024/11/24 21:04:05

从这节课开始,我会带你走进 Go 语言的世界。我会用通俗易懂的语言,介绍 Go 语言的各个知识点,让你可以从零开始逐步学习,再深入它的世界。不管你以前是否接触过 Go 语言,都可以从这个专栏中受益。

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

Hello, 世界

如果你学过 C 语言,对这个经典的例子应该不会陌生。通过它,我先带你大概了解一下 Go 语言的一些核心理念,让你对 Go 语言代码有个整体的印象。如下所示:

ch01/main.go

 

package main import "fmt" func main() { fmt.Println("Hello, 世界") }

这五行代码就构成了一个完整的 Go 程序,是不是非常简单?现在我运行这段代码,看看输出的结果,方法是打开终端输入以下命令,然后回车。

go run ch01/main.go

Hello, 世界

其中 go run ch01/main.go 是我输入的命令,回车后看到的“Hello, 世界”是 Go 程序输出的结果。

代码中的 go 是一个 Go 语言开发工具包提供的命令,它和你平时常用的 ls 命令一样都是可执行的命令。它可以帮助你运行 Go 语言代码,并进行编译,生成可执行的二进制文件等

run 在这里是 go 命令的子命令,表示要运行 Go 语言代码的意思。最后的 ch01/main.go 就是我写的 Go 语言代码文件了。也就是说,整个 go run ch01/main.go 表示要运行 ch01/main.go 里的 Go 语言代码。

程序结构分析

要让一个 Go 语言程序成功运行起来,只需要 package main 和 main 函数这两个核心部分, package main 代表的是一个可运行的应用程序,而 main 函数则是这个应用程序的主入口。

在“Hello, 世界”这个简单的示例中,包含了一个 Go 语言程序运行的最基本的核心结构。我们以此为例,来逐一介绍程序的结构,了解 Go 语言的核心概念。

第一行的 package main 代表当前的 ch01/main.go 文件属于哪个包,其中 package 是 Go 语言声明包的关键字,main 是要声明的包名。在 Go 语言中 main 包是一个特殊的包,代表你的 Go 语言项目是一个可运行的应用程序,而不是一个被其他项目引用的库。

第二行的 import "fmt" 是导入一个 fmt 包,其中 import 是 Go 语言的关键字,表示导入包的意思,这里我导入的是 fmt 包,导入的目的是要使用它,下面会继续讲到。

第三行的 func main() 是定义了一个函数,其中 func 是 Go 语言的关键字,表示要定义一个函数或者方法的意思,main 是函数名,() 空括号表示这个 main 函数不接受任何参数。在 Go 语言中 main 函数是一个特殊的函数,它代表整个程序的入口,也就是程序在运行的时候,会先调用 main 函数,然后通过 main 函数再调用其他函数,达到实现项目业务需求的目的。

第四行的 fmt.Println("Hello, 世界") 是通过 fmt 包的 Println 函数打印“Hello, 世界”这段文本。其中 fmt 是刚刚导入的包,要想使用一个包,必须先导入。Println 函数是属于包 fmt 的函数,这里我需要它打印输出一段文本,也就是“Hello, 世界”。

第五行的大括号 } 表示 main 函数体的结束。现在整个代码片段已经分析完了,运行就可以看到“Hello, 世界”结果的输出。

从以上分析来看,Go 语言的代码是非常简洁、完整的核心程序,只需要 package、import、func main 这些核心概念就可以实现。 在后面的课时中,我还会讲如何使用变量,如何自定义函数等,这里先略过不讲,我们先来看看 Go 语言的开发环境是如何搭建的,这样才能运行上面的 Go 语言代码,让整个程序跑起来。

Go 语言环境搭建

要想搭建 Go 语言开发环境,需要先下载 Go 语言开发包。你可以从官网 https://golang.org/dl/ 和 https://golang.google.cn/dl/ 下载(第一个链接是国外的官网,第二个是国内的官网,如果第一个访问不了,可以从第二个下载)。

下载时可以根据自己的操作系统选择相应的开发包,比如 Window、MacOS 或是 Linux 等,如下图所示:

Windows MSI 下安装

MSI 安装的方式比较简单,在 Windows 系统上推荐使用这种方式。现在的操作系统基本上都是 64 位的,所以选择 64 位的 go1.15.windows-amd64.msi 下载即可,如果操作系统是 32 位的,选择 go1.15.windows-386.msi 进行下载。

下载后双击该 MSI 安装文件,按照提示一步步地安装即可。在默认情况下,Go 语言开发工具包会被安装到 c:\Go 目录,你也可以在安装过程中选择自己想要安装的目录。

假设安装到 c:\Go 目录,安装程序会自动把 c:\Go\bin 添加到你的 PATH 环境变量中,如果没有的话,你可以通过系统 -> 控制面板 -> 高级 -> 环境变量选项来手动添加。

Linux 下安装

Linux 系统同样有 32 位和 64 位,你可以根据你的 Linux 操作系统选择相应的压缩包,它们分别是 go1.15.linux-386.tar.gz 和 go1.15.linux-amd64.tar.gz。

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

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

输入后回车,然后输入你的电脑密码,即可解压到 /usr/local 目录,然后把 /usr/local/go/bin 添加到 PATH 环境变量中,就可以使用 Go 语言开发工具包了。

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

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

macOS 下安装

如果你的操作系统是 macOS,可以采用 PKG 安装包。下载 go1.15.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 version

go version go1.15 darwin/amd64

环境变量设置

Go 语言开发工具包安装好之后,它的开发环境还没有完全搭建完成,因为还有两个重要的环境变量没有设置,它们分别是 GOPATH 和 GOBIN。

  • GOPATH:代表 Go 语言项目的工作目录,在 Go Module 模式之前非常重要,现在基本上用来存放使用 go get 命令获取的项目。

  • GOBIN:代表 Go 编译生成的程序的安装目录,比如通过 go install 命令,会把生成的 Go 程序安装到 GOBIN 目录下,以供你在终端使用。

假设工作目录为 /Users/flysnow/go,你需要把 GOPATH 环境变量设置为 /Users/flysnow/go,把 GOBIN 环境变量设置为 $GOPATH/bin。

在 Linux 和 macOS 下,把以下内容添加到 /etc/profile 或者 $HOME/.profile 文件保存即可。

export GOPATH=/Users/flysnow/go

export GOBIN=$GOPATH/bin

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

项目结构

采用 Go Module 的方式,可以在任何位置创建你的 Go 语言项目。在整个专栏中,我都会使用这种方式演示 Go 语言示例,现在你先对 Go Module 项目结构有一个大概了解,后面的课时我会详细地介绍 Go Module。

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

cd /Users/flysnow/git/gotour

然后再执行如下命令创建一个 Go Module 项目:

go mod init

执行成功后,会生成一个 go.mod 文件。然后在当前目录下创建一个 main.go 文件,这样整个项目目录结构是:

 

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

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

编译发布

完成了你的项目后,可以编译生成可执行文件,也可以把它发布到 $GOBIN 目录,以供在终端使用。以“Hello 世界”为例,在项目根目录输入以下命令,即可编译一个可执行文件。

go build ./ch01/main.go

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

./main

Hello, 世界

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

以上生成的可执行文件在当前目录,也可以把它安装到 $GOBIN 目录或者任意位置,如下所示:

go install ./ch01/main.go

使用 go install 命令即可,现在你在任意时刻打开终端,输入 main 回车,都会打印出“Hello, 世界”,是不是很方便!

跨平台编译

Go 语言开发工具包的另一强大功能就是可以跨平台编译。什么是跨平台编译呢?就是你在 macOS 开发,可以编译 Linux、Window 等平台上的可执行程序,这样你开发的程序,就可以在这些平台上运行。也就是说,你可以选择喜欢的操作系统做开发,并跨平台编译成需要发布平台的可执行程序即可。

Go 语言通过两个环境变量来控制跨平台编译,它们分别是 GOOS 和 GOARCH 。

  • GOOS:代表要编译的目标操作系统,常见的有 Linux、Windows、Darwin 等。

  • GOARCH:代表要编译的目标处理器架构,常见的有 386、AMD64、ARM64 等。

这样通过组合不同的 GOOS 和 GOARCH,就可以编译出不同的可执行程序。比如我现在的操作系统是 macOS AMD64 的,我想编译出 Linux AMD64 的可执行程序,只需要执行 go build 命令即可,如以下代码所示:

GOOS=linux GOARCH=amd64 go build ./ch01/main.go

关于 GOOS 和 GOARCH 更多的组合,参考官方文档的 $GOOS and $GOARCH 这一节即可。

Go 编辑器推荐

好的编辑器可以提高开发的效率,这里我推荐两款目前最流行的编辑器。

第一款是 Visual Studio Code + Go 扩展插件,可以让你非常高效地开发,通过官方网站 https://code.visualstudio.com/ 下载使用。

第二款是老牌 IDE 公司 JetBrains 推出的 Goland,所有插件已经全部集成,更容易上手,并且功能强大,新手老手都适合,你可以通过官方网站 https://www.jetbrains.com/go/ 下载使用。

总结

这节课中你学到了如何写第一个 Go 语言程序,并且搭建好了 Go 语言开发环境,创建好了 Go 语言项目,同时也下载好了 IDE 严阵以待,那么现在我就给你留个小作业:

改编示例“Hello 世界”的代码,打印出自己的名字。

下节课,我将为你介绍 Go 语言的变量、常量和基本类型,让你的 Go 语言程序更生动!

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

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

相关文章

TVBOX 最新版下载+视频源教程

下载链接 wx 搜索 Geek 前端 发送电视资源进行获取 操作教程

【论文复现|智能算法改进】基于多策略融合灰狼算法的移动机器人路径规划

目录 1.算法原理2.改进点3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】灰狼算法(GWO)原理及实现 2.改进点 混沌反向学习策略 融合Logistic混沌映射和Tent混沌映射生成Logistic-Tent复合混沌映射: Z i 1 { ( r Z i ( 1 − Z i ) ( 4 −…

程序员的核心职业素养:专业、沟通与持续学习

✨作者主页: Mr.Zwq✔️个人简介:一个正在努力学技术的Python领域创作者,擅长爬虫,逆向,全栈方向,专注基础和实战分享,欢迎咨询! 您的点赞、关注、收藏、评论,是对我最大…

报错 Cannot read properties of undefined(reading‘addEventListener‘)如何解决

我在制作项目中遇到了一个问题,给大家分享一下,如下图: 问题:这是我给一个input输入框绑定的监听事件出现的报错 翻译:无法读取未定义的属性(读取 addEventListener ) 错误原因:js中操作的dom元素的函数方…

几个小创新模型,KAN组合网络(LSTM、GRU、Transformer)时间序列预测,python预测全家桶...

截止到本期,一共发了8篇关于机器学习预测全家桶Python代码的文章。参考往期文章如下: 1.终于来了!python机器学习预测全家桶 2.机器学习预测全家桶-Python,一次性搞定多/单特征输入,多/单步预测!最强模板&a…

GStreamer 源码编译,在 Clion 下搭建调试环境

前言 最近在学习 GStreamer,官方提供了一些教程,本人希望能够断点调试,以便学习代码逻辑。本文记录如何在 Clion 搭建 GStreamer 源码编译、调试环境 步骤 下载源码 git clone https://gitlab.freedesktop.org/gstreamer/gstreamer.gitCl…

Android中的Audio系统框架分析(一)

概述 Audio系统是Android 平台重要的组成部分,我们将从以下几个方面来讲解: 一Audio基础知识讲解 二、Android系统中Audio框架 Audio基础知识讲解 我们大家知道声音是由物体振动产生的声波。是通过介质(空气或固体、液体)传播并…

【JKI SMO】框架讲解(一)

JKI State Machine是一款易于使用且功能强大的状态机模板,可以作为界面或者仪器工作流程的基础框架,但是他不能处理复杂系统的多任务并发机制,因为他是只能处理单个进程。 随之,JKI推出了基于面向对象封装的SMO框架,是…

hugo 博客写作流程 (二)

写作工具 推荐两款软件,本人都使用过: typora和obsidian typora: https://github.com/woniu336/typora-007 新建文章 在博客目录找到shell/quickstart.sh双击打开即可 发布到Github 前提: 魔法上网在Github新建一个仓库 找到shell/quickstart.sh双击打开,选择7.SSH 管理…

Linux系统安装Ruby语言

Ruby是一种面向对象的脚本语言,由日本的计算机科学家松本行弘设计并开发,Ruby的设计哲学强调程序员的幸福感,致力于简化编程的复杂性,并提供一种既强大又易于使用的工具。其语法简洁优雅,易于阅读和书写,使…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 6月16日,星期日

每天一分钟,知晓天下事! 2024年6月16日 星期日 农历五月十一 1、 国家网信办:将涉网络暴力违法情形记入用户信用记录。 2、 卫健委:超三成3岁以下婴幼儿家庭有入托需求,托育服务关注度持续上升。 3、 大陆对台134项关…

单片机与DHT11温湿度检测设计

本次设计是采用STC89C54单片机加上低成本的温湿度模块DHT11构成的温湿度检测系统。设计主要由硬件与软件两部分设计构成。硬件方面包括单片机STC89C54、温湿度模块DHT11、显示模块LCD1602、电池电源、I2C存储器以及控制按键等5个部分。此系统完全基于单片机最小系统并进行一定的…

英伟达与斯坦福携手,打造未来全息XR眼镜:头带时代的终结

在XR(扩展现实)技术的演进过程中,一个显著的挑战在于如何平衡设备的便携性与视觉体验。传统的XR设备由于需要厚重的头带固定光学器件和显示器,不仅增加了体积,还为用户带来了社交上的不便。然而,随着英伟达与斯坦福大学戈登韦茨斯坦教授领导的研究团队的合作,这一难题似…

极致深耕,打造核心竞争壁垒——探寻蓝思科技穿越周期的密码

作者 | 曾响铃 文 | 响铃说 一家企业,如何才能在时代变幻的风云中不计较一时得失,长期稳健发展,穿越周期?本期主题就来探寻一家在湖南的国际化企业的发展密码。 穿越周期的企业,都在坚持一个驱动发展的“原点” 细…

【新课程】PICO VR 交互开发指南

从PICO开始,迈向XR跨平台开发 Unity XR Interaction Toolkit (简称XRI)是一套跨平台的 XR 交互开发工具包,随着版本的更新与完善,逐渐获得了开发者的青睐。各 XR 平台逐步推荐开发者采用 XRI 作为首选的交互开发工具为…

【FreeRTOS】ARM架构汇编实例

目录 ARM架构简明教程1. ARM架构电脑的组成1.2 RISC1.2 提出问题1.3 CPU内部寄存器1.4 汇编指令 2. C函数的反汇编 学习视频 【FreeRTOS入门与工程实践 --由浅入深带你学习FreeRTOS(FreeRTOS教程 基于STM32,以实际项目为导向)】 https://www.…

每日一练——用队列实现栈

225. 用队列实现栈 - 力扣&#xff08;LeetCode&#xff09; Queue.h #pragma once #include<stdlib.h> #include<assert.h> #include<stdbool.h>typedef int QDataType;typedef struct QNode {QDataType data;struct QNode* next; } QNode;typedef struct …

【RabbitMQ】异步消息及Rabbitmq安装

https://blog.csdn.net/weixin_73077810/article/details/133836287 https://www.bilibili.com/video/BV1mN4y1Z7t9/ 同步调用和异步调用 如果我们的业务需要实时得到服务提供方的响应&#xff0c;则应该选择同步通讯&#xff08;同步调用&#xff09;。 如果我们追求更高的效…

【MySQL】在CentOS环境下安装MySQL

目录 一、卸载残留环境 二、获取官方yum源 三、安装yum源 四、安装MySQL 五、启动MySQL 一、卸载残留环境 输入 ps axj | grep mysql 查看是否存在正在运行的MySQL服务 如果有&#xff0c;则先输入 systemctl stop mysqld 来关闭服务 然后输入 rpm -qa | grep mysql 查看…

搭建k8s集群报错unknown command “\u00a0“ for “kubeadm init“

搭建k8s报错unknown command “\u00a0” for “kubeadm init” 网上搜了一下&#xff0c;是因为复制过来的命令前面包含了空格&#xff0c;将复制的命令放到idea可以清楚看到几个命令前面有空格&#xff0c;删除掉就好了&#xff0c;记录一下