您现在的位置:首页 > 游戏资讯 > 人物代码

怎样把命令源码文件中的代码拆分到其他代码使用

来源:好完美 浏览次数: 发布时间:2022-12-19 08:17:13

库源文件

库源代码文件是不能直接运行的源代码文件完美国际代码文件夹路径,它只是用来存放程序实体,这些程序实体可以被“其他代码”使用(只要符合Go语言规范)。

❝其他代码:可以与使用的程序实体在同一个源代码文件中,也可以在其他源代码文件中,甚至其他代码包中

那么什么是程序实体呢?

在Go语言中完美国际代码文件夹路径,“程序实体是变量、常量、函数、结构和接口的总称”。我们总是先声明(或定义)程序实体,然后再使用它们。我们先定义了变量名,然后在main函数中调用fmt.Printf函数时使用。多说一点,“程序实体的名字统称为标识符”。标识符可以是任何 Unicode 编码的字母字符、数字和下划线“_”,但首字母不能是数字。通常,我们可以使用中文作为变量名。但是,我认为这种命名方式非常糟糕,我会在开发组中明确禁止这种做法。作为一名合格的程序员,我们应该无限接近编写出国际水平的程序。拆分命令源代码

“如何将命令源文件中的代码拆分到其他库源文件中?” 在某目录下有一个命令源文件demo4.go,如下:

package main
import (

完美国际代码文件夹路径

"flag" ) var name string func init() { flag.StringVar(&name, "name", "everyone", "The greeting object.") } func main() {

完美国际代码文件夹路径

flag.Parse() hello(name) }

调用了一个名为 hello 的函数,这个函数放在 lib.go 中:

package main
import "fmt"
func hello(name string) {

完美国际代码文件夹路径

fmt.Printf("Hello, %s!\n", name) }

可以看到“package main也声明了,main.go中没有报错,可以执行”。执行命令可以看到:

MacBook-Pro demo % go run src/main.go src/lib.go
Hello, everyone!

可以看到: 执行命令:o run src/main.go src/lib.go 完成执行,“不能只单独运行main.go”!为什么?

或者,在运行之前构建当前包,如下所示:

$ go build puzzlers/article3/q1

完美国际代码文件夹路径

$ ./q1 Hello, everyone!

这里,我将main.go和lib.go都放在了相对路径为puzzers/article3/q1的目录下。

问题分析

在编写真正的程序时,我们将代码拆分成几个源代码文件是不够的。我们经常使用模块化编程,根据它们的功能和用途,将它们放入不同的代码包中。不过这会涉及到Go语言的一些代码组织规则

“如何将命令源文件中的代码拆分到其他代码包中?” 其实拆分很简单,类似于模块化编程,只不过golang需要拆分成不同的包,不需要和目录重名

“引导包是引导目录的名字?还是包名?” 我们在源代码文件中声明的代码包与所在目录的名称不同。请记住,源代码文件所在目录相对于src目录的相对路径是其代码包导入路径,而“实际使用其程序实体时给出的限定符应与其声明的代码包名称相对应to belong to”——也就是说guide就是目录名-包名主要是为了方便整个代码属于包-个人理解

规范来了:“为了不混淆代码包的用户,我们应该始终使声明的包名与其父目录名保持一致”

“什么样的程序实体可以被当前包外的代码引用?” 超级简单,“名称以大写字母开头的程序实体”可以被当前包外的代码引用,否则只能被当前包其他代码引用。

完美国际代码文件夹路径

顾名思义,Go语言很自然地将程序实体的访问权限分为包级别的private和public。对于包级别的私有程序实体,即使导入了所在的代码包,也无法引用。

“程序实体还有其他访问权限规则吗?” 答案是肯定的。在Go 1.5及之后的版本中,我们可以“创建内部代码包”,使得某些程序实体只能被当前模块中的其他代码引用。这被称为 Go 程序实体的第三种访问类型:模块级私有。

具体规则是内部代码包中声明的公共程序实体只能被该代码包的直接父包及其子包中的代码引用。当然在引用之前需要先导入这个内部包。对于其他代码包,导入内部包是非法的,无法编译。

查看目录:

总结

讨论将代码从命令源文件中拆分出来的方法,包括拆分到其他库源文件和其他代码包中。

基本编码规则

“如果需要导入两个代码包,并且两个代码包的导入路径最后一层相同,比如:dep/lib/flag和flag,会不会有冲突?”

!答:别名!

推荐阅读