美文网首页
go中如何组织代码

go中如何组织代码

作者: 护念 | 来源:发表于2023-07-18 22:45 被阅读0次

概念总结

虽然之前我们都有接触,但都没有细说,这一节我们来细说下:

  1. go中所有代码都是通过包(package)进行组织的——所有.go文件都以package xxx开头;
  2. 同一个包中的变量、常量、函数相互可见;
  3. 同一目录下,不同的.go文件需要属于同一个包
  4. 如果有不同的包,需要新开目录,在新目录下组织

关于模块名作用:

  1. 当我们go mod tidy拉取远程包的时候,会去仓库地址 + 模块名路径拉去
  2. 用于引入包路径,一个模块下,可能有多个包,我们通过模块名 + 路径引入指定包

关于测试:
直接在对应的go文件相同路径下,创建xxx_test.go文件编写即可

实践验证

我们在实践中验证,前面我们总结的结论。

  1. 初始化项目
mkdir hello
cd hello
go mod init example/user/hello # 这里命名了一个模块叫 example/user/hello
touch hello.go

hello.go文件内容

// hello.go
package main

import "fmt"

func main() {
    fmt.Println("Hello, world.")
}

这里可以直接运行 我们先行跳过

  1. 添加另外一个main包文件
    在当前目录创建一个文件touch hu.go
// hu.go
package main

import "fmt"

var a = "hello A" // 在同一个包,不同文件名下创建了变量a

// 在同一个包,不同文件名下创建函数hu
func hu(){
    fmt.Println("hu.go file hu function")
}

更新hello.go文件

// hello.go
package main

import "fmt"

func main() {
    fmt.Println("Hello, world.")
    fmt.Println(a) // 使用hu.go中的 a变量(同一个包下)
    hu() // 使用hu函数 同一个包下
}

此时可以运行go run .
PS:在当前目录下,下面的命令等效

  • go run example/user/hello
  • go run .
dongmingyan@pro ⮀ ~/go_playground/hello ⮀ go run .
Hello, world.
hello A
hu.go file hu function
  1. 路径下添加另外一个包
    此时仍在hello目录下
mkdir morestrings 
touch morestrings/reverse.go

reverse.go文件

// hello/morestrings/reverse.go
package morestrings // 这是我们新引入的包

// 反转字符
// 对于大写的函数名 import后可以被其它包使用
func ReverseRunes(s string) string {
    r := []rune(s)
    for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {
        r[i], r[j] = r[j], r[i]
    }
    return string(r)
}

更新hello.go文件

// hello.go
package main

import (
    "fmt"
    "example/user/hello/morestrings" // 注意这里是 模块名 + 路径
)

func main() {
    fmt.Println("Hello, world.")
    fmt.Println(a) // 使用hu.go中的 a变量(同一个包下)
    hu() // 使用hu函数 同一个包下
    fmt.Println(morestrings.ReverseRunes("!ko !ko")) //调用另外一个模块中的方法
}

运行

dongmingyan@pro ⮀ ~/go_playground/hello ⮀ go run .
Hello, world.
hello A
hu.go file hu function
ok! ok!

PS: 如果应用的是仓库中的包,我们import后直接运行go mod tidy获取

  1. 最终项目文件结构
 dongmingyan@pro ⮀ ~/go_playground/hello ⮀ tree
.
├── go.mod
├── hello.go
├── hu.go
└── morestrings
    └── reverse.go

相关文章

  • 9 Go盒子:包及包管理

    一、Go的包设计理念 1.代码盒子 在Go程序中,包是代码模块组织的单位,为项目代码组织结构,提高代码的可读性、重...

  • 源码文件的分类和含义(一)

    Go源码文件 名称以.go为后缀,内容以Go语言代码组织的文件多个GO源码文件是需要用代码包组织起来的 源码文件分...

  • go项目代码组织

    参考链接 https://tkstorm.com/posts-list/software-engineering/...

  • golang学习笔记(六)工程目录

    1、工作区 go代码必须放在工作区中;它应包含3个子目录:src、pkg、bin。 src:用于以代码包的形式组织...

  • 代码包的相关含义(二)

    注释:代码包类似于php中的命名空间 代码包的作用 编译和归档GO程序的最基本单位 代码划分、集结和依赖的有效组织...

  • go fmt与gofmt命令

    go fmt命令会按照Go语言代码规范格式化指定代码包中的所有Go语言源码文件的代码,所有Go语言源码文件即包括命...

  • go ethereum 源码解析--代码目录

    go ethereum 代码目录 go-ethereum项目的组织结构 基本上是按照功能模块划分的目录,每个目录在...

  • 嵌入 WebAssembly 运行时和实例化 WebAssemb

    下面这段代码忽略了错误处理机制,介绍了如何在 Go 语言开发的宿主程序中嵌入 WebAssembly. 这段代码涉...

  • GO 语言编译过程

    记录go是如何编译的 如何编译及运行修改后的源代码 1.下载GO源码2.进入到go源码的go/src文件夹3.运行...

  • 如何有效组织unity中的代码

    准确地说,代码作为Unity项目里的一种资源,此问题应该扩展到如何组织Unity资源。 简单说说经验 Unity有...

网友评论

      本文标题:go中如何组织代码

      本文链接:https://www.haomeiwen.com/subject/ifloudtx.html