第一个 Go 程序“hello,world“ 与 main 函数
第一个 Go 程序"hello,world" 与 main 函数
文章目录
- 第一个 Go 程序"hello,world" 与 main 函数
- 一.创建“hello,world”示例程序
- 二. “hello,world” 程序结构拆解
- 三、main 函数
- 四、Go 语言中程序是怎么编译的?
一.创建“hello,world”示例程序
创建一个叫做 main
的 go
文件。
mkdir syntax/helloworld // 创建存储helloworld示例的文件夹
啰嗦一下 Go 的命名规则。Go 源文件总是用全小写字母形式的短小单词命名,并且以.go 扩展名结尾。以下是Go文件命名规则的主要要点:
- 使用小写字母:Go文件名应该使用小写字母,不推荐使用大写字母或驼峰命名法。这是因为Go的命名约定中,使用大写字母开头的标识符是公有的,而使用小写字母开头的标识符是私有的。
- 下划线不推荐:虽然Go允许在文件名中使用下划线字符(
_
),但不推荐在文件名中使用下划线。通常,Go文件名应该是简单的单词,以描述文件内容或包功能为主。 - 使用有意义的文件名:文件名应该能够清晰地表达文件的用途和内容。这有助于提高代码的可读性和维护性。
- 避免特殊字符和空格:文件名中不应包含特殊字符、空格或其他不允许的字符。
- 避免关键字:文件名不应与Go的关键字(例如
if
、else
、for
等)冲突。
如果要在源文件的名字中使用多个单词,我们通常直接是将多个单词连接起来作为源文件名,而不是使用其他分隔符,比如下划线。也就是说,我们通常使用 helloworld.go 作为文件名而不是 hello_world.go。
因为下划线这种分隔符,在 Go 源文件命名中有特殊作用,在Go语言中使用下划线作为源文件命名的分隔符,主要是为了进行包范围控制,避免命名冲突。
这里我们创建一个名为 main.go 的源文件
touch syntax/helloworld/main.go
打开刚刚创建的 main.go 文件,键入下面这些代码:
package mainimport "fmt"func main() {fmt.Println("hello, world")
}
写完后,我们保存文件并回到终端窗口,然后在 Linux 或 macOS 系统中,你就可以通过输入下面这个命令来编译和运行这个文件了:
go build main.go
./main
如果是在 Windows 系统中呢,你需要把上面命令中的./main
替换为.\main.exe
。
go build main.go
main.exe
输出结果如下:
二. “hello,world” 程序结构拆解
首先,第一个值得注意的部分是这个:
package main
这行代码定义了 Go 中的一个包 package
。包是 Go
语言的基本组成单元,通常使用单个的小写单词命名,一个 Go 程序本质上就是一组包的集合。所有 Go 代码都有自己隶属的包,在这里我们的“hello,world”示例的所有代码都在一个名为 main 的包中。main 包在 Go 中是一个特殊的包,整个 Go 程序中仅允许存在一个名为 main 的包。
**主程序函数:**main 包中的主要代码是 main 函数:
func main() {fmt.Println("hello, world")
}
main入口:
- 这里的 main 函数就是当你运行一个可执行的 Go 程序的时候,所有的代码都会从这个入口函数开始运行。
- 这段代码的第一行声明了一个名为 main 的、没有任何参数和返回值的函数。如果你需要给函数声明参数的话,那么就必须把它们放置在圆括号 () 中。
导入包
import "fmt"
在 main 函数体中,通过 fmt 这个限定标识符(Qualified Identifier)调用 Println 函数。虽然两处都使用了“fmt”这个字面值,但在这两处“fmt”字面值所代表的含义却是不一样的:
- import “fmt” 一行中“fmt”代表的是包的导入路径(Import),它表示的是标准库下的 fmt 目录,整个 import 声明语句的含义是导入标准库 fmt 目录下的包;
- fmt.Println 函数调用一行中的“fmt”代表的则是包名。
通常导入路径的最后一个分段名与包名是相同的,这里很容易让人误解 import 声明语句中的“fmt”指的是包名,其实并不是这样的,只有 fmt.Println 函数调用一行中的“fmt”代表的则是包名。
main 函数体中之所以可以调用 fmt 包的 Println 函数,还有最后一个原因,那就是 Println 函数名的首字母是大写的。在 Go 语言中,只有首字母为大写的标识符才是导出的(Exported),才能对包外的代码可见;如果首字母是小写的,那么就说明这个标识符仅限于在声明它的包内可见。
三、main 函数
- Go语言程序的默认入口函数(主函数):
func main()
- main函数只能用于main包中,且只能定义一个。
四、Go 语言中程序是怎么编译的?
刚刚我在运行"hello, world"程序之前,输入了 go build 命令,还有它附带的源文件名参数来编译它:
$go build main.go
打开终端,可以通过输入下面这个 ls 命令看到刚刚生成的可执行文件:
$ls
main main.go
和python 等其他语言不通的是,最终将mian
运行在没有安装 Go 的环境中。如果是python 项目的话还需要安装python解释器和项目依赖等。
Go 是一种编译型语言,这意味着只有你编译完 Go 程序之后,才可以将生成的可执行文件交付于其他人吗,Go程序的编译过程可以总结为以下几个关键步骤:
- 词法与语法分析:编译器首先解析源代码文件 , 将代码转换成Token序列 , 然后按照语言定义的文法规则生成抽象语法树(AST) 。
- 类型检查:编译器对AST进行类型检查 , 验证变量 、 常量 、 函数等的类型正确性 , 同时对一些内置函数进行展开和处理 。
- 中间代码生成:经过类型检查后 , 编译器将AST转换成中间代码 , 使用了SSA(Static Single Assignment Form)特性 , 有助于代码优化 。
- 机器码生成:最后 , 编译器根据目标机器的架构(如amd64 、 arm 、 x86等)生成相应的机器码 , 使程序可以在不同的硬件上运行 。
具体请参考链接:Go程序是如何编译运行的
相关文章:
![](https://img-blog.csdnimg.cn/img_convert/1635b50e05d013da1890bf0cc47e314d.png)
第一个 Go 程序“hello,world“ 与 main 函数
第一个 Go 程序"hello,world" 与 main 函数 文章目录 第一个 Go 程序"hello,world" 与 main 函数一.创建“hello,world”示例程序二. “hello,world” 程序结构拆解三、main 函数四、Go 语言中程序是怎么编译…...
![](https://www.ngui.cc/images/no-images.jpg)
MySQL缓冲池Buffer Pool
前言 在应用系统中,为加速数据访问,会把高频的数据放在「缓存」(Redis、MongoDB)里,减轻数据库的压力。在操作系统中,为了减少磁盘IO,同时为了快速响应,引入了「缓冲池」(buffer pool)机制。 MySQL…...
![](https://img-blog.csdnimg.cn/3bb96ff50aaa4dc9b3119aeb63782f38.png)
springboot实现发送邮箱验证码
准备工作 在邮箱官网开放SMTP授权,获取相应密钥,才可以进行发送邮件 这里以网易163邮箱为例,登录邮箱后,依次点击“设置-POP3/SMTP/IMAP” ,然后开启SMTP服务。这时候会提示一个授权码,例如:H…...
![](https://img-blog.csdnimg.cn/1518b1f3b1ea4a86a07edab1ac398fea.jpeg#pic_center)
ESP8266使用记录(三)
通过udp把mpu6050数据发送到PC端 /********************************************************************** 项目名称/Project : 零基础入门学用物联网 程序名称/Program name : ESP8266WiFiUdp_12 团队/Team : 太极创客团队 / Taichi-Maker (w…...
![](https://img-blog.csdnimg.cn/img_convert/5b51d24960a4533a68f4ed38059b1ca1.png)
基于微信小程序的在线视频课程学习平台设计与实现(源码+lw+部署文档+讲解等)
文章目录 前言用户微信端的主要功能有:管理员的主要功能有:具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉…...
![](https://www.ngui.cc/images/no-images.jpg)
CloudCompare 二次开发(15)——点云添加高斯噪声
目录 一、概述二、代码集成三、结果展示一、概述 不依赖任何第三方点云相关库,使用CloudCompare编程实现点云添加高斯噪声。添加高斯噪声的算法原理见:PCL 点云添加高斯噪声并保存。 二、代码集成 1、mainwindow.h文件public中添加: void doActionAddGassNoise(); //…...
![](https://www.ngui.cc/images/no-images.jpg)
一波免费、好用的API接口分享
全国快递物流地图轨迹查询:【H5物流轨迹、单号识别】通过物流单号和收寄件地址,自动评估物流时效,并在地图中展示包裹运输轨迹。包括顺丰、圆通、申通等主流快递公司。自动识别快递公司及单号,实时查询,稳定高效&#…...
![](https://www.ngui.cc/images/no-images.jpg)
Android App ~ LiveData
LiveData 两种更新数据方式 setValue(T value)postValue(T value) setValue()只能在主线程中调用,postValue()可以在任何线程中调用。 MutableLiveData 1.首先LiveData其实与数据实体类(POJO类)是一样的东西,它负责暂存数据. 2.其次LiveData其实也是一个观察者…...
![](https://img-blog.csdnimg.cn/img_convert/cfc3f426e5ac47bd4fb6f9aa092edbb2.jpeg)
全球第4大操作系统(鸿蒙)的软件后缀.hap
system exe 2022-12-01 04:38:38 首页 > 操作系统 145|0条评论 鸿蒙OS兼容已有安卓程序:这事不稀奇。 其实一个系统兼容另外系统的可执行程序并非新鲜事,比如linux下的wine和crossover可以兼容许多win系统的.exe程序。 作为回应,Wind…...
![](https://www.ngui.cc/images/no-images.jpg)
算法练习第六十四天
LCR 184. 设计自助结算系统 - 力扣(LeetCode) 总结:利用一个双端维护队列一个往后递减的队列,对头是最大值,每次进入一个新值时就一直和队尾元素比较将比新的值小的数排出,这样能保证留在队列中的数都是会…...
![](https://img-blog.csdnimg.cn/e78a83ba00d8447cb901e5370335f0b0.png)
安卓系列机型 框架LSP 安装步骤 支持多机型 LSP框架通用安装步骤【二】
安卓玩机教程---全机型安卓4----安卓12 框架xp edx lsp安装方法【一】 低版本可以参考上个博文了解相关安装方法。 LSP框架优点 简单来说装lsp框架的优点在于可以安装各种模块。包括 但不限于系统优化 加速 游戏开挂等等的模块。大致相当于电脑的扩展油猴 Lspos…...
![](https://www.ngui.cc/images/no-images.jpg)
实现一个宽高自适应的正方形
.square {width: 10%;height: 10vw;background: tomato; }.square {width: 20%;height: 0;padding-top: 20%;background: orange; }.square {width: 30%;overflow: hidden;background: yellow; } .square::after {content: ;display: block;margin-top: 100%; }...
![](https://img-blog.csdnimg.cn/49278d17d88841768824aeb6a765da86.png)
shell脚本命令
Shell命令是在类Unix操作系统中使用的命令行解释器(shell)中执行的命令。Shell命令可以用于执行系统命令、操作文件、进行文本处理、管理进程等。以下是一些常见的Shell命令: 1. ls:列出当前目录下的文件和文件夹。 2. cd&#x…...
![](https://www.ngui.cc/images/no-images.jpg)
Vue2023 面试归纳及复习(2)
1 vue3中的动态组件和KeepAlive组件 动态组件component <component>动态组件是一种可以根据数据变化而动态加载不同组件的方式。使用动态组件可以有效地减少代码复杂度,提高组件的复用性和灵活性。 动态组件通过一个特殊的属性is来实现动态加载,…...
![](https://img-blog.csdnimg.cn/d4e2d1cec19846dfbad2d39b89355253.png)
idea 本地项目上传到 Git 步骤
第一步:菜单栏 VCS——>import into Version control——>Create git Repository——>弹出框找到选中自己项目——>点击Ok 第二步:选中项目右键 ——>git——>Add 文件会变成绿色表示成功 第三步:VCS——>commit——>ok 提交到…...
![](https://img-blog.csdnimg.cn/830f40d884774d34bdbb472ba2e8942e.gif#pic_center)
【从0学习Solidity】41. WETH
【从0学习Solidity】41. WETH 博主简介:不写代码没饭吃,一名全栈领域的创作者,专注于研究互联网产品的解决方案和技术。熟悉云原生、微服务架构,分享一些项目实战经验以及前沿技术的见解。关注我们的主页,探索全栈开发…...
![](https://img-blog.csdnimg.cn/6088238931264b9881acd9a6506e7aa4.png)
微信小程序的无限瀑布流写法
微信小程序的无限瀑布流实现总算做完了,换了好几种方法,过程中出现了各种BUG。 首先官方有瀑布流的插件(Skyline /grid-view),不是原生的我就不想引入,因为我的方块流页面已经搭好了,引入说不定…...
![](https://img-blog.csdnimg.cn/5b0aa0d2e3674056969f922300b90697.gif)
前有CAP理论,后有BASE理论,分布式系统理论基石
🧑💻作者名称:DaenCode 🎤作者简介:CSDN实力新星,后端开发两年经验,曾担任甲方技术代表,业余独自创办智源恩创网络科技工作室。会点点Java相关技术栈、帆软报表、低代码平台快速开…...
![](https://img-blog.csdnimg.cn/fe458e7a067f41e18f98efb018247431.jpeg)
HTTP、TCP、SOCKET三者之间区别和原理
7层网络模型 网络在世界范围内实现互联的标准框架 7层为理想模型,一般实际运用没有7层 详细内容 HTTP属于7层应用层 BSD socket属于5层会话层 TCP/IP属于4成传输层 TCP/IP协议 三次握手 笔者解析: 第一次握手:实现第一步需要客户端主动…...
![](https://www.ngui.cc/images/no-images.jpg)
flutter项目中常用第三方模块
flutter项目中常用第三方模块 持续更新中序言关于第三方模块安装flutter_native_splash使用方式模块配置 flutter_localizations模块配置使用方式 get_storage模块配置使用方式 get模块配置使用方式 持续更新中 序言 本章介绍项目中常用第三方模块,方便快速构建项目…...
![](https://img-blog.csdnimg.cn/6290b656e33445dbbd2fabd752ef981c.png)
Android 混淆使用及其字典混淆(Proguard)
1.使用背景 ProGuard能够通过压缩、优化、混淆、预检等操作,检测并删除未使用的类,字段,方法和属性,分析和优化字节码,使用简短无意义的名称来重命名类,字段和方法。从而使代码更小、更高效、更难进行逆向工程。 Android代码混淆…...
![](https://img-blog.csdnimg.cn/ad7b5367eb924c8eb427833944f7ed53.png)
laravel 阿里云短信发送
示例 一、安装 安装:composer require mrgoon/aliyun-sms dev-master 二、打开config/app.php,添加配置代码 1、‘providers’ 配置组下添加 Mrgoon\Aliyunsms\AliyunsmsServiceProvider::class, 2、‘aliases’ 配置组下添加 Aliyunsms>Mrgoon…...
![](https://www.ngui.cc/images/no-images.jpg)
算法----LRU缓存机制
题目 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返…...
![](https://img-blog.csdnimg.cn/24d7edf08029484bae4964590ebad39a.png)
基于springboot+vue的旅游系统(前后端分离)
博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…...
![](https://www.ngui.cc/images/no-images.jpg)
什么是堆栈和队列?如何实现它们?
堆栈(Stack)和队列(Queue)是两种常见的线性数据结构,用于组织和管理数据。它们分别具有不同的特点和用途。本文将详细解释堆栈和队列的概念、特点以及如何实现它们。 堆栈(Stack) 什么是堆栈&…...
![](https://img-blog.csdnimg.cn/901c64d236674bd5be718a4544328e36.png)
编译器自动生成的构造函数
背景 作为一个C小白,最近在看深度解析对象模型的时候,发现一个很久以来的认知错误:编译器会为没有定义构造函数的class生成一个默认构造函数。其实这个观点是错误的,编译器只会在四种情况下生成。 相关知识 一定要明确一个事情…...
![](https://img-blog.csdnimg.cn/img_convert/3a092050bd3689fce54794e4f60fdac4.png)
SpringSecurity - 认证与授权、自定义失败处理、跨域问题、认证成功/失败处理器
SpringSecurity 文章目录 SpringSecurity一、 简介二、快速入门2.1 maven坐标2.2 访问请求 三、认证与授权3.1 认证3.1.1 登录检验流程3.1.2 SpringSecurity 完整流程3.1.3 认证流程详解3.1.4 校验3.1.5 要解决的问题3.1.6 准备工作3.1.7 实现3.1.7.1 数据库校验用户3.1.7.1.1 …...
![](https://img-blog.csdnimg.cn/8e20004c222544a0868c3508bb6f6137.png)
自定义映射resultMap
自定义映射resultMap 自定义映射resultMap 自定义映射resultMapresultMap处理字段和属性的映射关系字段名和属性名不一致的情况,如何处理映射关系?1、为查询的字段设置别名,和属性名保持一致2、核心配置文件(mybatis-config.xml)中设置一个全局配置3、使…...
![](https://img-blog.csdnimg.cn/2e3d1f57d8cc4b689c0ec284120b1acc.gif#pic_center#pic_center)
Android修行手册 - Android Studio去掉方法参数提示、变量类型提示、方法引用Usage提示
点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&…...
![](https://img-blog.csdnimg.cn/be680ae7efff49f6b915f46ad2404967.jpg)
【车载开发系列】ECU Application Software程序刷新步骤
【车载开发系列】ECU Application Software程序刷新步骤 ECU Application Software程序刷新步骤 【车载开发系列】ECU Application Software程序刷新步骤一. Boot Software(引导软件)1)boot manager(启动管理器)2&…...
![](https://img-blog.csdnimg.cn/img_convert/4e36b8ff18c3aa59af0d98d1fc391a1b.png)
wordpress仿站维护/网站优化外包费用
NEW关注Tech逆向思维视频号最新视频→【都2021年了,为什么还有人裸聊被骗?】出品|刺猬公社文 | 晓含编辑 | 石灿国货出圈:将直播间作为新传播渠道,以国风产品留住人心。“蜂花会是下一个鸿星尔克吗”?11月1…...
![](/images/no-images.jpg)
创业做社交网站有哪些/产品线上推广渠道
<?php /** file: page.class.php 完美分页类 Page */ class Page { private $total; //数据表中总记录数 private $listRows; //每页显示行数 private $limit; //SQL语句使用lim…...
![](https://s1.51cto.com/attachment/201010/2/2221160_1286037337bQZR.png)
网站建设流程信息/网络推广100种方法
使用..表示上一层目录,使用.表示当前目录。文件夹或文件前面有.,则表示是掩藏文件 Home,分为root的Home和一般用户的home Bin目录里存放了常用的执行档,例如date、cal等。Bin和usr/bin的内容大致相同。预设情况下Usr/local/bin是空…...
![](https://img-blog.csdnimg.cn/20190102171643881.png)
wordpress 怎么改密码忘记/优秀网站设计
flask系列---反转函数url_for与重定向redirect(二) 返回html文件 我们之前的视图函数,返回的都是简单的Hello Wolrd之类的字符串,怎么返回一个html呢?首先我们在templates文件夹建立一个html文件,内容随便…...
![](https://img-blog.csdnimg.cn/img_convert/682f47036877cfcc1f01a3e026436efe.png)
做市级网站需要什么/百度风云榜
学校将对“学伴”项目进行全面评估,认真总结反思,不断改进工作,不负社会各界对山东大学的期望。全文569字,阅读约需要1分钟据山东大学官方微博消息,近日,网络中关于我校举办中外学生“学伴”项目的评论&…...
![](/images/no-images.jpg)
wordpress页面都在右边/网络营销有哪些功能
Unity 基础 之 目录结构解析一,Unity的资源数据加载Resources的序列化Resource、StreamingAsset文件夹安装后的路径(Android,iOS)二,Unity的Android和IOS上相关的目录结构三,常用目录对应的Android…...