Go知识点记录

简介:

import包命名

import的包可以给它命名

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

testing的Error和Fatal的区别

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

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

path.Clean使用

path.Clean用于对路径

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

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
     }
目录
相关文章
|
Java Go 调度
Go语言并发编程原理与实践:面试经验与必备知识点解析
【4月更文挑战第12天】本文分享了Go语言并发编程在面试中的重要性,包括必备知识点和面试经验。核心知识点涵盖Goroutines、Channels、Select、Mutex、Sync包、Context和错误处理。面试策略强调结构化回答、代码示例及实战经历。同时,解析了Goroutine与线程的区别、Channel实现生产者消费者模式、避免死锁的方法以及Context包的作用和应用场景。通过理论与实践的结合,助你成功应对Go并发编程面试。
462 3
|
存储 中间件 Go
|
XML JSON Java
|
XML JSON Java
Go容易搞错的知识点汇总
这篇文章汇总了我在开发和刷面试题过程中遇到的容易搞错的知识点,关键部分也都为大家写了代码示例。
295 0
Go容易搞错的知识点汇总
Go面试题进阶知识点:select和channel
这篇文章将重点讲解Go面试进阶知识点:select和channel。
432 0
Go面试题进阶知识点:select和channel
|
安全 Java Go
go语言几个最重要知识点的总结(2)
go语言几个最重要知识点的总结(2)
341 0
go语言几个最重要知识点的总结(2)
|
数据采集 安全 Java
go语言几个最重要知识点的总结(1)
go语言几个最重要知识点的总结(1)
480 0
go语言几个最重要知识点的总结(1)
|
分布式计算 Java Go
Go语言第二天---基本知识点的总结
Go语言第二天---基本知识点的总结
322 0
Go语言第二天---基本知识点的总结
|
编译器 Go
[Golang] Go语言基础一知半解??这些你容易忽视的知识点(第一期)
[Golang] Go语言基础一知半解??这些你容易忽视的知识点(第一期)

热门文章

最新文章