zoukankan      html  css  js  c++  java
  • 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 目录下。
  • 相关阅读:
    连接服务器时通时不通的问题
    二进制包搭建k8s集群
    2、带着问题学习JVM_对象存活_垃圾回收的内容_理论_收集算法
    四、redis事务_真正实现分布式Lua_分布式锁
    四、Spring 框架中接入单机Redis的两种方式
    3、通过zkCli⼯具命令和zk 的java API两种方式创建⼀个主从模式示列
    1、带着问题学习JVM_Java为什么属于编译型+解释型的高级语言_Class类文件结构理解
    2、zookeeper安装、常用命令、API说明及简单示列(创建ZK会话及对节点进行操作、创建分布式锁、创建全局唯一ID)
    1、zk的产生、优劣、基础知识
    十三、Spring容器的原理及源码分析
  • 原文地址:https://www.cnblogs.com/zuoyang/p/15189928.html
Copyright © 2011-2022 走看看