本系列文章均为学习过程中记录的笔记,欢迎和我一起来学习Go语言。
全文使用环境如下:
- Go语言版本:1.14
- 操作系统:deepin
- 使用工具:Goland开发工具
本篇我们进行学习Go语言项目基础结构
我们在上一节时编写了第一个Hello World
这块代码我们从上向下来看。
第一行是package main,这里是指的包的概念,在go语言中包是代表这个文件夹中所有go代码的目录,这里是main,在Go语言程序中一个可独立执行的程序必须需要有mian这个包,即package main是我们整个程序的入口。而我们日常编写时会新建各种各样用途的go文件,我们通常使用不同的文件夹来区分,这时不同文件夹中的文件我们统一采用一种包的命名方式,便于我们在其他地方使用。详细使用方式将在后续的代码编写过程中详细讲解。
包的命名规范
在我们日常编写包名时应使用简洁、富有含义的名称,例如我们这是一个工具包,则使用package util
导入其他包
继续向下看代码,我们可以看到
import (
"fmt"
"net/http"
)
这里是导入操作,导入我们在当前go文件中使用的所有包,在go语言初期时我们在导入这些包时需要先将其下载到本地,而现在1.14版本中module功能已基本稳定,我们可以在这里直接使用。有一些跑题,module后续我们也会讲到。
回归主题,在import的括号中我们看到里面包含了两个包,第一个fmt包是我们使用的打印包,属于官方包,第二个是net/http包,是用于http服务器搭建使用的包,同样属于官方包。当然我们还会使用一些其他第三方的包,例如:“"google.golang.org/grpc"”
这里我们是导入两个以上的包,我们需要使用(),在我们日常使用时,如果只导入一个包,我们可以直接写
import "fmt"
注意,在Go语言语法中,括号永远都是在代码后面,而不能换行到新的一行,如果括号在下面,在程序编译时Go会在括号上面的一行代码结尾处追加英文分号“;”作为本行结束。
函数声明
下面进入我们的main函数,这里是main包的主入口函数,在我们启动Go语言编写的一个二进制程序时程序会根据main函数进行程序执行,这里需要讲一下,每个go文件中还有一个init函数,这个函数是第一个执行的,后续在编写示例时我们会讲到。
func main() {
//打印
fmt.Println("Hello World")
/*搭建一个http服务,实现基础打印*/
//指定当前目录为根目录
http.Handle("/", http.FileServer(http.Dir(".")))
http.HandleFunc("/hello", helloWorld)
//使用端口8080作为服务监控端口
http.ListenAndServe(":8080", nil)
}
每个函数使用 func 关键词来声明当前是一个函数,mian是函数名,()是参数,{}中的内容是函数体。
函数命名时需要注意,如果首字母是大写,则它是一个公共函数,即他人都可以使用,如果是一个小写,则表示是一个私有函数,只能在本包中使用。
上面函数体中我们可以看到fmt.Println("Hello World")作为打印语句,使用了fmt包中的Println函数,参数是"Hello World",首先我们上面引入了fmt包,这里在使用时就需要fmt开头,让程序知道我们要使用这个包了,Println函数的P首字母是大写,因此我们这里可以直接使用到这个函数,而查看源码得知,参数可以任意多个,我们这里传入了一个参数,执行后,控制台打印了Hello World。
这时有小伙伴问了,我不想用fmt开头怎么办?
Go语言已经设计好了,如果我们使用其他名字时只需要在引入包时起一个别名即可
import aa "fmt"
这里我们就可以使用aa.Println("Hello World")作为打印语句
注意:在go语言中严格要求了import的导入行为,如果我们在go文件中没有使用到的包被导入了,默认是会报错的,因此我们还是使用什么导入什么吧,别贪图一时方便各种导入。
在包的导入这里还有很多其他的使用方式,我们会再后续的代码编写过程中逐渐进行使用,具体使用时再做详细讲解。
本次基础结构解析我们先讲到这里,下一篇我们会讲解在Go语言中的数据类型都有哪些。
本文声明:
知识共享许可协议
本作品由 cn華少 采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。