新闻资讯  快讯  焦点  财经  政策  社会
互 联 网   电商  金融  数据  计算  技巧
生活百科  科技  职场  健康  法律  汽车
手机百科  知识  软件  修理  测评  微信
软件技术  应用  系统  图像  视频  经验
硬件技术  知识  技术  测评  选购  维修
网络技术  硬件  软件  设置  安全  技术
程序开发  语言  移动  数据  开源  百科
安全防护  资讯  黑客  木马  病毒  移动
站长技术  搜索  SEO  推广  媒体  移动
财经百科  股票  知识  理财  财务  金融
教育考试  育儿  小学  高考  考研  留学
您当前的位置:首页 > IT百科 > 程序开发 > 语言 > Go语言

如何在Go中编写第一个程序

时间:2020-01-14 10:08:31  来源:  作者:

Go语言学习:如何在Go中编写第一个程序

 

介绍

按照惯例,本文从 “ Hello,World!”开始。这是一个简单而完整的第一个程序,也是确保正确配置环境的好方法。

我们将完成在Go中创建该程序的过程,如下所示:

Output

Please enter your name. Alex Hello, Alex! I'm Go!

准备条件

在开始本教程之前,您将需要在计算机上设置本地开发环境,如果你是mac系统,可以参见我之前的介绍:

Go语言学习:如何在macOS上安装Go并设置本地编程环境

其他系统差别不大,请自行准备。

第1步-构建“ Hello,World!”程序的基本结构

一个完整的go程序,需要制定一个清晰的目录结构,良好的结构可以帮助我们导航代码,了解重要内容并快速定位需要修改的内容。

良好的项目结构将使您的代码库更容易扩展。

项目结构没有约定的规范,个人根据自己的情况设定,一般来说,下面是一个比较好的结构:

cmd/
 binaryname/
 main.go # a small file glueing things together
internal/
 data/
 types.go
 types_test.go # unit tests are right here
 (...)
pkg/
 api/
 types.go # REST API input and output types
test/
 smoketest.py
ui/
 index.html
README.md
Makefile

第2步-编写基本的“ Hello,World!”程序

我们进入cmd 目录,要编写“ Hello,World!”程序,请打开一个命令行文本编辑器,例如nano并创建一个新文件:

$cd ./cmd
$nano main.go

在终端窗口中打开文本文件后,您将输入程序:

hello.go

$nano main.go

让我们分解代码的不同组成部分。

package是Go 关键字,用于定义此文件属于哪个软件包。每个文件夹只能有一个软件包,并且每个.go文件都必须在其文件顶部声明相同的软件包名称。在此示例中,代码属于main包。

import是Go 关键字,它告诉Go编译器您要在此文件中使用哪些其他软件包。在这里,您可以导入fmt等软件包。fmt软件包提供了格式化和打印功能,这些功能在开发时非常有用。

fmt.Println是包装中的Go 功能,fmt它告诉计算机在屏幕上打印一些文本。

您可以在fmt.Println函数后加上一系列"Hello, World!"用引号引起来的字符,例如。引号内的任何字符都称为字符串。fmt.Println程序运行时,该函数会将此字符串打印到屏幕上。

nano通过键入保存并退出CTRL + X,在提示保存文件时,按Y。

现在我们来测试下程序。

第3步-运行Go程序

编写“ Hello,World!”程序后,就可以运行该程序了。您将使用go命令,后跟刚刚创建的文件的名称。

  • go run main.go

程序将执行并显示以下输出:

Output

Hello, World!

让我们看看代码运行的情况。

Go程序需要在运行之前进行编译。go run在这种情况下main.go,使用文件名进行调用时,该go命令将编译应用程序,然后运行生成的二进制文件。对于用编译的编程语言编写的程序,编译器将获取程序的源代码并生成另一种较低级别的代码(例如机器代码)以生成可执行程序。

Go应用程序需要一个main程序包和一个 main()功能作为应用程序的入口点。该main函数不接受任何参数,也不返回任何值。相反,它告诉Go编译器该程序包应编译为可执行程序包。

编译后,通过main()入口来执行代码。它执行fmt.Println("Hello, World!")通过调用该fmt.Println函数。的字符串值Hello, World!,然后传递给函数。在此示例中,该字符串Hello, World!也称为参数,因为它是传递给方法的值。

Hello, World!屏幕上不会显示两边的引号,因为您使用它们来告诉Go字符串的开始和结束位置。

在此步骤中,您已经使用Go创建了一个有效的“ Hello,World!”程序。

在下一步中,您将探索如何使程序更具交互性。

第4步 —提示用户输入

每次运行程序时,它都会产生相同的输出。在此步骤中,您可以将其添加到程序中,以提示用户输入其名称。然后,您将在输出中使用它们的名称。

无需修改现有程序,而是greeting.go使用nano编辑器创建一个新程序:

  • nano greeting.go

首先,添加以下代码,提示用户输入其名称:

greeting.go

package main

import (
 "fmt"
)

func main() {
 fmt.Println("Please enter your name.")
}

可以使用该fmt.Println功能在屏幕上打印一些文本。

现在添加代码来存储用户的输入:

greeting.go

package main

import (
 "fmt"
)

func main() {
 fmt.Println("Please enter your name.")
 var name string
}

该var name string行将使用var 关键字创建一个新变量。您为变量命名name,它将是类型string。

然后,添加突出显示的行以捕获用户的输入:

greeting.go

package main

import (
 "fmt"
)

func main() {
 fmt.Println("Please enter your name.")
 var name string
 fmt.Scanln(&name)
}

该fmt.Scanln方法告诉计算机等待键盘输入以新行或(n)结尾的字符。这将暂停程序,允许用户输入所需的任何文本。当用户按下ENTER键盘上的键时,程序将继续。ENTER然后捕获所有击键,包括击键,并将其转换为字符串。

您想在程序的输出中使用这些字符,因此可以通过将它们写入名为的字符串变量中来保存这些字符name。Go将该字符串存储在计算机的内存中,直到程序运行完毕。

最后,在程序中添加以下突出显示的行以打印输出:

greeting.go

package main

import (
 "fmt"
)

func main() {
 fmt.Println("Please enter your name.")
 var name string
 fmt.Scanln(&name)
 fmt.Printf("Hi, %s! I'm Go!", name)
}

fmt.Printf函数采用字符串,并使用特殊的打印动词(%s)将值name插入字符串。这样做是因为Go不支持字符串插值,因为字符串插值可以让您获取分配给变量的值并将其放在字符串中。

nano通过按保存并退出CTRL + X,然后Y在提示保存文件时按。

现在运行程序。系统将提示您输入名称,请输入名称,然后按ENTER。输出结果可能与您期望的不完全相同:

Output

Please enter your name. Sammy Hi, Sammy ! I'm Go!

而不是Hi, Sammy! I'm Go!,名称后面有一个换行符。

该程序捕获了我们所有的按键输入,包括ENTER键来告知程序继续的键。

greeting.go在编辑器中打开文件:

  • nano greeting.go

程序现在将包含以下内容:

greeting.go

package main

import (
 "fmt"
 "strings"
)

func main() {
 fmt.Println("Please enter your name.")
 var name string
 fmt.Scanln(&name)
 fmt.Printf("Hi, %s! I'm Go!", name)
 name = strings.TrimSpace(name)
}

保存并退出nano。按CTRL + X,然后Y在提示保存文件时按。

再次运行程序:

  • go run greeting.go

这次,在输入名称并按之后ENTER,您将获得预期的输出:

Output

Please enter your name. Sammy Hi, Sammy! I'm Go!

现在,您有了一个Go程序,该程序可以从用户处获取输入并将其打印回屏幕。

结论

这是一个简单的入门程序,您可以尝试使用其他的技术来创建一个Go程序。


点击关注,如果发现任何不正确的地方,或者想分享有关上述主题的更多信息,欢迎反馈。



Tags:Go语言   点击:()  评论:()
声明:本站部分内容来自互联网,内容观点仅代表作者本人,如有任何版权侵犯请与我们联系,我们将立即删除。
▌相关评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
▌相关推荐
介绍按照惯例,本文从 “ Hello,World!”开始。这是一个简单而完整的第一个程序,也是确保正确配置环境的好方法。我们将完成在Go中创建该程序的过程,如下所示:OutputPlease enter...【详细内容】
2020-01-14   Go语言  点击:(0)  评论:(0)  加入收藏
Golang简介Go语言是谷歌2009年发布的第二款开源编程语言。这是一门全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。Go语言具有很强的表达能力,它简洁、...【详细内容】
2019-12-11   Go语言  点击:(13)  评论:(0)  加入收藏
学习一门新语言并不容易,但是如果有具体的例子和手把手指导教程,就很容易上手了。因此,我决定编写一系列分步指导教程。...【详细内容】
2019-12-10   Go语言  点击:(12)  评论:(0)  加入收藏
Go的三色标记GC 引用计数:对每个对象维护一个引用计数,当引用该对象的对象被销毁时,引用计数减1,当引用计数器为0是回收该对象。 优点:对象可以很快的被回收,不会出现内存耗尽或达...【详细内容】
2019-12-05   Go语言  点击:(13)  评论:(0)  加入收藏
简述Golang中的锁机制主要包含互斥锁和读写锁互斥锁互斥锁是传统并发程序对共享资源进行控制访问的主要手段。在Go中主要使用 sync.Mutex的结构体表示。一个简单的示例:func...【详细内容】
2019-12-03   Go语言  点击:(13)  评论:(0)  加入收藏
反射是 Go 语言比较重要的一个特性之一,虽然在大多数的应用和服务中并不常见,但是很多框架都依赖 Go 语言的反射机制实现一些动态的功能。作为一门静态语言,Golang 在设计上都...【详细内容】
2019-11-20   Go语言  点击:(65)  评论:(0)  加入收藏
这篇文章是为不熟悉 Go 的指针或指针类型的程序员而准备的。什么是指针?简单点说,指针是指向另一个地址的值。这是教科书上的解释,但如果你转自一门不用谈论变量地址的开发语言...【详细内容】
2019-11-06   Go语言  点击:(11)  评论:(0)  加入收藏
近年来,Go 语言的使用量呈爆炸式增长。似乎每个初创公司都将它用于后端系统。开发人员认为它如此广受欢迎,背后的原因有很多。 Go语言的优点Go 语言速度非常快Go 语言是一门非...【详细内容】
2019-10-30   Go语言  点击:(10)  评论:(0)  加入收藏
很多人将GO语言称为21世纪的C语言,因为GO不仅拥有C的简洁和性能,而且还很好的提供了21世纪互联网环境下服务端开发的各种实用特性,让开发者在语言级别就可以方便的得到自己想要...【详细内容】
2019-10-28   Go语言  点击:(20)  评论:(0)  加入收藏
本篇文章首先简单介绍了 TCP keepalive 的机制以及运用场景。接着介绍了 Go 语言中如何开启与设置 TCP keepalive。但是由于 Go 语言最上层的接口不够灵活,从而引出在 Go 语...【详细内容】
2019-10-22   Go语言  点击:(26)  评论:(0)  加入收藏
如今,在不刷新页面的情况下发送消息并获得即时响应在我们看来是理所当然的事情。但是曾几何时,启用实时功能对开发人员来说是一个真正的挑战。开发社区在HTTP长轮询(http long...【详细内容】
2019-10-21   Go语言  点击:(27)  评论:(0)  加入收藏
在过去的两个月里,我一直在研究采用GO语言编写的恶意软件。Go,又称Golang,是谷歌公司开发的一种编程语言,如今正在被越来越多的恶意软件开发者所使用的。在这篇文章中,我就将针...【详细内容】
2019-10-18   Go语言  点击:(77)  评论:(0)  加入收藏
分享一个在go tour上看到的练习题,练习里要求用户自己定义一个错误类型,实现 error接口,函数在参数不满足条件的时候返回自定义的错误类型的值。练习中特别提示用户不要在实现...【详细内容】
2019-10-15   Go语言  点击:(21)  评论:(0)  加入收藏
Uber是世界领先的生活出行服务提供商,也是Go语言的早期adopter,根据Uber工程博客的内容,大致可以判断出Go语言在Uber内部扮演了十分重要的角色。Uber内部的Go语言工程实践也是...【详细内容】
2019-10-14   Go语言  点击:(47)  评论:(0)  加入收藏
刚开始写这篇文章的时候,目标非常大,想要探索 Go 程序的一生:编码、编译、汇编、链接、运行、退出。它的每一步具体如何进行,力图弄清 Go 程序的这一生。...【详细内容】
2019-10-14   Go语言  点击:(17)  评论:(0)  加入收藏
时间和日期是我们编程中经常会用到的,本文主要介绍了Go语言内置的time包的基本用法。time包time包提供了时间的显示和测量用的函数。日历的计算采用的是公历。时间类型time....【详细内容】
2019-09-26   Go语言  点击:(17)  评论:(0)  加入收藏
1 题目描述给定一个二叉树,判断其是否为一个完全二叉树。来自Wikipedia的完全二叉树定义:在一个完全二叉树中,除了最后一层可能未被完全填充外,其它所有层均被完全填充,且最后一...【详细内容】
2019-09-18   Go语言  点击:(29)  评论:(0)  加入收藏
这篇文章摘取至我在日本东京举办的 GoCon spring conference 上的演讲稿。 错误只是一些值我花了很多时间来思考如何在 Go 中处理错误是最好的。我真希望能有一种简单直接的...【详细内容】
2019-09-17   Go语言  点击:(66)  评论:(0)  加入收藏
这是一片关于stackoverflow热门问题的文章 How to efficiently concatenate stringsGo里面string是最基础的类型,是一个只读类型,针对他的每一个操作都会创建一个新的string...【详细内容】
2019-09-16   Go语言  点击:(23)  评论:(0)  加入收藏
Go 1.13版本在2019.9.3正式发布!国外的Gopher Vincent Blanchon发表了一篇文章《Go: Retrospective》(科学上网阅读),对Go从1.0版本到1.13版本做了简要的回顾,这里是那篇文章的...【详细内容】
2019-09-11   Go语言  点击:(17)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条