• go-使用 unsafe 修改 struct 中的 field 的值


    以下是方法,不要纠结原理,等东西积累多了,你才有能力纠结原理:

    首先,你需要有一个这样的函数,这是在 nsq 的源码里直接抄过来的:

    func unsafeValueOf(val reflect.Value) reflect.Value {
        uptr := unsafe.Pointer(val.UnsafeAddr())
        return reflect.NewAt(val.Type(), uptr).Elem()
    }

    你有一个 struct:

    type haoba struct {
        i int
    }

    现在你想通过 reflect 的方式去改这个 i int。

    下面是代码:

    func pobokeyuan() {
        phaoba := &haoba{i: 1}
        v := reflect.ValueOf(phaoba).Elem()
        t := v.Type()
        var j = 4
        vj := reflect.ValueOf(j)
        f := t.Field(0)
        fv := v.FieldByName(f.Name)
        d := unsafeValueOf(fv)
        d.Set(vj)
        fmt.Println("we can do this ", phaoba.i)
    }
  • 相关阅读:
    能用HTML/CSS解决的问题,就不要用JS
    跨域
    从输入url到页面展示到底发生了什么
    hosts 文件
    了解Web及网络基础
    hybrid
    组件化和 React
    MVVM 和 VUE
    虚拟 DOM
    ES6模块化与常用功能
  • 原文地址:https://www.cnblogs.com/onebook/p/5615295.html
Copyright © 2020-2023  润新知