【golang - 关键词】package 、import

1. package

1.1 package特性
  1. 一个目录下的同级文件归属一个包。
  2. 包名可以与其目录不同名。
  3. 同目录文件,虽然package包名可与目录不同,但是所有的同目录文件必须是相同的包名
  4. 包名为 main 的包为应用程序的入口包,编译源码没有 main 包时,将无法编译输出可执行的文件。

2. import

2.1 import规则
  1. 标准库查找
    import(
    “fmt”
    )
    这个fmt是Go语言的标准库,是去GOROOT下去加载该模块
  2. 相对路径查找
    import “./model” //当前文件同一目录的model目录,但是不建议这种方式import
  3. 绝对路径查找
    import “shorturl/model” //加载GOPATH/src/shorturl/model模块
  4. 别名操作
    import( f “fmt” ) 别名操作调用包函数时前缀变成了重命名的前缀,即f.Println(“hello world”)
  5. 点操作
    import( . “fmt” ) 其中 . 的作用为:省略前缀的包名。
    也就是前面你调用的fmt.Println(“hello world”) 可以省略的写成Println(“hello world”)
  6. _操作
    import ( “database/sql” _ “github.com/ziutek/mymysql/godrv” )
    _操作其实只是引入该包。当导入一个包时,它所有的init()函数就会被执行,但有些时候并非真的需要使用这些包,仅仅是希望它的init()函数被执 行而已。这个时候就可以使用_操作引用该包了。即使用_操作引用包是无法通过包名来调用包中的导出函数,而是只是为了简单的调用其init函数()。
  7. 批量导入
    import (
    “net/http”
    “encoding/json”
    “io/ioutil”
    “bytes”
    )
2.2 import初始化
  1. 当包里面有init函数时,包被导入第一时间会调用此函数。
  2. import初始化加载顺序如下图:
    import导入递归调用图
### Golang-Migrate 的工作原理 Golang-Migrate 是一个用于管理数据库迁移的强大工具。此工具允许开发者通过版本化的方式管理应用数据库模式变更,从而简化开发流程中的数据库操作。 #### 数据库迁移的概念 数据库迁移动作通常涉及创建、修改或删除表结构以及数据本身的操作。这些动作被封装成一系列脚本文件,称为迁移文件。每一份迁移文件代表一次特定的更改,并且具有唯一的版本号以便追踪其顺序[^1]。 #### 迁移文件格式 对于 golang-migrate 而言,支持多种类型的 SQL 文件作为输入源。常见的做法是在项目目录下建立专门存放迁移脚本的位置(比如 `./migrations`),其中每个迁移由一对上行(up)下行(down)SQL语句组成: - **Up Script**: 定义如何升级到新版本; - **Down Script**: 描述怎样回滚至上一版; 例如,在 Go 语言环境中可以这样定义两个方向上的变化: ```sql -- ./migrations/00001_create_users_table.up.sql CREATE TABLE users ( id SERIAL PRIMARY KEY, name TEXT NOT NULL ); -- ./migrations/00001_create_users_table.down.sql DROP TABLE IF EXISTS users; ``` #### 应用迁移命令 当准备好所有的迁移文件之后,就可以利用 CLI 或者编程接口来执行具体的迁移任务了。以下是几种常用的方法: - 使用命令行工具直接运行 migrate 命令来进行一次性全部更新至最新版本或是指定目标版本。 ```bash migrate -path=./migrations -database="postgres://localhost/mydb?sslmode=disable" up ``` - 在应用程序启动阶段自动完成必要的初始化设置,确保每次部署都能保持一致的状态。 ```go package main import ( "log" "github.com/golang-migrate/migrate/v4" _ "github.com/golang-migrate/migrate/v4/database/postgres" _ "github.com/lib/pq" ) func initDBMigration() { m, err := migrate.New( "file:///app/migrations", "postgres://user:password@host/dbname?sslmode=disable", ) if err != nil { log.Fatal(err) } defer m.Close() if err := m.Up(); err != nil && err.Error() != "no change" { log.Fatal(err) } } func main() { initDBMigration() // 继续其他业务逻辑... } ``` 上述代码片段展示了如何在程序内部集成 golang-migrate 来实现自动化迁移过程[^2]。 #### 版本控制机制 每当成功应用了一次新的迁移后,golang-migrate 将记录当前所处的具体位置——即已经执行过的最高编号。这使得即使面对复杂的多分支开发环境也能轻松维护不同实例间的一致性[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值