docker compose
docker compose概念一个服务的功能往往需要多种容器的相互配合,例如一个web服务可能涉及到负载均衡、后端业务处理、数据库等容器。在没有docker compose之前容器的启动、停止都需要手动输入命令行操作,很麻烦。通过docker compose,通过yaml文件声明,实现对容器的编排管理。 Compose 中有两个重要的概念: 服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。 项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。 Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。 Compose 项目由 Python 编写,实现上调用了 Docker 服务提供的 API 来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose 来进行编排管理。 安装 centos 如果您想在 CentOS 系统上使用 Docker Compose,可以按照以下步骤操作: 安装...
Go flag
在 Golang 中,可以使用标准库中的 flag 包来解析命令行参数。 下面是一个简单的示例,演示如何使用 flag 包来解析一个字符串类型的命令行参数: 123456789101112131415161718package mainimport ( "flag" "fmt")func main() { // 定义一个字符串类型的命令行参数 var name string flag.StringVar(&name, "name", "", "your name") // 解析命令行参数 flag.Parse() // 输出解析结果 fmt.Printf("Hello, %s!\n",...
Go函数类型实现包装器
在Golang中,我们可以给函数类型定义方法,这样我们就可以将包装器作为方法来实现。这种方法可以更加简洁和直观。下面是一个示例,演示了如何使用方法来实现一个简单的包装器: 1234567891011121314151617181920212223242526272829303132333435package mainimport ( "fmt" "time")// 定义一个函数类型,参数和返回值与被封装的函数相同type IntFunc func(int) int// 定义一个名为Wrapper的方法,它接受一个IntFunc类型的函数作为接收者func (fn IntFunc) Wrapper() IntFunc { // 返回一个新的函数,该函数实现了附加的功能 return func(n int) int { start := time.Now() // 记录函数开始时间 defer func() { ...
Go闭包
Go闭包在Go语言中,闭包(closure)是一种函数(function)的特殊形式,它可以捕获其所在环境的变量,并将其变为函数对象的一部分。 简而言之,闭包是一个函数和其相关的引用环境组合而成的实体。 具体来说,闭包可以让一个函数访问其外部函数的局部变量或者全局变量。在Go语言中,闭包通常是通过函数字面量(function literal)来创建的,也就是将函数定义在另一个函数的内部,并返回该函数。例如: 1234567891011121314func adder() func(int) int { sum := 0 return func(x int) int { sum += x return sum }}func main() { a := adder() fmt.Println(a(1)) // 输出 1 fmt.Println(a(2)) // 输出 3 fmt.Println(a(3)) // 输出...
YAML语法小记
YAML概念YAML 是 “YAML Ain’t Markup Language” 的递归缩写。它是一种直观的能够被人轻松阅读的的数据序列化语言。YAML 主要用于: 配置文件 在网络上存储或传输数据 作为许多语言(如 Python, Ruby, Java 等)的 datafile 格式 语法YAML的语法比较简单,主要有下面几个: 大小写敏感 使用缩进表示层级关系 缩进不允许使用tab,只允许空格( 低版本限制 ) 缩进的空格数不重要,只要相同层级的元素左对齐即可 ‘#’表示注释 YAML支持以下几种数据类型: 纯量:单个的、不可再分的值 对象:键值对的集合,又称为映射(mapping)/ 哈希(hash) / 字典(dictionary) 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list) 下面是 YAML 的一些基本语法规则: 键值对使用冒号(:)来分隔键和值,键值对之间使用空格或制表符进行缩进。 123name: Johnage: 30city: New...
Go使用fmt包
使用 Go fmt 包在 Go 语言中,fmt 包是一个非常重要的标准库,它提供了一系列函数,用于格式化输入和输出。在本文中,我们将探讨 fmt 包的使用,以及它的一些基本功能。 格式化输出fmt 包最常见的用途是格式化输出。我们可以使用 fmt.Printf() 函数将指定的输出格式写入标准输出。例如,下面的代码将输出一个字符串和一个整数: 12345678910package mainimport "fmt"func main() { name := "Alice" age := 23 fmt.Printf("My name is %s and I'm %d years old.\\n", name, age)} 输出结果为: 12My name is Alice and I'm 23 years old. 在上面的代码中,我们使用 %s 和 %d 来指定字符串和整数的输出格式。在 Printf()...
Go 操作mysql
连接go语言中的database/sql包提供了Sql数据库的泛用接口,但是不提供具体的驱动。使用这个包时必须注入数据库驱动。 下载依赖1go get -u github.com/go-sql-driver/mysql 使用MySql驱动1func Open(driverName, dataSourceName string) (*DB, error) 打开一个指定driverName的数据库,dataSourceName指定数据源 12345678910111213141516171819import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql")func Open() { // DSN:data source name dsn := "root:123@tcp(127.0.0.1:3306)/t1231est" db, err := sql.Open("mysql", dsn) if err...
Go error
Go语言的error在 Go 语言中,错误处理是非常重要的一部分。Go 中的错误通过 error 类型表示,它是一个内置的接口类型。它的定义如下: 123type error interface { Error() string error 接口只有一个 Error 方法,当出现错误时,该方法会返回一个字符串类型的错误信息。通常情况下,我们可以通过返回 nil 来表示没有错误,而不是像其他语言那样抛出异常。 在 Go 语言中,每个函数都可以返回一个错误值,这使得调用者可以轻松地处理错误情况。在函数返回之前,我们可以通过返回一个 error 类型的值来表示该函数是否执行成功。在调用函数时,我们可以检查返回值是否为 nil,如果不是,就说明函数执行失败并且返回了一个错误。 例如,下面是一个简单的示例,演示如何使用 error 处理程序: 123456789101112func divide(dividend, divisor float64) (float64, error) { if divisor == 0 { ...
Go panic
在 Go 语言中,**panic** 表示程序出现了一种无法处理的错误,导致程序不能继续执行下去,它会导致程序崩溃并抛出一个运行时异常。 当程序中出现无法处理的错误,如数组越界、空指针引用等,程序就会 panic,并抛出一个 panic 异常。在未处理 panic 异常的情况下,程序会停止运行,同时输出相关的信息。如果在处理 panic 异常时没有恢复程序的运行,那么程序就会中断。 在一些情况下,我们可以通过 defer 语句和 recover 函数来捕获 panic,并恢复程序的运行。defer 语句可以用来在函数执行完毕后执行一些清理工作,同时 recover 函数可以在函数内部捕获 panic 异常并进行处理。 假设你正在编写一个程序,需要从一个文件中读取数据并对数据进行处理。你可能会写一个函数来处理读取和处理数据的过程。在函数内部,如果出现了某些错误,比如文件不存在、文件无法打开等等,那么你可能会想在函数内部使用 panic 函数来中断程序的执行。 比如,下面的示例代码中,我们尝试打开一个不存在的文件,然后在发生错误时使用 panic...