Go 问题集

删除文件后缀名,出现问题

import "strings"

func changePath(file_path string) string {
    return strings.Replace(file_path, "/", "\\", -1)
}

 

转换路径 /转换为\\

import "strings"

func changePath(file_path string) string {
    return strings.Replace(file_path, "/", "\\", -1)
}

 

字符串空白行处理

import "strings"

func dealFilename(file_name string) (name string) {
    return strings.TrimSpace(file_name)
}

 

分离 name.ext 获得 name文件名 ext扩展名

import "path"

func splitFilename(file_name string) (name, ext string) {

    filenameWithSuffix := path.Base(file_name)
    ext = path.Ext(filenameWithSuffix)
    name = strings.TrimSuffix(filenameWithSuffix, ext)
    return
}

 

name.ext  遍历删除特定文件夹下  特定文件 指定带name所有扩展名的文件

import (
   "path/filepath"
   "fmt"
   "os"
)

path := "文件夹路径"  // d:/path1/path2
name := "待删除文件名" 
func_path := changePath(path) + "\\" + name + "." //改变路径格式 注:不带.时 是所有name*.ext
err := filepath.Walk(path, func(path string, f os.FileInfo, err error) error {
    if f == nil {
        return err
    }

    if f.IsDir() {
        return nil
    }

    ok := strings.HasPrefix(path, func_path)
    if ok {
        //fmt.Println(path)
        os.Remove(path)
    }
    return nil
})
if err != nil {
    fmt.Println("删除失败")
}
fmt.Println("删除成功")

 

类型转换 int32 <-> []byte

import "binary"

func Int32ToBytes(i int32) []
byte { var buf = make([]byte, 4) // uint64 is 8 byte uint32 4 byte uint16 2 byte uint8 byte binary.LittleEndian.PutUint32(buf, uint32(i)) return buf } func BytesToInt32(buf []byte) int32 { return int32(binary.LittleEndian.Uint32(buf)) }

 

string 与 ASCII

import "fmt"

str := "1"
fmt.Println([]byte(str)[0])  // 49

buf := make([]byte, 1)
buf[0] = 49
fmt.Println(string(buf[0])) // 1

 

时间获取

import (
   "time"
   "fmt"
)

now := time.Now()                           //当前时间撮
year, mon, day := now.Date()                //年月日
hour, min, sec := now.Clock()               //时分秒
nasec := ((now.Nanosecond() / 1e6) % 1000)  //毫秒
date_time := fmt.Sprintf("%d%02d%02d%02d%02d%02d.%3d", year, mon, day, hour, min, sec, nasec) //20180910105423.123

 

读取配置信息 并写入结构v

import (
   "io/ioutil"
   "encoding/json"
)

func readConfig(filename string) (v Config, err error) {
    v = Config{}

    //下面使用的是相对路径,config.json文件和main.go文件处于同一目录下
    data, err := ioutil.ReadFile(file_name)
    if err != nil {
        //fmt.Println("[#server: 读取config.json失败!]")
        return
    }

    err = json.Unmarshal(data, &v)
    if err != nil {
        //fmt.Println("[#server: 读取数据失败!]")
        return
    }
    return
}

 

设置conn传输超时

import ( 
   "net"
   "fmt"
)
conn.SetWriteDeadline(time.Now().Add(time.Second * 1))
wcnt, werr := conn.Write(bytes_buf.Bytes())
conn.SetWriteDeadline(time.Time{})
checkError(err)
fmt.Println(wcnt)

 

文件存在不存在

//如果返回的错误为nil,说明文件或文件夹存在
//如果返回的错误类型使用os.IsNotExist()判断为true,说明文件或文件夹不存在
//如果返回的错误为其它类型,则不确定是否在存在
func PathExists(path string) (bool, error) {
    _, err := os.Stat(path)
    if err == nil {
        return true, nil
    }
    if os.IsNotExist(err) {
        return false, nil
    }
    return false, err
}

 

# json文件和结构体的互相转换

## 从json文件中读取数据,并用结构体进行保存

func readConfig(filename string) (v Config, err error) {
    v = Config{}

    //下面使用的是相对路径,config.json文件和main.go文件处于同一目录下
    data, err := ioutil.ReadFile(filename)
    if err != nil {
        //fmt.Println("[#server: 读取config.json失败!]")
        return
    }

    err = json.Unmarshal(data, &v)
    if err != nil {
        //fmt.Println("[#server: 读取数据失败!]")
        return
    }
    return
}

 

## 将结构体中的数据写入json文件中

func (c *config) writeJson(fileName string) error {
    buf, err := json.Marshal(src)
    if err != nil {
        return err
    }
    //生成json文件
    err = ioutil.WriteFile(c.fileName, buf, os.ModeAppend)
    if err != nil {
        return err
    }
    return nil
}

 

posted @ 2018-09-10 10:39  RESTPAIN  阅读(123)  评论(0编辑  收藏  举报