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 }