var p Person {}
p.name 这个 name 能不能通过字符串变量来代替访问?
类似 js 的 p[“aa”+bb]
请问这样设计的考虑是什么? 因为 p 和 p 的成员在编译的时候都已经确定了 为什么还不能通过变量来确定访问的是哪一个?
1
codehz 2023-05-18 00:37:44 +08:00 via iPhone
主要是能做到这件事的,by definition 就是叫反射(
Js 可以做是因为按定义,js object 就是 hash table |
2
lisongeee 2023-05-18 01:33:17 +08:00
呃呃,不知道 go 有没有编译插件,编译的时候扫描 AST ,直接生成你想要的方法就行,这样也不需要反射
|
3
aloxaf 2023-05-18 09:01:27 +08:00 1
|
4
NessajCN 2023-05-18 09:03:04 +08:00
你要用变量当 key 为啥不用 map
|
5
matrix1010 2023-05-18 09:47:04 +08:00
Go 不是 js 不追求灵活性。获取 struct 的 field 直接.name 肯定是最明确的,额外增加一种方法反而会提高语言复杂度和开发者阅读 /维护成本
|
6
bugfan 2023-05-18 09:56:47 +08:00
可以的,去研究一下 golang 的 reflect 包,实例化之后依然可以通过反射更改里面的属性或者方法。很多框架都是基于反射做的。
https://github.com/bugfan/rest 这个是我做的自动生成 curd api 的框架,其中就用到了大量反射😄 |
7
guonaihong 2023-05-18 11:07:12 +08:00
用反射库做,看下 FieldByName 这个 api 。当然反射性能差,慎用。
|
8
jones2000 2023-05-18 14:36:06 +08:00
把类里所有变量,都建立对应的变量指针, 放到 map 里面, 这样通过名字就可以获取到这些变量指针, 然后就可以用了。重载[]这个操作符, 基本就可以了,也不需要什么反射了。
|