返回顶部
首页 > 资讯 > 精选 >Go:如何在地图和切片中使用接口
  • 504
分享到

Go:如何在地图和切片中使用接口

2024-02-10 21:02:04 504人浏览 薄情痞子
摘要

PHP小编苹果将为大家介绍如何在地图和切片中使用接口。在现代web开发中,地图和切片是常见的功能需求。而使用接口可以使得地图和切片的操作更加灵活和可扩展。本文将详细解释接口的概念,以及

PHP小编苹果将为大家介绍如何在地图和切片中使用接口。在现代web开发中,地图和切片是常见的功能需求。而使用接口可以使得地图和切片的操作更加灵活和可扩展。本文将详细解释接口的概念,以及如何在地图和切片中利用接口实现各种功能。通过阅读本文,您将学会如何优化地图和切片的使用,提升用户体验和性能。让我们一起来探索这个有趣的话题吧!

问题内容

我需要一个接口映射,因为我希望能够运行一个可以使用任一接口的具体实现的函数,而不关心这些结构可以执行的“额外”操作。

我读过https://jordanorelli.com/post/32665860244/how-to-use-interfaces-in-Go,它对指针和接口有很好的解释,但我仍然不知道如何在实践中完成我想要的事情。

我正在尝试以下代码:

Https://play.golang.com/p/nrh2iyk7t9f

package main

import (
    "fmt"
)

type iexample interface {
    getname() string
}

type concrete struct {
    name string
}

func (c *concrete) getname() string {
    return c.name
}

func main() {
    // in my real application this is a slice returned from gORM orm
    var s = []concrete{
        concrete{name: "one"},
        concrete{name: "two"},
    }

    foo := make(map[string]iexample)
    bar := []iexample{}

    for _, c := range s {
        foo[c.name] = &c
        bar = append(bar, &c)
        fmt.printf("set key [%s]\r\n", c.name)
    }

    for name, element := range foo {
        fmt.printf("key: [%s] has element [%s]\r\n", name, element.getname())
    }
    for name, element := range bar {
        fmt.printf("key: [%d] has element [%s]\r\n", name, element.getname())
    }

}

输出:

set key [one]
set key [two]
key: [one] has element [two]
key: [two] has element [two]
key: [0] has element [two]
key: [1] has element [two]

我真正想要的是元素一位于键“one”中。

我认为问题的发生是由于使用引用 foo[c.name] = &c 进行的分配。我需要这个,因为否则我会收到错误“cannot use c (concrete 类型的变量) 作为赋值中的 iexample 值:concrete 未实现 iexample(方法 getname 有指针接收器)

阅读完https://dusted.codes/using-go-generics-to-pass-struct-slices-for-interface-slices后,我想知道是否可以使用泛型来解决问题,但我无法解决如何实现。

type ExampleMap map[string]IExample

func (e *ExampleMap) add[T IExample](id string item T) {
    e[id] = item
}
// syntax error: method must have no type parameters

如何让该地图包含正确的元素?

解决方法

你所做的是正确的。您只是将错误的内容放入地图中:

for i,c := range s {
        foo[c.Name] = &s[i]
        bar = append(bar, &s[i])
        fmt.Printf("Set key [%s]\r\n", c.Name)
    }

循环变量在每次迭代时都会被重写,因此当您将 &c 添加到映射和切片时,您添加的指针就是 c 的地址,该地址在每次迭代时都会被覆盖。

以上就是Go:如何在地图和切片中使用接口的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: Go:如何在地图和切片中使用接口

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

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

猜你喜欢
  • Go:如何在地图和切片中使用接口
    php小编苹果将为大家介绍如何在地图和切片中使用接口。在现代Web开发中,地图和切片是常见的功能需求。而使用接口可以使得地图和切片的操作更加灵活和可扩展。本文将详细解释接口的概念,以及...
    99+
    2024-02-10
  • Go slice切片如何使用
    这篇文章主要介绍“Go slice切片如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Go slice切片如何使用”文章能帮助大家解决问题。定义切片区别于数组,是引用类型,...
    99+
    2023-07-02
  • JNI本地接口如何在Java中使用
    这篇文章将为大家详细讲解有关JNI本地接口如何在Java中使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。详解Java 本地接口 JNI 使用方法对于Java程序员来说,Java语言的好处...
    99+
    2023-05-31
    java jni ava
  • 在node中如何使用koa框架调用高德地图接口
    在node中如何使用koa框架调用高德地图接口,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。高德开放平台调高德接口我们最重要需...
    99+
    2024-04-02
  • GO语言中接口和接口型函数如何使用
    这篇文章主要讲解了“GO语言中接口和接口型函数如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“GO语言中接口和接口型函数如何使用”吧!// A Getter&nbs...
    99+
    2023-07-05
  • 如何在 JavaScript 中使用 Go 的数组接口?
    在本文中,我们将探讨如何在 JavaScript 中使用 Go 的数组接口。Go 是一种强类型、静态编译语言,其数组接口非常实用。尽管 JavaScript 是一种动态类型的解释性语言,但通过一些技巧和技术,我们可以利用 Go 的数组接口...
    99+
    2023-07-01
    数组 javascript 接口
  • 如何在Linux中使用Go编写Shell接口?
    Shell是Linux系统中非常重要的一个部分,它是用户与操作系统之间的桥梁,可以通过Shell来执行各种命令和操作。而Go语言是一门非常流行的编程语言,它可以用来编写高效的系统程序。在本文中,我们将介绍如何使用Go语言来编写Shell接...
    99+
    2023-10-21
    shell 接口 linux
  • Go语言中如何使用NumPy和Git接口?
    Go语言是一种高效、简洁、安全的编程语言,它在开发Web应用、云计算、网络通信等方面有着广泛的应用。而NumPy和Git则是两个非常流行的工具,分别用于科学计算和版本控制。本文将介绍如何在Go语言中使用NumPy和Git接口,以便更好地进行...
    99+
    2023-07-01
    numy git 接口
  • Go中如何使用for循环遍历切片
    在Go中,可以使用for range循环来遍历切片。下面是一个简单的示例: package main import "f...
    99+
    2024-04-02
  • 如何用Go判断元素是否在切片中
    目录1.问题2.遍历查询3.map 查询4.性能对比5.转换通用化6.借助开源库 golang-set7.小结参考文献1.问题 如何判断元素是否在切片中,Golang 并没有提供直接...
    99+
    2024-04-02
  • 如何使用 Go 接口在 Bash 中加载文件?
    在本文中,我们将介绍如何使用 Go 接口在 Bash 中加载文件。Go 是一种高效的编程语言,它可以通过接口实现多态,同时 Bash 是一种常用的 shell 脚本语言,它可以用于处理文本和文件。通过结合使用这两种语言,我们可以实现在 Ba...
    99+
    2023-08-03
    接口 bash load
  • Go语言容器的数组和切片如何使用
    这篇文章主要介绍“Go语言容器的数组和切片如何使用”,在日常操作中,相信很多人在Go语言容器的数组和切片如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go语言容器的数组和切片如何使用”的疑惑有所帮助!...
    99+
    2023-07-04
  • python中如何使用切片
    这篇文章给大家介绍python中如何使用切片,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Python 切片用法: 先创建一个0-99的数列: >>> L = range(100)>&...
    99+
    2023-06-04
  • go语言中的切片如何定义及使用
    这篇文章主要介绍“go语言中的切片如何定义及使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“go语言中的切片如何定义及使用”文章能帮助大家解决问题。golang切片(slice)(1)切片的定义切...
    99+
    2023-07-02
  • 如何在GO语言中使用接口进行编程?
    在GO语言中,接口是一种非常重要的编程概念。接口可以被看作是一组方法的集合,这些方法是对某个对象或类型的行为进行描述的。通过使用接口,我们可以将不同的类型进行抽象,从而更加灵活地进行编程。接下来,本文将介绍如何在GO语言中使用接口进行编程...
    99+
    2023-07-27
    编程算法 接口 框架
  • 如何在Django中使用GO语言编写的接口?
    Django 是一个优秀的 Python Web 框架,它提供了丰富的功能和强大的扩展性,使得我们可以方便地构建高性能、高效、安全的 Web 应用程序。然而,随着互联网技术的发展,越来越多的 Web 应用程序需要与其他语言编写的服务进行交互...
    99+
    2023-10-26
    ide django 接口
  • 如何在单元测试中比较 Go 切片和 NaN 元素?
    php小编百草在单元测试中比较 Go 切片和 NaN 元素是一个常见的问题。在处理切片时,我们经常需要比较两个切片是否相等,但当切片包含 NaN 元素时,比较会变得复杂。NaN 是一个...
    99+
    2024-02-12
  • 如何在bash中编写go接口?
    在bash中编写Go接口是一项有趣且有挑战性的任务。Go是一种高效的编程语言,它具有强大的并发性和内置的网络库。Bash则是一种流行的命令行解释器,用于在Linux和Unix系统上编写脚本。本文将介绍如何在Bash中编写Go接口,并提供一些...
    99+
    2023-09-29
    接口 bash 学习笔记
  • 如何在uniapp中删除本地图片
    随着移动应用的不断发展,用户上传和保存本地图片的需求越来越大,而uniapp框架作为一个跨平台的开发框架,也越来越受到开发者的喜爱。在uniapp中,删除本地图片是一个常见的操作,但是对于一些新手来说可能会有一些困惑。本文将从二个方面来介绍...
    99+
    2023-05-14
  • SpringBoot接口中如何直接返回图片数据
    目录接口直接返回图片数据起因类似这种根据个人经验优雅的实现图片返回接口直接返回图片数据 起因 最近在做涉及到分享推广的业务,需要由业务员分享二维码进入推广页面,由于是新项目,前期预算...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作