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

Posted 福大大架构师每日一题

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022-05-01:golang里,结构体B里包含一个结构体A和一个整型成员变量。现在要给结构体A实现一个方法,让它能访问到B的整型变量,这个方法应该怎么写? 如果还有结构体C,D,E,F...都和相关的知识,希望对你有一定的参考价值。

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())

执行结果如下:

创作打卡挑战赛 赢取流量/现金/CSDN周边激励大奖

以上是关于2022-05-01:golang里,结构体B里包含一个结构体A和一个整型成员变量。现在要给结构体A实现一个方法,让它能访问到B的整型变量,这个方法应该怎么写? 如果还有结构体C,D,E,F...都和的主要内容,如果未能解决你的问题,请参考以下文章

golang(07)结构体介绍

golang 匿名结构体怎么append?

golang 使用匿名结构体的问题

Golang 入门 : 结构体(struct)

golang结构体组合与“多态” 2021-08-06

2022-06-13:golang中,[]byte和结构体如何相互转换?