Loading [MathJax]/jax/output/CommonHTML/fonts/TeX/AMS-Regular.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Go语言:1分钟写下第一个Go程序,并在终端里以指令方式运行

Go语言:1分钟写下第一个Go程序,并在终端里以指令方式运行

作者头像
LIYI
发布于 2021-01-27 04:43:44
发布于 2021-01-27 04:43:44
1.7K00
举报
文章被收录于专栏:艺述论专栏艺述论专栏
运行总次数:0

这是《Go语言简易入门》系列内容第5篇,所有内容列表见:https://yishulun.com/books/go-easy/目录.html

设置环境变量$GOPATH、$PATH

从官网(https://golang.org/dl/,国内可以从https://studygolang.com/dl下载)下载了Go语言安装包,并安装以后,此时在终端里执行指令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
go version

一般都可以显示版本号了。此时编写一个简单的go语言文件,也可以运行。

但此时Go语言完全运行所需的环境变量还没有完全准备就绪。一般我们在环境变量中,还需要设置一个名称为GOPATH的用户变量或系统变量,同时还需要将PATH的路径中。

在macOS上,我们可以在~/.bash_profile中设置用户变量,也可以在/etc/profile中设置系统变量。在Windows上,我们可以通过计算机属性->高级属性->设置变量进行设置。

$PATH路径的设置与之同理。

为什么要设置环境变量?

GOPATH变量不设置,不影响运行,它在Go语言安装包默认安装后有一个~/go的默认地址,但PATH的路径中。这是所有开发者自安装的Go语言第三方类库所生成的工具指令,在系统上能够被查到的基础,如果不设置,系统不知道去哪里查找我们在终端里随意写出的指令名称。

举个例子,gin是一个Go语言编写的为Go程序提供热编译功能的工具。在使用它的时候,我们首先需要安装它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
go get github.com/codegangsta/gin

然后,假设我们本地有一个main.go,可以这样执行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gin run main.go // 启用热编译

此时用gin代替go,运行main.go,当我们修改了后者的代码以后,gin可以帮助我们自动重新编译并启动后者。这是gin的作用。

但是如果我们没有将PATH路径中,上面的gin指令就运行不了,它会提示一个“指令找不到”的错误。

go get可以帮助我们自动拉取类库源码,及目标类库所依赖的类库源码(放在了GOPATH/bin路径下。如果我们不在

如何验证环境变量?

所有环境变量设置完成以后,怎么验证呢?可以在终端里,可以使用go env查看所有Go语言相关的环境变量了。当然了,也可以单独使用echo查看特定的环境变量。如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
go env // 查看所有go语言环境变量
go version // 查看版本
echo $PATH | grep /go/bin
echo $GOPATH

补充:go get指令到底做了哪些事情?

一个go get指令在执行后,相当于执行了以下步骤:

  1. git clone,将所有目标类库源码,及目标类库所依赖的源码下载到本地
  2. 开始执行go install,第一步是编译目标类库导入的包文件,所有被依赖的包文件被编译后,才能编译目标类库
  3. 开始编译目标类库的主程序,并将编译之后的可执行文件,拷贝至$GOPATH/bin目录下。如果目标类库是工具,它一定有一个main函数。

在终端里运行第一个Go程序

既然我们已经了解了如何在终端里执行额外的指令,接上来我们自己用Go语言写一个简单的程序,然后在终端里执行。

首先我们创建一个文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir -p $GOPATH/rixingyike/first/main.go

并编辑代码为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package main

import "fmt"

func main() {
    fmt.Printf("hi,ly\n")
}

现在我们执行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export GO111MODULE=off
go install rixingyike/first

正样的话现在$GOPATH/bin目录下已经多了一个名称为first的二进制可执行文件。在终端里可以执行它了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
first // output: hi,ly

在上面我们编译源码之前,为什么要先设置Go环境变量GO111MODULE等于off呢?可以把它设置为on,再试一下。这关系到Go语言的模式化,以下再讲。

我讲明白没有,欢迎留言。

2021年1月21日

本文撰写过程中参考了以下链接,一并致谢:

  • https://blog.csdn.net/qq_34777600/article/details/81319961
  • https://go-zh.org/doc/code.html
  • https://github.com/codegangsta/gin

本文有视频,请查看“程序员LIYI”视频号的“#Go语言简易入门”标签:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 艺述论 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Spring事务专题(五)聊聊Spring事务到底是如何实现的
在上篇文章中我们一起学习了Spring中的事务抽象机制以及动手模拟了一下Spring中的事务管理机制,那么本文我们就通过源码来分析一下Spring中的事务管理到底是如何实现的,本文将选用Spring5.2.x版本。
程序员DMZ
2020/08/18
1.5K0
Spring事务专题(五)聊聊Spring事务到底是如何实现的
Spring事务源码解析
2.1.4. TransactionManagementConfigurationSelector
爱撒谎的男孩
2019/12/31
1.4K0
Spring 源码分析:不得不重视的 Transaction 事务
业务系统的数据,一般最后都会落入到数据库中,例如 MySQL、Oracle 等主流数据库,不可避免的,在数据更新时,有可能会遇到错误,这时需要将之前的数据更新操作撤回,避免错误数据。
纯洁的微笑
2019/07/26
1.8K0
Spring 源码分析:不得不重视的 Transaction 事务
Spring源码:事务管理流程分析
事务Transaction,它是一系列严密操作动作,要么都操作完成,要么都回滚撤销。
后台技术汇
2024/10/15
2750
Spring源码:事务管理流程分析
这一次搞懂Spring事务是如何传播的
上一篇分析了事务注解的解析过程,本质上是将事务封装为切面加入到AOP的执行链中,因此会调用到MethodInceptor的实现类的invoke方法,而事务切面的Interceptor就是TransactionInterceptor,所以本篇直接从该类开始。
夜勿语
2020/09/07
6170
上盘硬菜,@Transaction源码深度解析 | Spring系列第48篇
大家好,今天咱们通过源码来了解一下spring中@Transaction事务的原理。
路人甲Java
2020/10/26
7450
【小家Spring】Spring事务相关的基础类打点(spring-jdbc和spring-tx两个jar),着重讲解AnnotationTransactionAttributeSource
本篇博文定位为为事务相关的其余博文的工具博文,属于Spring事务相关的基础类的打点、扫盲篇。
YourBatman
2019/09/03
1.2K0
【小家Spring】Spring事务相关的基础类打点(spring-jdbc和spring-tx两个jar),着重讲解AnnotationTransactionAttributeSource
Spring事务是怎么通过AOP实现的
阅读此文章需要掌握一定的AOP源码基础知识,可以更好的去理解事务,我在另外一篇文章有提过。
@派大星
2023/07/15
4330
Spring事务是怎么通过AOP实现的
Spring事务AOP实现原理
此篇文章需要有SpringAOP基础,知道AOP底层原理可以更好的理解Spring的事务处理。
用户4283147
2022/10/08
6210
Spring事务AOP实现原理
Spring Transaction,从入门到上瘾
Spring Transaction 针对JDBC API中关于事务管理这一部分进行了高级抽象,它支持两种方式的事务管理,分别是:声明式事务管理 (Declarative Transaction Management) 与 编程式事务管理 (Programmatic Transaction Management) 。声明式事务管理由@Transactional注解来承载,而编程式事务管理则由TransactionManager或TransactionTemplate来实现 (推荐使用后者) 。基于注解的声明式事务管理方式既简洁又优雅,可以有效收敛横切关注逻辑,但极尽简洁的背后却也暗藏陷阱,比如:大事务、事务未正常回滚等。相较于声明式事务管理,编程式事务管理方式对事务粒度的把控更为灵活,这往往很有必要!
程序猿杜小头
2022/12/01
7510
Spring Transaction,从入门到上瘾
Spring AOP事务01
XML中的tx:annotation-driven 注解用于开启事务,在TxNameSpaceHandler 中,进行自注册增强,springboot 是通过 @EnableTransactionManagement进行注册和解析
用户3293499
2024/09/01
2270
Spring事务增强器 二,一篇文章让你彻底搞懂Spring事务,虽然很长但是干货满满
上一篇文章主要讲解了事务的Advisor是如何注册进Spring容器的,也讲解了Spring是如何将有配置事务的类配置上事务的,也讲解了Advisor,pointcut验证流程;但是还未提到的那个Advisor里面的advice,想要知道这个我们就先来看一下TransactionInterceptor这个类吧:
@派大星
2023/07/15
5600
Spring事务增强器 二,一篇文章让你彻底搞懂Spring事务,虽然很长但是干货满满
Spring事务源码解析(二)获取增强
在上一篇文章@EnableTransactionManagement注解解析中,我们搭建了源码阅读的环境,以及解析了开启Spring事务功能的注解@EnableTransactionManagement的实现逻辑
Java学习录
2019/09/02
6150
spring5.x-声明式事务原理及源码实现
Spring框架提供了对事务的支持,使得开发者能够在应用程序中轻松地管理事务的边界、控制事务的传播行为和事务的隔离级别。Spring事务的原理主要基于两个关键概念:事务管理器和切面。
逍遥壮士
2023/09/01
7430
spring5.x-声明式事务原理及源码实现
(七)Spring源码解析:Spring事务
对于事务来说,是我们平时在基于业务逻辑编码过程中不可或缺的一部分,它对于保证业务及数据逻辑原子性立下了汗马功劳。那么,我们基于Spring的声明式事务,可以方便我们对事务逻辑代码进行编写,那么在开篇的第一部分,我们就来用一个示例,来演示一下Spring事务的编写方式。
爪哇缪斯
2023/09/06
3520
(七)Spring源码解析:Spring事务
Spring 事务初始化源码分析
在上篇文章 Spring 事务使用详解 中详细介绍了 Spring 事务的使用过程,今天就来看下 Spring 事务是如何来实现,比如 Spring 事务在初始化的时候做了什么,Spring 事务是如何进行事务的提交和回滚的;为了避免篇幅太长,所以分开两篇文章进行分析,这篇文章先来分析下 Spring 事务是如何初始化的,在初始化的时候做了什么。
Java技术编程
2020/05/20
5480
Spring事务原理详解
spring事务开启和使用比较简单,需要有数据源和事务管理器,然后在启动门面类上开启事务,在需要使用事务的地方添加注解就可以了,我们简单做一下回顾。
叔牙
2022/01/04
8583
Spring事务原理详解
最新整理源码面试题
  JavaWeb中的框架是一种开发工具或者平台,它提供了一系列的功能和组件,用于简化和加速Web应用的开发过程。框架可以提供一些基础设施,如数据库访问、用户认证和授权、日志记录等,以及一些高级功能,如MVC模式、依赖注入、AOP等。
用户4919348
2023/10/02
3530
最新整理源码面试题
Spring事务(下)
用来解决并发事务时出现的问题,其使用TransactionDefinition中的静态变量来指定
码农戏码
2021/03/23
9650
spring事务源码解析
  在spring jdbcTemplate 事务,各种诡异,包你醍醐灌顶!最后遗留了一个问题:spring是怎么样保证事务一致性的? 当然,spring事务内容挺多的,如果都要讲的话要花很长时间,而本片博客的主旨是解决上一篇博客遗留的问题,那么我们把问题细化下来, 就是spring如何保证一个事务中的jdbc connection是同一个?
青石路
2018/09/10
1.1K0
spring事务源码解析
相关推荐
Spring事务专题(五)聊聊Spring事务到底是如何实现的
更多 >
交个朋友
加入腾讯云官网粉丝站
双11活动抢先看 更有社群专属礼券掉落
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档