登录
首页 >  Golang >  Go问答

golang 多类型 任意参数指针 怎么使用?

来源:SegmentFault

时间:2023-01-14 19:01:38 179浏览 收藏

在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《golang 多类型 任意参数指针 怎么使用?》,聊聊go,希望可以帮助到正在努力赚钱的你。

问题内容

  • 如何在main方法中操作objcetA的test方法时,对传递进来的参数修改同时对原对象也进行修改,类似传地址的概念

package main
import "fmt"
type ObjectA struct {
   Config interface{}
}
func (ObjectA) test(param1 interface{})  {
   switch param1.(type) {
   case string:
      param1 = "world"
 fmt.Println("string")
   case *string:
      *param1.(*string) = "world"
 fmt.Println("*string")
   case *ObjectB:
      param1.(*ObjectB).Name = "name1"
 fmt.Println("*objectB")
   case ObjectB:
      fmt.Println("ObjectB")
   }
}
type ObjectB struct {
   Name string
}
func main()  {
   a := ObjectA{}
   s := "string"
 a.test(&s)
   object := ObjectB{};
   a.test(&object)
   fmt.Println(object)
   fmt.Println(s)
}

起因是想构建一个对象A,对象A提供一个配置属性,该属性允许传递string和另外一个对象B,传递过来的值修改同时能够影响外面的值,请教下这种情况该如何设计?

正确答案

不是有接受者吗?你为啥不定义一个接受者参数?

func (o *ObjectA) test(param1 interface{})  {
    o.Config = param1
   switch param1.(type) {
   case string:
      param1 = "world"
 fmt.Println("string")
   case *string:
      *param1.(*string) = "world"
 fmt.Println("*string")
   case *ObjectB:
      param1.(*ObjectB).Name = "name1"
 fmt.Println("*objectB")
   case ObjectB:
      fmt.Println("ObjectB")
   }
}

今天带大家了解了go的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表