初衷
初学go语言,项目开发中难免遇到简单的写法复杂化的问题,在同事的comments中成长。
常用api使用
获取文件的父目录
filepath.Dir(file)
创建多层目录
if err := os.MkdirAll(filepath.Dir(file), def.DirPerm); err != nil {
return err
}
读取文件内容并存入切片
func loadHostsToSlice(hostsFile string) ([]string, error) {
cont, err := ioutil.ReadFile(hostsFile)
if err != nil {
return []string{}, err
}
// Remove the last one '\n'.
str := strings.TrimSpace(string(cont))
return strings.Split(str, "\n"), nil
}
使用gopkg.in/ini操作配置文件
[version]
format = 1.0
[connect]
host = 192.168.0.5
port = 8443
user = cadmin
sessionid = cadmin218
type confParser struct {
reader *ini.File // config reader
}
// Load conf file.
func (c *confParser) load(vncConsolePath string) {
conf, err := ini.Load(vncConsolePath)
if err != nil {
log.Errorf("Failed to load vnc file %s, because of %v", vncConsolePath, err)
}
c.reader = conf
}
// Set value for conf file.
func (c *confParser) setValue(file, section, key, value string) error {
c.reader.Section(section).Key(key).SetValue(value)
return c.reader.SaveTo(file)
}
parser := confParser{}
parser.load(dcvFile)
// section="connect" key="host"
if err := parser.setValue(dcvFile, section, key, h); err != nil {
return err
}
判断文件是否存在
if _, err := os.Stat(vncConsolePath); err != nil {
log.Errorf("不存在%v", err)
}
以空格分割字符串(一个空格或者多个空格)
s := "admins cadmin secadmin aduadmin"
fmt.Printf("%q\n", strings.Fields(s))