go结合Slash Commands使用
需求通过 Slack 命令模式,调用操作远程服务器。服务端需要跟一个http服务来解析slash调过来的命令。
准备准备以下步骤:
创建Slash conmand
开发服务端应用
添加 Slash Conmand添加App先到官网地址:https://api.slack.com/ 创建一个App
选Slash Conmand
输出一个自定义命令
到这就创建完成了,接下来开发服务端。
实现创建 go 项目slacktool,添加:
main.go 文件
go.mod 文件
environment.env 文件
项目结构
1234slacktool|---main.go|---go.mod|---environment.env
添加 go.mod 依赖添加两个依赖:godotenv 和 slack。
12345678module github.com/forfreeday/slacktoolgo 1.17require ( github.com/joho/godotenv v1.4.0 github.com/nlopes/slack v0.6.0)
添加后 ...
go-viper 配置文件框架
简介看了一些开源项目,很多都会使用viper这个配置文件框架,然后了解了一番,做一下输出。下面这些内容摘自官方github,官方的示例比较粗糙,下面稍加改动改动了一下写了几个示例。实际这个框架写的简单好用。
viper 是一个完整的 Go应用程序的配置解决方案,它被设计为在应用程序中工作,并能处理所有类型的配置需求和格式。支持特性功能如下:
设置默认值读取 JSON、TOML、YAML、HCL、envfile和 Java属性的配置文件监控配置文件改动,并热加载配置文件从环境变量中读取从远程配置中心读取配置(etcd/consul),并监控变动从命令行标志中读取从缓冲区读取支持直接设置配置项的值
viper读取配置文件的优先级顺序viper.Set() 所设置的值命令行 flag环境变量配置文件配置中心etcd/consul默认值
注意:viper的配置键是不区分大小写的。
创建测试项目最简单的方式使用vscode、goland直接操作一下就完了,如果你也习惯使用vim来操作,可以直接用下面这种方式。
1234567mkdir -p vipertestcd vipertestgit in ...
go import导包关键字
import 导包有相对路径 和 绝对路径,推荐使用绝对路径。GoLand 中导包如果不用,会报错。
格式导入单个路径
1import "./model" //不建议这种方式import
导入多个路径
1234import ( "./model" "github.com/forfreeday/go-learning")
路径相对路径:
1import "./model" //不建议这种方式import
绝对路径:
1import "shorturl/model" //加载GOPATH/src/shorturl/model模块
点操作这个点操作的含义就是这个包导入之后在你调用这个包的函数时,你可以省略前缀的包名,
1234567import( . "fmt" )func main() { fmt.Println("hello world") //可以省略的写成 Println("hello wor ...
go 数组
注意事项Go 语言数组声明有两种方式:
定长数组
不定长度数组
注意:1.如果没有赋值,会有默认值
int 数组,默认初始化为: 0
string 就是空串
2.数据类型必须相同,不能混用,int数组不能包含float 等,已验证3.boolean 是false4.数组越界是 panic 异常5.数组是值类型,默认情况下是值拷贝,也就是说每次拷贝后是一个独立副本,数组间互不影响。6.可以使用指针来实现引用传递
长度用内置函数 len() 即可。
定长数组即,开始就确定长度的数组。语法还是比较灵活的,可以设置定长 和 不定长度的数组,直接通过赋值初始化
1234567891011121314package P01varimport "fmt"func ArrayTest3() { var hens [6]int hens[0] = 111 hens[1] = 222 hens[2] = 333 for i := 0; i < len(hens); i++ { fmt.Printf("打印数组i=%d, 数据= ...
go 函数多个返回值
函数结构和别的语言略有不同。go 的特点,返回可以有多个返回值。
语法123func function_name( [parameter list] ) [return_types] { 函数体}
单个返回值方法123456789101112/* 函数返回两个数的最大值 */func max(num1, num2 int) int { /* 声明局部变量 */ var result int if (num1 > num2) { result = num1 } else { result = num2 } return result}
两个返回值方法实际上可以返回多个值,这里演示,所以只写两个返回值
123456789101112package mainimport "fmt"func swap(x, y string) (string, string) { return y, x}func main() & ...
go defer关键字
defer 延时机制在函数执行过后执行。作用:在函数执行过后及时释放资源。最佳的实践在于,做一些执行后的操作,释放资源,比如:数据库连接、文件句柄、锁等。
在 golang 中的通常做法是,创建资源后,立即使用 defer 进行释放。
1.基本用法原理是使用了 defer 关键字后,会将修饰语句加入到一个栈中,这里称为 defer 栈中,直到程序执行后,最后执行,当函数执行完毕后,在从 defer 栈中,依次从栈顶取出语句执行,先入后出的机制。defer对执行流程的改变,只是在本函数内有用。
123456789101112131415package mainimport "fmt"func sum(n1 int, n2 int) int { defer fmt.Printf("n1=%d, n2=%d\n",n1, n2) res := n1 + n2 defer fmt.Printf("res1=%d\n", res) return res}func main() { res := ...
go 空白标识符
用于抛弃不需要接收的变量值
空白标识符 _作用:在接收多个变量返回时,抛弃不需要的返回值_ 实际上是一个只写变量,你不能得到它的值。这样做是因为 Go 语言中你必须使用所有被声明的变量,但有时你并不需要使用从一个函数得到的所有返回值。
1234567891011121314package mainimport "fmt"func main() { _,numb,strs := numbers() //只获取函数返回值的后两个 fmt.Println(numb, strs)}//一个可以返回多个值的函数func numbers()(int,int,string){ a , b , c := 1 , 2 , "str" return a,b,c}
结果:2 str
a 因为使用 _ 被抛弃
go 数组
数组Go 语言数组声明有两种方式
定长数组
不定长度数组
go数组几个注意事项:
默认值:如果没有赋值,会有默认值
int 数组,默认初始化为 0
string 就是空串
数据类型必须相同,不能混用,int数组不能包含float 等,已验证
boolean 是false
数组越界是 panic 异常
数组是值类型,默认情况下是值拷贝,也就是说每次拷贝后是一个独立副本,数组间互不影响。
可以使用指针来实现引用传递
使用格式:
var 数组名 [数组大小]数据类型
1.定长数组1234567891011121314package P01varimport "fmt"func ArrayTest3() { var hens [6]int hens[0] = 111 hens[1] = 222 hens[2] = 333 for i := 0; i < len(hens); i++ { fmt.Printf("打印数组i=%d, 数据=%d\n", i, hens[i]) & ...
golang tar包和脚本安装
前言golang 的安装还是比较友好,两种方式安装:
tar包安装
脚本安装
tar包安装一般是直接上官网下载安装,不同版本功能还不一样,也可以使用脚本来快速安装。
https://golang.org/dl
也可以参考官方安装文档https://golang.org/doc/install#install
如果需要其他版本选 Archived versions 可以查看之前的发行版
下载和配置环境变量
wget https://go.dev/dl/go1.19.3.linux-amd64.tar.gzrm -rf /usr/local/go && tar -C /usr/local -xzf go1.19.3.linux-amd64.tar.gz
/etc/profile中添加以下内容
export PATH=$PATH:/usr/local/src/go/bin
验证一下
go version
脚本安装开发环境安装通常使用脚本快速安装
创建文件12touch install.shchmod u+x install.sh
添加脚本脚本会在当前用户 ...