好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Go知识点记录

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用户

方法:

使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])

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

(使用下面一套方法)

?

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)

比如这个程序

?

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/

返回结果:

?

[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

比如

?

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)

     }}

别使用

?

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

     }

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

 

分类:  Go

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于Go知识点记录的详细内容...

  阅读:41次