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)



版权声明本文仅代表作者观点,不代表本站立场。本文系作者授权发表,未经许可,不得转载。图文来源网络,侵权删!

搜索