• Go从入门到精通——Go语言中程序文件的组织方法


    Go语言中程序文件的组织方法

      Go 语言中,组织程序文件的方式主要是通过结合目录、包(package)与文件来实现的。

      Go 语言的代码文件中,第一行一般都是一个包的名称声明。例如,Hello world!程序中:

    package main
    
    import (
    	"fmt"
    )
    
    func sayHello(s string) string {
    	return "Hello " + s
    
    }
    
    func main() {
    	fmt.Println(sayHello("abc"))
    }
    

      第一条语句 package main 的作用是告诉 Go 语言编译器这个代码属于 main 包。

      在 Go 语言中,名字叫 main 的包是一个特殊的包,表示该包编译后生成一个可执行文件;反过来说,如果要编写一个能够被编译成可执行文件的程序,则代码必须在 main 包中(main包中可以使用其他包)。

      main 包中必须有一个名为 main 的函数(func 开头的一条语句定义了一个名字叫 main 的函数,后面一堆大括号括起来的内容就是这个函数具体的代码),这是程序起始执行的函数。其他名字的包编译后不会生成可执行文件,这些包一般是供其他包来调用的。

    注意:

        与很多其他语言不通,Go 语言中每一条语句不必以分号 ";" 结尾。

      同一个包中可以有多个文件,这可以避免一个太大的代码文件,也可以更清晰地把代码分类组织在不同的文件中。

      同一目录下所有的代码文件只能属于同一个包,如果属于不通的包,编译时会提示有错误。也就是说,属于不同包的文件只能放在不通的目录下。

      main 包中不论有多少文件,其中的 main 函数有且只有一个,否则编译时也会提示有错误。

      下面我们将 Hello world 程序改写成具有两个文件的包,来验证上述内容。

      首先新建一个 packageTest 子目录,并在其中新建两个代码文件,分别命名为 sub.go 和 main.go,其中 sub.go 文件的代码如下:

    package main
    
    import (
    	"fmt"
    )
    
    func hello() {
    	fmt.Println("Hello world!")
    }
    

      sub.go 代码中实际上仅仅定义了一个 hello 函数,作用是输出 "Hello world!"的字样。main.go 中的代码如下:

    package main
    
    func main() {
    	hello()
    }
    

      main.go 中所做的唯一一件事就是调用了 hello 函数。运行程序,无论使用 go run命令执行代码 main.go 还是 sub.go,都会提示有错误而不得不到想要的输出结果。这时候,需要在 go run 命令后带上所有的源代码作为参数才能够得到正确的执行结果,即执行 go run main.go sub.go 命令,如下:

      Go 语言中程序文件的组可以简单的概括如下:

    • Go 语言中,程序文件主要是按目录和包来组织的。
    • 每个包对应一个目录。
    • 每个包可以有多个代码文件。
    • 可执行包必须以 main 命名,其中应有且只能有一个 main 函数;一般的可执行程序都对应在一个目录下的 main 包,编译程序时将主要编译该包。
    • 可执行包生成的可执行文件是以目录名来命名的,生成的可执行文件的位置根据编译所用的命令不同有所不同,go build 命令将可执行文件生成在与代码文件名相同的目录下,go install 命令将可执行文件生成在 bin 目录下。
  • 相关阅读:
    基于AOP实现Ibatis的缓存配置过期策略
    Step by Step构建自己的ORM系列配置管理层
    云计算从基础到应用架构系列云计算的演进
    设计模式系列桥接模式
    云计算从基础到应用架构系列云计算的概念
    云计算从基础到应用架构系列虚拟化的技术(上)
    设计模式系列装饰模式
    typeof和GetType区别
    白话学习MVC(四)URL路由
    五、DirectX编程
  • 原文地址:https://www.cnblogs.com/zuoyang/p/15189928.html
Copyright © 2020-2023  润新知