Golang包和项目构成

简介: 工作目录先来说说Golang的工作目录,安装好Golang后,需要做的一件事情就是设置工作目录,所有的项目、工具、第三方包会存放到工作目录中。默认情况下工作目录是用户目录的go文件夹。

工作目录

先来说说Golang的工作目录,安装好Golang后,需要做的一件事情就是设置工作目录,所有的项目、工具、第三方包会存放到工作目录中。默认情况下工作目录是用户目录的go文件夹。我们可以利用环境变量GOPATH来更改Golang工作目录的位置。

工作目录的结构是如下这样的。bin文件夹存放项目会使用到的各种工具;pkc存放着项目所需的各种包所需的库文件;src存放着项目的源代码。如果使用了第三方库,那么第三方库也会存放到工作目录中。

bin/
pkg/
src/

Go命令

下面来介绍一下Go命令,它将是我们使用的主要命令。如果需要查看帮助,可以直接输入go,终端会列出所有命令和简短的提示。我简单地翻译了一下帮助信息。

PS C:\Users\asddf> go
Go is a tool for managing Go source code.

Usage:

        go command [arguments]

The commands are:

        build       编译包和依赖
        clean       移除对象文件
        doc         显示宝或符号的文档信息
        env         打印go环境信息
        bug         提交bug信息
        fix         在包上运行go tool fix
        fmt         在包源代码上运行格式化工具
        generate    处理源代码并生成go文件
        get         下载和安装包和依赖
        install     编译并安装包和依赖
        list        列出包
        run         编译和运行go程序
        test        测试包
        tool        运行指定的go工具
        version     打印go版本
        vet         在包上运行go工具审查

运行项目

单个文件

如果只需要运行单个文件,可以简单的使用go run命令。比方说,下面的代码文件是hello_world.go,那么只需要简单运行go run hello_world.go即可。这里提一下,可以运行的文件的包必须是main,而且有一个main函数。

package main

import (
    "fmt"
)

func main() {
    fmt.Println("Hello World")
}

复杂项目

如果我们正在编写一个比较复杂的项目,这个项目有很多个包,那么就不能随意放置项目了。为了让项目中的包可以被访问,项目必须放置在Go的工作目录中,更具体说就是工作目录的src中。

举个例子,我的项目可以放置到go_workspace\src\yitian\golang-study\golang-programming。这里为了区分不同的第三方包,需要不同的目录层次,例如大部分Github上的第三方库,目录层次都是github.com/XXX这样的。

包这个概念我放到最后来说,因为我不知道怎么说。不过如果学过Java的话,应该很容易理解包这个概念,反正都是用来给代码分类的。需要注意一点,Java的包用来组织代码,所以Java的包名必须是唯一的,这通过包前面的一长串限定名abc.xyz.XXX来办到。

和Java不同的是,Golang中的包可以重名,所以为了区分不同的包,需要在引用的时候添加路径。就拿刚才举的项目例子,假如go_workspace\src\yitian\golang-study\golang-programming下有一个hello包,那么在其他项目中要引用这个包就需要使用名称yitian/golang-study/golang-programming/hello

相关文章
|
2天前
|
监控 Go 开发者
Golang深入浅出之-Goroutine泄漏检测与避免:pprof与debug包
【5月更文挑战第2天】本文介绍了Go语言并发编程中可能遇到的Goroutine泄漏问题,以及如何使用`pprof`和`debug`包来检测和防止这种泄漏。常见的问题包括忘记关闭channel和无限制创建goroutine。检测方法包括启动pprof服务器以监控Goroutine数量,使用`debug.Stack()`检查堆栈,以及确保每个Goroutine有明确的结束条件。通过这些手段,开发者可以有效管理Goroutine,维持程序性能。
21 7
|
3天前
|
Java Go
Golang深入浅出之-Goroutine泄漏检测与避免:pprof与debug包
【5月更文挑战第1天】本文介绍了Go语言中goroutine泄漏的问题及其影响,列举了忘记关闭通道、无限循环和依赖外部条件等常见泄漏原因。通过引入`net/http/pprof`和`runtime/debug`包,可以检测和避免goroutine泄漏。使用pprof的HTTP服务器查看goroutine堆栈,利用`debug`包的`SetGCPercent`和`FreeOSMemory`函数管理内存。实践中,应使用`sync.WaitGroup`、避免无限循环和及时关闭通道来防止泄漏。理解这些工具和策略对维护Go程序的稳定性至关重要。
16 4
|
4天前
|
Go 开发者
Golang深入浅出之-Go语言项目构建工具:Makefile与go build
【4月更文挑战第27天】本文探讨了Go语言项目的构建方法,包括`go build`基本命令行工具和更灵活的`Makefile`自动化脚本。`go build`适合简单项目,能直接编译Go源码,但依赖管理可能混乱。通过设置`GOOS`和`GOARCH`可进行跨平台编译。`Makefile`适用于复杂构建流程,能定义多步骤任务,但编写较复杂。在选择构建方式时,应根据项目需求权衡,从`go build`起步,逐渐过渡到Makefile以实现更高效自动化。
15 2
|
4天前
|
安全 测试技术 Go
Golang深入浅出之-Go语言单元测试与基准测试:testing包详解
【4月更文挑战第27天】Go语言的`testing`包是单元测试和基准测试的核心,简化了测试流程并鼓励编写高质量测试代码。本文介绍了测试文件命名规范、常用断言方法,以及如何进行基准测试。同时,讨论了测试中常见的问题,如状态干扰、并发同步、依赖外部服务和测试覆盖率低,并提出了相应的避免策略,包括使用`t.Cleanup`、`t.Parallel()`、模拟对象和检查覆盖率。良好的测试实践能提升代码质量和项目稳定性。
9 1
|
4天前
|
安全 Go
Golang深入浅出之-Go语言标准库中的文件读写:io/ioutil包
【4月更文挑战第27天】Go语言的`io/ioutil`包提供简单文件读写,适合小文件操作。本文聚焦`ReadFile`和`WriteFile`函数,讨论错误处理、文件权限、大文件处理和编码问题。避免错误的关键在于检查错误、设置合适权限、采用流式读写及处理编码。遵循这些最佳实践能提升代码稳定性。
11 0
|
4天前
|
缓存 编译器 Go
【Go语言专栏】理解Go语言的包管理机制
【4月更文挑战第30天】Go语言包管理是构建可维护应用的关键,从基本概念如包导入、初始化到版本管理和依赖管理,再到Go Modules的引入,简化了过程。包的可见性规则和社区生态也至关重要。理解并掌握这些机制对于编写高质量Go代码具有决定性影响。随着Go语言的持续发展,包管理将更加强大易用。
|
5天前
|
Go API 开发者
Golang深入浅出之-文件与目录操作:os与path/filepath包
【4月更文挑战第26天】Go语言标准库`os`和`path/filepath`提供文件读写、目录操作等功能。本文涵盖`os.Open`, `os.Create`, `os.Mkdir`, `filepath.Join`等API的使用,强调了文件关闭、路径处理、并发写入和权限问题的处理,并给出实战代码示例,帮助开发者高效、安全地操作文件与目录。注意使用`defer`关闭文件,`filepath`处理路径分隔符,以及通过同步机制解决并发写入冲突。
18 2
|
5天前
|
安全 Unix Go
Golang深入浅出之-Go语言中的时间与日期处理:time包详解
【4月更文挑战第26天】Go语言的`time`包提供处理日期和时间的功能,包括`time.Time`类型、时间戳、格式化与解析。本文讨论了核心概念、常见问题(如时区处理、格式字符串混淆、超时控制和并发安全)及解决方法。推荐使用`time.LoadLocation`管理时区,熟悉时间格式规则,用`context`精确控制超时,并注意并发安全。文中通过代码示例展示了如何获取格式化时间、计算时间差以及创建定时任务。学习和应用这些知识可提高程序的健壮性和准确性。
22 2
|
5天前
|
XML JSON Go
Golang深入浅出之-XML处理在Go语言中的实现:encoding/xml包
【4月更文挑战第26天】Go语言的`encoding/xml`库提供XML处理,包括序列化和反序列化。本文讨论了XML处理的基础,如`xml.Marshal`和`xml.Unmarshal`函数,以及常见问题和易错点,如标签命名、结构体嵌套、omitempty标签和命名空间。建议遵循标签命名规则,正确处理嵌套和属性,谨慎使用omitempty,以及理解并有效利用命名空间。文中还给出了基础示例和处理XML属性的代码示例,帮助读者掌握XML处理技巧。
17 1
Golang深入浅出之-XML处理在Go语言中的实现:encoding/xml包
|
6天前
|
JSON 编解码 Go
Golang深入浅出之-HTTP客户端编程:使用net/http包发起请求
【4月更文挑战第25天】Go语言`net/http`包提供HTTP客户端和服务器功能,简化高性能网络应用开发。本文探讨如何发起HTTP请求,常见问题及解决策略。示例展示GET和POST请求的实现。注意响应体关闭、错误处理、内容类型设置、超时管理和并发控制。最佳实践包括重用`http.Client`,使用`context.Context`,处理JSON以及记录错误日志。通过实践这些技巧,提升HTTP编程技能。
20 1

热门文章

最新文章