2022-05-01:golang里,结构体B里包含一个结构体A和一个整型成员变量。现在要给结构体A实现一个方法,让它能访问到B的整型变量,这个方法应该怎么写? 如果还有结构体C,D,E,F...都和

2023-07-29,,

2022-05-01:golang里,结构体B里包含一个结构体A和一个整型成员变量。现在要给结构体A实现一个方法,让它能访问到B的整型变量,这个方法应该怎么写?
如果还有结构体C,D,E,F…都和B一样,那A的方法应该怎么写?
来自字节,腾讯,百度,滴滴。来自脉脉。

答案2022-05-01:

方法一:A方法把结构体B当成入参传进去。
方法二:通过unsafe获取结构体B的对象。
这道题的正确答案不知道,来自大厂的人可以发布下评论。

代码用golang编写。代码如下:

package main

import (
"fmt"
"unsafe"
) type A struct {
i1 int
s1 string
} //直接把B传进来
func (this *A) GetInt1(b1 *B) int {
return b1.Int
} //已知偏移量
func (this *A) GetInt2() int {
b1 := (*B)(unsafe.Pointer(uintptr(unsafe.Pointer(this)) - 8))
return b1.Int
} //未知偏移量
func (this *A) GetInt3() int {
b := new(B)
offset := uintptr(unsafe.Pointer(&b.a1)) - uintptr(unsafe.Pointer(b)) b1 := (*B)(unsafe.Pointer(uintptr(unsafe.Pointer(this)) - offset))
return b1.Int
} type B struct {
Int int
a1 A
} func main() {
b1 := new(B)
b1.Int = 55
fmt.Println(b1.a1.GetInt1(b1))
fmt.Println(b1.a1.GetInt2())
fmt.Println(b1.a1.GetInt3())
}

执行结果如下:

2022-05-01:golang里,结构体B里包含一个结构体A和一个整型成员变量。现在要给结构体A实现一个方法,让它能访问到B的整型变量,这个方法应该怎么写? 如果还有结构体C,D,E,F...都和的相关教程结束。

《2022-05-01:golang里,结构体B里包含一个结构体A和一个整型成员变量。现在要给结构体A实现一个方法,让它能访问到B的整型变量,这个方法应该怎么写? 如果还有结构体C,D,E,F...都和.doc》

下载本文的Word格式文档,以方便收藏与打印。