本教材由知了传课辛苦制作而成,仅供学习使用,请勿用于商业用途!如进行转载请务必注明出处!谢谢!

创建不同级目录

在上一小节中,将不同的go源代码文件都放在了同一个目录下面,如果将go源代码文件放在不同的目录下面应该怎样进行处理呢?

一、步骤:

1. 新建项目目录:

如下图所示:
import54.png

CmsProject目录下面,创建src目录,在src目录下面创建如下目录与文件。
import55.png

main.go定义的是入口函数main()

userinfo文件夹下定义的是user.go文件。
import56.png

user.go文件中的代码如下:

//不同目录 包名不一样 package userinfo import "fmt" func Add(){ fmt.Println("添加用户信息") }

main.go文件中的代码如下:

package main import "fmt" import "userinfo" //注意导包 func main(){ fmt.Println("main") userinfo.Add() //通过包名.函数进行调用 }

导入用户的包,然后通过用户调用添加的方法,通过以上两个文件中的代码,可以总结出如下几点:

  1. 不同目录,包名不一致(自定义包)。
  2. main.go中调用user.go中的方法时,一定要导包,并且调用的方式是:包名.函数名 的方式。

2. GoLand中设置GOPATH

import59.png

会打开如下的窗口,然后进行设置。

import57.png
注意:user.go文件中的函数名首字母必须大写,如果改成小写在main.go中无法进行调用

3. 再添加其他文件和函数:

这种不同级目录应用,在以后的项目开发中使用频率非常高。例如:上面我们的案例中,可以将用户管理的操作放在userinfo目录下,商品管理模块可以再定义一个目录,例如:product.go

如下图所示:
import60.png

product.go中的代码如下:
import61.png

main.go中的代码如下:
import62.png

二、关于包的问题

包就是一个标识,标志着代码是来自哪儿,对代码进行管理。

所以,在main()函数中要使用相应的函数,必须进行导包,然后根据包名去调用相应的函数。

通过上面的代码,我们也能够体会出“包”的优势,就是可以在userinfo包中定义名叫Add()方法,在product包中也可以定义Add()方法,但是在main()函数中进行调用时,通过包名进行调用,就可以很清楚Add()方法来自哪个包,不会造成混乱,和名称的冲突。并且相关的功能代码,放在一个包中,可以很好的被复用。例如:可以在userinfo包中使用product,如下图所示:

import63.png

但是我们创建的的自定义包最好放在GOPATHsrc目录下,在Go语言中,代码包中的源码文件名可以是任意的。但是,这些任意名称的源码文件都必须以包声明语句作为文件中的第一行,每个包都对应一个独立的名字空间。

包中成员以名称⾸字母⼤⼩写决定访问权限:

  • public: 首字母大写,可以被包外访问。
  • private: 首字母小写,仅可以被包内访问。

注意:同一个目录下不能定义不同的package

三、导包的问题

在上面的案例中,要使用包,必须要进行导入,可以通过关键字进行import进行导入,它会告诉编译器你想引用该包内的代码。

如果导入的是标准库中的包(GO语言自带,例如:”fmt”包)会在安装Go的位置找到。Go开发者创建的包会在GOPATH环境变量指定的目录里查找。所以,import关键字的作用就是查找包所在的位置。

如果编译器查遍GOPATH也没有找到要导入的包,那么在试图对程序执行run或者build的时候就会出错。

注意:如果导入包之后,未调用其中的函数或者类型将会报出编译错误。
import64.png

我们常规的导包方式是用import关键字一个个导入。(Goland会自动帮我们导入包)

例如:
import65.png

表示导入三个包,有GO语言自带的包,也有我们自定义的包。但是,这种写法可能比较麻烦,所以为了简化也可以采用如下的方式进行导包:
import67.png

这种方式,使用的频率是非常高的。

2392人已阅读,今天你学习了吗?

添加新回复