zoukankan      html  css  js  c++  java
  • Go知识点记录

    import包命名

    import的包可以给它命名

    import l4g "code.google.com/p/log4go"

    testing的Error和Fatal的区别

    Error : Log() + Fail()  即记录当前错误,记录为失败,但是继续执行

    Fatal : Log() + FailNow() 即记录当前错误,记录为失败,不继续执行

    path.Clean使用

    path.Clean用于对路径

    http://www.cnblogs.com/等进行过滤,在创建修改文件的时候需要使用到,否则会有漏洞

    go list all 能列出所有的包

    go build的时候的错误分析

    如果出现:

    warning: building out-of-date packages:

    runtime/pprof

    testing

    regexp/syntax

    regexp

    installing these packages with 'go test -i' will speed future tests.

    那么就是说明下面的包已经有修改过了,但是没有重新install

    如果有标准的包过期,使用go install -a -v std来进行更新

    如果是自定义的包过期,重新调用go install

    linux下获取进程信息是使用/proc/pid/

    判断当前用户是否是root用户

    方法:

    os.Geteuid() != 0

    使Go程序更快的几个知识:

    1 如果是自带垃圾回收的语言,你必须要考虑内存使用情况。

    由于垃圾回收必然占用程序时间,所以占用内存必然越小越好。

    2 分配内存代码需要注意。

    它必然最终导致垃圾回收

    3 go中[]byte和string的转化实际上是进行了一次内存复制,所以能不用转换的地方尽量不要转换

    4 尽量使用自带的官方包。除非有测试支持你写的代码比官方的快,否则不要轻易使用自己的包来代替官方包。

    可以使用go test -run=regexp file_test.go 来制定运行某个测试用例

    如何获取go的各种路径:

    1 执行用户当前所在路径:

    os.Getwd()

    2 执行程序所在路径:

    执行程序文件相对路径:

    file, _ := exec.LookPath(os.Args[0])

    执行程序所在的绝对路径:

    (使用下面一套方法)

    1
    2
    3
    4
    5
    6
    7
    file, _ := exec.LookPath(os.Args[0])
    log.Println("file:", file)
     dir,_ := path.Split(file)
     log.Println("dir:", dir)
     os.Chdir(dir)
     wd, _ := os.Getwd()
     log.Println("wd:", wd)

    比如这个程序

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    package main
    import(
            "os"
            "log"
            "os/exec"
            "path"
    )
    func main() {
            file, _ := os.Getwd()
            log.Println("current path:", file)
            file, _ = exec.LookPath(os.Args[0])
            log.Println("exec path:", file)
            dir,_ := path.Split(file)
            log.Println("exec folder relative path:", dir)
            os.Chdir(dir)
            wd, _ := os.Getwd()
            log.Println("exec folder absolute path:", wd)
    }

    可执行文件我放在/home/yejianfeng/handcode/test

    我执行的路径是/home/yejianfeng/

    返回结果:

    1
    2
    3
    4
    5
    [yejianfeng@openstack ~]$ handcode/test
    2013/02/06 11:09:07 current path: /home/yejianfeng
    2013/02/06 11:09:07 exec path: handcode/test
    2013/02/06 11:09:07 exec folder relative path: handcode/
    2013/02/06 11:09:07 exec folder absolute path: /home/yejianfeng/handcode

    从文件中json解析

    尽量使用os.OpenFile直接获取reader,然后再从reader中使用Decoder来解析json

    比如

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    package main
     
    import (
        "fmt"
        "encoding/json"
        "os")
     
    func main() {
        pathToFile := "jsondata.txt"
     
        file, err := os.OpenFile(pathToFile, os.O_RDONLY, 0644)
        if err != nil {
            fmt.Println(err)
            os.Exit(1)
        }
     
        configs := make(map[string]map[string][]Service, 0)
        err = json.NewDecoder(file).Decode(&configs)
        if err != nil {
            fmt.Println(err)
            os.Exit(1)
        }}

    别使用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    content, err := ioutil.ReadFile(filepath)
        if err != nil {
            return nil, err
        }
     
        configs := make(map[string]map[string][]Service, 0)
        err = json.Unmarshal(content, configs)
        if err != nil {
            return nil, err
        }
    Creative Commons License

    本文基于署名-非商业性使用 3.0许可协议发布,欢迎转载,演绎,但是必须保留本文的署名叶剑峰(包含链接http://www.cnblogs.com/yjf512/),且不得用于商业目的。如您有任何疑问或者授权方面的协商,请与我联系

     
    分类: Go
  • 相关阅读:
    python-文件操作
    python之-字符编码
    课程总结
    IO流文件输出流的应用
    字符串的基本操作
    数据结构字符串实训报告
    窗口的切换
    事件处理
    Java异常处理
    二维数组实现转置
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2907880.html
Copyright © 2011-2022 走看看