go 函数
1、runtime.FuncForPC
// 当前函数信息
pc, file, line, ok = runtime.Caller(0) 1 上一层函数信息 2.。。
log.Println(pc)
log.Println(file)
log.Println(line)
log.Println(ok)
f = runtime.FuncForPC(pc)
log.Println(f.Name())
直接从函数指针获取函数名称所属文件
pc := reflect.ValueOf(XXFUNC).Pointer()
f := runtime.FuncForPC(pc)
log.Println(f.FileLine(pc))
2、底层数据操作
var t = val.Kind()
reflect.Struct:
var t = val.Type()
for i := 0; i < val.NumField(); i++ {
var name = t.Field(i).Name
val.Field(i)。。。。
}
reflect.Array, reflect.Slice:
for i := 0; i < val.Len(); i++ {
var elem = val.Index(i)
elem.Kind()
case reflect.Map:
var t = val.Type()
var keys = val.MapKeys()
for i := 0; i < len(keys); i++ {
var elem = val.MapIndex(keys[i])
}
3、io.LimitedReader
func LimitReader(r Reader, n int64) Reader LimitReader返回一個從r讀取但在n字節後以EOF停止的Reader。 r := strings.NewReader("some io.Reader stream to be read\n") lr := io.LimitReader(r, 4)
4、ioutil.ReadAll注意事项
ioutil.ReadAll方法,但是这个方法虽然方便有时候却会导致一些性能问题。底层到底如何读取的:ReadAll调用了内部方法readAll。如果用ioutil.ReadAll来读取即使只有1byte也会申请512byte,如果数据量大的话浪费的更多每次都会申请512+2*cap(b.buf),这个接口耗时不稳定,最少1ms,最多可能到120ms甚至更长。可能的原因:接口的底层需要申请内存,可能是这部分的耗时较长。
解决办法bufio.Reader.Read, r := bufio.NewReader(file)
版权声明本文仅代表作者观点,不代表本站立场。本文系作者授权发表,未经许可,不得转载。图文来源网络,侵权删!