Go访问私有变量

栏目: Go · 发布时间: 7年前

内容简介:工程上当然不能这么干,所以这篇文章呢,just for fun :)Go语言里,小写的变量,包外不可访问。前些天,同事说,Ruby有办法直接访问私有变量,我说其实Python也可以。那么问题来了,Go可以吗?答案当然是可以。正常情况下Go没法 直接访问私有变量只是因为编译器不让你这么干,我们绕开它就好了。

工程上当然不能这么干,所以这篇文章呢,just for fun :)

Go语言里,小写的变量,包外不可访问。

前些天,同事说,Ruby有办法直接访问私有变量,我说其实 Python 也可以。那么问题来了,Go可以吗?答案当然是可以。正常情况下 Go 没法 直接访问私有变量只是因为编译器不让你这么干,我们绕开它就好了。

虽然Go没有指针运算,不能直接根据指针运算来取出私有变量,但是有指针和type cast,就有办法访问的。看代码(为了方便,我没有把 这两个放到不同的包里,而是直接放到一个文件里了):

package main

import (
    "fmt"
    "unsafe"
)

type Demo struct {
    private        string
    youCannotSeeMe int
    Trick          bool
}

func main() {
    d := Demo{private: "hahaha", youCannotSeeMe: 110, Trick: true}
    p := unsafe.Pointer(&d)

    type Header struct {
        NotPrivate  string
        YouCanSeeMe int
    }

    fmt.Printf("%+v", *(*Header)(p))
}

执行一下:

$ go run main.go  && echo
{NotPrivate:hahaha YouCanSeeMe:110}

原理就是,侵入Demo的实现,取出d的结构体起始地址,然后强转为 Header 类型,这样就可以读出里边的值了。

:hushed:,最后再强调一遍,要是你在生产的代码里这么干,被同事打死了可不要说是我教的哈哈哈哈。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Python金融大数据分析

Python金融大数据分析

[德] 伊夫·希尔皮斯科 / 姚军 / 人民邮电出版社 / 2015-12 / CNY 99.00

唯一一本详细讲解使用Python分析处理金融大数据的专业图书;金融应用开发领域从业人员必读。 Python凭借其简单、易读、可扩展性以及拥有巨大而活跃的科学计算社区,在需要分析、处理大量数据的金融行业得到了广泛而迅速的应用,并且成为该行业开发核心应用的首选编程语言。《Python金融大数据分析》提供了使用Python进行数据分析,以及开发相关应用程序的技巧和工具。 《Python金融大......一起来看看 《Python金融大数据分析》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

SHA 加密
SHA 加密

SHA 加密工具