(Go基础)Go的运行流程步骤与包的概念

1. 快速入门

在这里插入图片描述

所有的go开发,都必须存在并包含在某一个包内

.go 是go语言程序的后缀名

1.1 编译

通过使用 go build 命令对该go文件进行编译,生成.exe文件

在这里插入图片描述

1.2 运行

运行刚刚生成出来的test.exe文件既可,不过并不不是双击,而是在命令行中执行这个文件

在这里插入图片描述

你也可以不通过编译命令,直接运行,使用 go run 命令即可

但是在工作环境中,流程上还是必须要先编译,再运行

在这里插入图片描述

go run 命令,其实并没有跳过编译这个步骤

编译的步骤其实只是被隐藏了起来,没有创建出 **.exe这个文件 。

在底层中已经帮你完成了go build命令

2. 执行流程

在这里插入图片描述

  • 如果是对源码编译后,再执行,Go的执行流程则是上图中上侧的流程

  • 而如果是对源码直接执行 go run 源码,Go的执行流程则是上图中下侧的流程

区别:

  1. 如果我们先编译生成了可执行文件,那么我们可以将该可执行文件拷贝到没有Go开发环境的机器上,仍然可以运行
  2. 如果我们直接 go run go源代码,那么如果要在另外的一个机器上这么运行,也需要go开发环境,否则无法执行
  3. 在编译时,编译器会将程序运行依赖的库文件包含在可执行文件中,所以可执行文件变大了很多

3. 编译和运行的注意事项

  • 有了Go源文件,通过编译器将其编译成机器可以识别的二进制文件

  • 在该源文件目录下,通过go build 对 源文件 进行编译,可以指定生成的可执行文件名,在windows下必须是 .exe后缀

    go build -o 指定的文件名+后缀名 源代码名称+后缀名
    
  • 如果程序没有错误,没有任何提示,会在当前目录下出现一个可执行文件

    (windows下是.exe,linux下是一个可执行文件),该文件是二进制文件,也是可以被执行的程序

  • 如果程序有错误,在编译时,会在错误的那行报错

3.1 开发注意事项

  1. Go源文件以“go”为扩展名
  2. Go应用程序的执行入口是main()函数
  3. Go语言严格区分大小写
  4. Go方法由一条条语句构成,每个语句后不需要分号(Go语言会在每行后自动加分号),这也体现出Golang的简洁性
  5. Go编译器是一行行进行编译的,因此我们一行就写一条语句,不能把多条语句写在同一个,否则报错
  6. Go语言定义的变量或import的包如果没有使用到,带吧不能够编译通过
  7. 大括号都是成对出现的,缺一不可

关于注释:在go语言中,更加推荐行注释,而不是块注释

4. 导入

4.1 直接导入

package main // 把这个test.go 归属到mainimport "fmt" // 引入一个包 fmtfunc main() {// 打印fmt.Println("see,is\n","go!")
}

使用import "包名"进行导入包名,在go中,所有的显式导入操作最好都要使用它。

在这个例子中,导入了“fmt”包,使用了该包下的Println方法。

4.2 匿名导入

package mainimport _ "fmt" // 匿名导入func main() {}

如果只导入不调用,通常这么做是为了调用该包下的 init 函数

我们只需在导入包的前面加上**下划线_**就说明了该包是以匿名状态导入 import _ "包名"

4.3 批量导入

package main// 批量导入
import ("fmt"_ "fmt""math"
)func main() {fmt.Println(math.Abs(15))
}

使用括号,可以达到批量导入包的效果,当然,多行import引入包也是没问题的。

注意细节,匿名导入的包没有进行使用方法的权力,该例在调用Println方法时,重新再显式引入了一次fmt包

4.4 导入注意事项

在这里插入图片描述

在Go中,是严禁循环导入的。

不管是直接的还是间接的导入都是不允许的。

例如:

  • A导入了B,同时B也导入了A,那么这种就是直接循环导入
  • A导入了B,B导入了C,C导入了A,这种就是间接循环导入

在Go中存在循环导入的问题,将会无法通过编译

5. 导出

在Go中想暴露某个类,没有public和private这种对于方法或类的定义。

导出和访问控制都是通过命名来进行实现的。如果想要对外暴露一个函数或者一个变量,只需要将其名称首字母大写即可,例如该例子中的Test方法

package main// 方法名首字母大写:可以被包外访问
func Test() string {return "this is test...."
}

如果不想被访问,设置为私有的。那么将方法名设置为小写的即可

package main// 方法名首字母小写:不可以被包外访问
func test() string {return "this is test...."
}

对外暴露的函数和变量可以被包外的调用者导入和访问,如果是不对外暴露的话,那么仅包内的调用者可以访问,外部将无法导入和访问,该规则适用于整个Go语言,例如后续会学到的结构体及其字段,方法,自定义类型,接口等等。

6. 内部包

go中约定,一个包内名为internal 包为内部包,外部包将无法访问内部包中的任何内容,否则的话编译不通过,下面看一个例子。

/home/user/go/src/crash/bang/              (go code in package bang)b.gofoo/                   (go code in package foo)f.gobar/               (go code in package bar)x.gointernal/baz/           (go code in package baz)z.goquux/              (go code in package main)y.go

由文件结构中可知,crash包无法访问baz包中的类型。

7. 标识符

标识符就是一个名称,用于包命名,函数命名,变量命名等等,命名规则如下:

  • 只能由字母,数字,下划线组成
  • 只能以字母和下划线开头
  • 严格区分大小写
  • 不能与任何已存在的标识符重复,即包内唯一的存在
  • 不能与Go任何内置的关键字冲突
break        default      func         interface    select
case         defer        go           map          struct
chan         else         goto         package      switch
const        fallthrough  if           range        type
continue     for          import       return       var

其实,大部分的关键字的规则都基本一直

除了几个陌生的关键字:fallthrough、select、struct、range、defer…

8. 😍前篇知识回顾

  • Go的环境安装与开发工具配置

9. 💕👉 其他好文推荐

  • 还不了解Git分布式版本控制器?本文将带你全面了解并掌握
  • 带你认识Maven的依赖、继承和聚合都是什么!有什么用?
  • 2-3树思想与红黑树的实现与基本原理
  • !全网最全! ElasticSearch8.7 搭配 SpringDataElasticSearch5.1 的使用
  • 全面深入Java GC!!带你完全了解 GC垃圾回收机制!!
  • 全面了解Java的内存模型(JMM)!详细清晰!
  • 在JVM中,类是如何被加载的呢?本篇文章就带你认识类加载的一套流程!

全文资料学习全部参考于:Golang中文学习文档

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

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

相关文章

AI 写作(三)文本生成算法:创新与突破(3/10)

一、生成式与判别式模型:AI 写作的基石 (一)区别与特点 生成式模型和判别式模型在多个方面存在明显差异。在优化准则上,生成式模型致力于学习联合概率分布,而判别式模型则专注于建立输入数据和输出之间的关系&#xf…

ubuntu下使用pocketsphinx进行语音识别(包含交叉编译)

文章目录 前言一、pocketsphinx的介绍二、ubuntu下编译三、使用示例1.模型选择2.代码示例3.自定义字典 四、交叉编译总结 前言 由于工作需要语音识别的功能,环境是在linux arm版上,所以想先在ubuntu上跑起来看一看,就找了一下语音识别的开源…

中国自主品牌荣耀时刻:海豹荣获欧洲车身大奖

近日,在德国巴特瑙海姆举行的2024欧洲车身大会上,比亚迪海豹凭借其卓越的车身架构设计、创新技术和美学设计,一举斩获了本次大赛第三名的殊荣。 这不仅是中国自主品牌在欧洲车身大会上的首次获奖,而且也是比亚迪技术创新与实力在国…

RocketMQ 广播消息

所谓的广播消息就是发送的一条消息会被多个消费者收到。 ⼴播是向主题( topic )的所有订阅者发送消息。订阅同⼀个 topic 的多个消费者,能全量收到⽣产者发送的所有消息。 生产者发送了10个order,每个order里面有5个消息&#xff…

如何实现智慧园区的节能降耗?

江园科技智慧园区实现智慧园区节能降耗可以从以下几个方面入手: 能源监测与管理系统 - 安装智能电表、水表和气表等设备,实时精准地监测园区内各区域、各企业及各设备的能源消耗情况,如电量的峰谷时段使用量、用水量的波动等。这些数据会传输…

索引【MySQL】

文章目录 聚簇索引 VS 非聚簇索引索引MySQL与磁盘交互的基本单位主键索引索引操作唯一索引的创建普通索引的创建复合索引 索引创建原则 聚簇索引 VS 非聚簇索引 MyISAM存储引擎 - 主键索引结构 MyISAM存储引擎同样采用B树作为索引的基本数据结构 与InnoDB存储引擎的B树不同的…

CDH大数据平台部署

二、CDH简介 全称Cloudera’s Distribution Including Apache Hadoop。 hadoop的版本 (Apache、CDH、Hotonworks版本) 在公司中一般使用cdh多一些(收费的)、也有公司使用阿里云大数据平台、微软的大数据平台。 国内也有一些平台:星环大数…

如何删除苹果手机所有照片:彻底清理指南

随着时间的推移,我们的iPhone往往会积累大量照片,这些照片占据了大量存储空间并可能影响设备性能。有时,为了快速释放空间或重置手机内容,您可能需要了解如何删除苹果手机所有照片。别担心,本文将向你讲解如何删除苹果…

JAVA开源项目 服装销售平台 计算机毕业设计

博主说明:本文项目编号 T 054 ,文末自助获取源码 \color{red}{T054,文末自助获取源码} T054,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…

Spire.PDF for .NET【页面设置】演示:获取 PDF 文件中的页数

计算 PDF 文件中的页数对于各种目的都至关重要,例如确定文档长度、组织内容和评估打印要求。除了使用 PDF 查看器了解页数信息外,您还可以通过编程自动执行该任务。在本文中,您将学习如何使用C#通过Spire.PDF for .NET获取 PDF 文件中的页数。…

面试总结!

OSI七层模型: 什么是OSI七层模型? 我们需要了解互联网的本质是一系列的网络协议,这个协议就叫做OSI协议(开放系统互联(Open System Interconnection)),它是由ISO(国际标准化组织&…

LeetCode:102. 二叉树的层序遍历(java)

目录 题目描述: 代码: 第一种: 第二种: TreeNode: LinkedListNode: 题目描述: 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 1: 输入:root [3,9,…

R语言实战——一些批量对地理数据进行操作的方法

各位朋友在进行数据处理时,当有多张栅格影像时,如果我们都要进行同一操作时,一张一张做很繁琐,用ArcGIS模型构建器是一种比较好的方法。当然,今天小编新学了R语言上面进行批量裁剪,一起来学习一下吧&#x…

TEMU测评:在挑战与机遇中寻求突破

近年来,TEMU(由拼多多推出的海外电商平台)在全球范围内迅速崛起,特别是在美国市场,其以极具竞争力的价格和丰富的商品种类吸引了大量海外消费者。然而,随着市场竞争的加剧和外部环境的变化,TEMU…

BIM 地铁站智能可视化应用

运用图扑数字孪生结合建筑信息建模(BIM)技术,提供地铁站结构和设施的全方位三维可视化展示。支持施工方案优化、进度管理及协同操作,提高设计精度和施工效率,保障地铁项目的全生命周期管理。

C++研发笔记12——C语言程序设计初阶学习笔记10

本篇笔记是一篇练习文章,是对第二部分《初识C语言》的一个回顾,从而结束第二部分的学习。 题目一 关于C语言关键字说法正确的是:( ) A.关键字可以自己创建 B.关键字不能自己创建 C.关键字可以做变量名 D.typedef不是关键字 【参考答案…

【论文笔记】SparseRadNet: Sparse Perception Neural Network on Subsampled Radar Data

原文链接:https://arxiv.org/abs/2406.10600 简介:本文引入自适应子采样方法和定制网络,利用稀疏性模式发掘雷达信号中的全局和局部依赖性。本文的子采样模块选择 RD谱中在下游任务贡献最大 像素 的子集。为提高子采样数据的特征提取&#xf…

【IEEE出版|连续5年稳定EI检索|易中稿!近距离交流院士、Fellow!】第六届国际科技创新学术交流大会暨机械工程与自动化国际学术会议(MEA 2024)

第六届国际科技创新学术交流大会暨机械工程与自动化国际学术会议(MEA 2024) 2024 6th International Conference on Mechanical Engineering and Automation 重要信息 会议官网:mea2024.iaecst.org(会议关键词:MEA 2…

计算机图形学论文 | 木工设计与制造计划的共同优化

🦌🦌🦌读论文 我们的系统共同探索离散设计变量和制造计划的空间,以生成(设计,制造计划)对的帕累托前沿,使制造成本最小化。在该图中,(a)是椅子的输入设计和仅探索该设计的…

Kubernetes-ArgoCD篇-02-安装

1、安装 1.1 Argo CD CLI mac安装: brew install argocd通用安装: # 查看os go env GOOS # 查看架构 go env GOARCHargoCdName"argocd-darwin-arm64" # 此步骤也可以手动下载 wget https://github.com/argoproj/argo-cd/releases/latest/d…