//查询操作系统环境变量对应的值,其实就是在 export 命令的结果中查找
c, _ := syscall.Getenv("GOPATH")
// Env: /Users/gyk/go
fmt.Printf("Env: %s\n", c)
//创建文件
os.Create("/data/chant/gs/bs.ini")
//打开文件不存在就创建
os.OpenFile("a.ini", os.O_CREATE|os.O_WRONLY|os.O_RDONLY, 0666)
//仅仅打开文件,不存在就打开失败
os.Open("a.ini")
//一次性读取文件内容到字节数组
dd, _ := os.ReadFile("t.ini")
fmt.Printf("%s\n", string(dd))
//如果gs目录不存在就创建gs目录
os.Mkdir("/data/chant/gs", 0750)
//往文件写入数据
os.WriteFile("testdata/hello", []byte("Hello, Gophers!"), 0666)
//返回系统环境变量数组[]string,同 export
os.Environ()
//会依次创建所有目录,同 mkdir -p /data/chant/gs
os.MkdirAll("/data/chant/gs", 0750)
//获取当前工作目录的路径,同 pwd
os.Getwd()
// 返回从命令行获取的所有参数[]string ,编写帮助工具或者其他带参数的脚本时使用
os.Args
//强制退出程序
os.Exit(0)
//删除文件
os.Remove("t.ini")
//删除当前目录和子目录下的所有内容
os.RemoveAll("/data/chant/")
//命令行访问百度
import (
"os/exec"
)
exec.Command("curl", "https://baidu.com")
//在环境变量(echo $PATH) 的路径中去查找对于文件是否存在
import (
"fmt"
"os/exec"
)
path, err := exec.LookPath("go")
if err != nil {
//不存在会报错
//Error: exec: "VERSION": executable file not found in $PATH
fmt.Printf("Error: %v\n", err)
return
}
//存在会打印出对应文件路径
// Path: /Users/gyk/go/go1.19.9/bin/go
fmt.Printf("Path: %s\n", path)
fmt.Printf("格式化字符串并输出控制台: %s, %d,%v,%.2f", "您", 2, []byte("yes"), 22.333332)
fmt.Println("打印字符串并换行")
fmt.Sprintf("格式化字符串并保存到字符串中并返回: %s,%d", "hello", "2023")
package process
import (
"fmt"
"os"
time2 "time"
)
type LogFile struct {
Filename string
}
func init() {
lf = LogFile{
"log.log",
}
//设置重定向文件地址
log.SetOutput(&lf)
}
// 定义日志输出目录,这里是实现Write接口
func (l *LogFile) Write(p []byte) (int, error) {
rootPwd, _ := os.Getwd()
rootPwd = rootPwd + "/log/"
if err := os.Mkdir("log", 0777); err == nil {
fmt.Printf("日志文件夹创建成功:%v\n", rootPwd)
}
time := time2.Now()
logPrefix := fmt.Sprintf("%4d-%02d-%02d", time.Year(), time.Month(), time.Day())
f, err := os.OpenFile(rootPwd+logPrefix+l.Filename, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
defer f.Close()
if err != nil {
return -1, err
}
return f.Write(p)
}
//设置运行时调用cpu核数
runtime.GOMAXPROCS(2)
//返回cpu核心数
runtime.NumCPU()
//返回变量GOROOT 路径
runtime.GOROOT()
//返回go版本 go1.19.9
runtime.Version()
通过程序运行时反射,让程序操作任意类型的变量
type ConfigProcess struct {
Url string `ini:"url"` //请求url
X string `ini:"x"` //请求方式 post or get
C int64 `ini:"c"` //开启协程数量
N int64 `ini:"n"` //每个协程请求次数
H string `ini:"h"` //header设置
D string `ini:"d"` //请求参数设置
T int64 `ini:"t"` //持续压测时间
Assertion string `ini:"assertion"` //结果断言,字符串查找
}
// config配置参数
type Config struct {
ConfigProcess `ini:"process"`
}
//通过反射,获取配置struct中的 键值 赋值给 []string,模拟os.Args
func TransferConfig(config *Config) []string {
k := reflect.TypeOf(config.ConfigProcess)
v := reflect.ValueOf(config.ConfigProcess)
var args []string
args = append(args, "main.go")
for i := 0; i < k.NumField(); i++ {
field := k.Field(i)
value := v.Field(i)
args = append(args, "-"+strings.ToLower(field.Name))
switch field.Type.Kind() {
case reflect.String:
args = append(args, value.String())
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
args = append(args, fmt.Sprintf("%d", value.Int()))
}
}
return args
}