返回顶部
首页 > 资讯 > 精选 >接受任何结构的通用结构
  • 141
分享到

接受任何结构的通用结构

2024-02-06 08:02:03 141人浏览 独家记忆
摘要

问题内容 如何制作接受任何结构的通用结构? package model type model struct { m *interface{} } func (m *mode

问题内容

如何制作接受任何结构的通用结构?

package model

type model struct {
    m *interface{}
}

func (m *model) Select(){
    
}

type (
    field struct {
        table   string
        field   string
    }
    fields  map[string]field
)

type User struct {
    schema      string
    fields      fields
}

func NewUser() *interface{} {
    model_user := &User{
        schema: "main",
        
        fields: fields{
            "id":           field{"user","id"},
            "client_id":    field{"user","client_id"},
            "email":        field{"user","email"},
        },
    }
    return model(model_user)
}

主要内容

NewUser()

错误

cannot convert model_user (variable of type *User) to type model


正确答案


根据定义,model 结构似乎存在,用于将 Select() 函数添加(或尝试添加)到模型中包含的值。

即您似乎想要某种类型提供调用 Select() 的能力,并对任何任意类型的值执行某些操作(大概在 Select() 实现中使用某种形式的类型开关)。

如果是这样,那么您最好直接使用 interface 并消除 model 中间人:

type Selectable interface {
  Select()
}

type User struct {
  //...
}

func (u *User) Select() {
   // implement Select as appropriate for the User type
}

func NewUser() *User {
  return &User{
     // ...
  }
}

func Select(s Selectable) {
   s.Select()
}

func main() {
   u := NewUser()
   Select(u)
}

您会发现 Select(Selectable) 函数是多余的(您可以直接调用 u.Select() ;提供它只是为了说明在需要 Selectable 的情况下可以使用任何类型的值,前提是该类型实现了 Selectable 接口。

golang 中的 interfaces 提供鸭子类型 - 如果一个类型实现了接口的契约,那么它就实现了该接口,即使该具体类型事先不知道任何正式的接口定义。即“如果它看起来像鸭子并且嘎嘎叫起来像鸭子,那么它就是鸭子”。

如果目的是从 User 类型(或其他类型)中删除 Select()ing 的逻辑,并将其隔离在单独的“选择器”中,那么可以通过删除 model 中介并简单地实现一个 func 来再次实现这一点执行类型转换:

func Select(v any) error {
   switch v := v.(type) {
      case *User:
         // ... implement for *User or call some private fn which encapsulates this behaviour
      default:
          return errors.New("value cannot be Select()ed")
    }
}

以上就是接受任何结构的通用结构的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 接受任何结构的通用结构

本文链接: https://lsjlt.com/news/561298.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 接受任何结构的通用结构
    问题内容 如何制作接受任何结构的通用结构? package model type model struct { m *interface{} } func (m *mode...
    99+
    2024-02-06
  • Golang 中的通用结构/接口列表
    php小编百草在这篇文章中将为大家介绍Golang中的通用结构/接口列表。Golang是一种开源的编程语言,具有简单易学、高效可靠的特点,被广泛应用于网络编程、云计算等领域。在Gola...
    99+
    2024-02-13
    网络编程
  • C# 程序通用结构
    C# 程序由一个或多个文件组成。 每个文件均包含零个或多个命名空间。 一个命名空间包含类、结构、接口、枚举、委托等类型或其他命名空间。 以下示例是包含所有这些元素的 C# 程序主干。...
    99+
    2024-04-02
  • Python项目通用的目录结构总结
    一个好的项目结构会让我们在开发中更加得心应手。 对于Web项目,我们通常采用Flask或Django等框架,会有一套适合这种项目的工程目录。 对于爬虫项目,通常有Scrapy等开源框架,也会提供一套适合这种项目的工程目录。 对...
    99+
    2023-01-31
    结构 目录 项目
  • golang中通过interface{}的通用结构图
    一分耕耘,一分收获!既然打开了这篇文章《golang中通过interface{}的通用结构图》,就坚持看下去吧!文中内容包含等等知识点...希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的...
    99+
    2024-04-04
  • golang结构体方法接受多个参数类型
    php小编苹果今天为大家介绍一下Golang中的结构体方法,这些方法可以接受多个参数类型。Golang是一门开源的静态类型编程语言,它支持面向对象的编程风格,并且提供了结构体作为一种数...
    99+
    2024-02-11
  • golang 结构转接口
    随着软件设计的发展,软件系统面临着越来越复杂的挑战,如何优化代码架构以适应快速变化的需求成为了程序员们的重要任务。在过去,结构体一般是一个封装数据的数据类型,而接口是一组操作,但是随着 Golang 语言的兴起和流行,Golang 在设计语...
    99+
    2023-05-15
  • 获取实现接口或继承结构的结构名称
    php小编柚子为大家介绍一种获取实现接口或继承结构的结构名称的方法。在编程中,我们经常需要获取一个类实现了哪些接口或继承了哪些结构。通过使用反射机制,我们可以轻松地获得这些信息。只需使...
    99+
    2024-02-10
  • 将通用结构保存到 redis
    哈喽!大家好,很高兴又见面了,我是编程网的一名作者,今天由我给大家带来一篇《将通用结构保存到 redis》,本文主要会讲到等等知识点,希望大家一起学习进步,也欢迎大家关注、点赞、收藏、转发! 下面就...
    99+
    2024-04-05
  • 为什么接受自定义结构来代替错误?
    你在学习Golang相关的知识吗?本文《为什么接受自定义结构来代替错误?》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!...
    99+
    2024-04-05
  • 如何使用自定义结构定义通用函数而不列出所有结构?
    在PHP中,如果我们想要使用自定义结构来定义通用函数,而不必列出所有的结构,有一个高效的方法可以实现。这种方法是通过使用可变数量的参数来达到目的。通过在函数定义中使用省略号(...)作...
    99+
    2024-02-09
  • golang结构如何转成接口?
    在 go 中,可以通过类型断言从结构体转换为接口。语法为 value, ok := value.(type),其中 value 为要转换的变量或表达式,type 为要转换到的接口类型,o...
    99+
    2024-04-08
    golang 结构转接口
  • 通用的Java数据结构有哪些
    本篇内容主要讲解“通用的Java数据结构有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“通用的Java数据结构有哪些”吧!1.数组数组是固定大小的结构,可以...
    99+
    2024-04-02
  • Linux的file结构体和inode结构体怎么用
    本篇内容介绍了“Linux的file结构体和inode结构体怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. file 结构体fil...
    99+
    2023-06-27
  • Go 通过结构struct实现接口interface的问题
    目录一、通过结构(struct) 实现 接口(interface)二、代码示例一、通过结构(struct) 实现 接口(interface) 1、在了解iris框架的时候,经常看到有...
    99+
    2024-04-02
  • 通过反射提取通用结构体值
    本篇文章向大家介绍《通过反射提取通用结构体值》,主要包括,具有一定的参考价值,需要的朋友可以参考一下。问题内容我正在尝试将结构体的所有值提取到字符串切片中。 func structValues(i...
    99+
    2024-04-04
  • Java选择结构与循环结构的使用详解
    目录前言一.选择结构1.1 if选择结构的四种格式1.2 switch选择结构二.循环结构2.1 while循环结构2.2 do-while循环结构2.3 for循环结构2.4 fo...
    99+
    2024-04-02
  • 如何通过 Zerolog 自动记录结构?
    php小编西瓜为您介绍如何通过Zerolog自动记录结构。Zerolog是一个高性能的日志库,它可以帮助我们在应用程序中自动记录结构化的日志。通过使用Zerolog,我们可以轻松地将日...
    99+
    2024-02-12
  • OGG12.2常用结构
    1、单项复制结构  源数据系统--(Capture)-->队列文件---(Pump)-->网络(Internet,Intranet)-->队列文件--(Delivery...
    99+
    2024-04-02
  • C# 程序通用结构是怎么样的
    这篇文章主要介绍了C# 程序通用结构是怎么样的,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。C# 程序由一个或多个文件组成。 每个文件均包含零个或多个命名空间。 一...
    99+
    2023-06-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作