首页 > 后端开发 > Golang > 稍后将新值分配给 go 中接口的底层对象

稍后将新值分配给 go 中接口的底层对象

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
发布: 2024-02-14 11:24:09
转载
832 人浏览过

稍后将新值分配给 go 中接口的底层对象

php小编香蕉在这篇文章中将为大家介绍一个重要的概念:“稍后将新值分配给 go 中接口的底层对象”。这个概念在Go语言中非常常见,它允许我们在运行时动态地改变接口的底层对象,从而实现更灵活的编程。通过这种方式,我们可以在不改变接口定义的情况下,替换接口的具体实现,从而实现代码的扩展和灵活性。在接下来的文章中,我们将详细讨论这个概念的原理和用法。

问题内容

我试图在下面的代码中为接口的底层结构分配新值。但它保留了旧的价值观。下面是示例代码。

package main

import (
    "fmt"
    "math"
)

type Shape interface {
    Area() float64
}

type Circle struct {
    Radius float64
    Name   string
}

func (c Circle) Area() float64 {
    return math.Pi * c.Radius * c.Radius
}

type Rectangle struct {
    Length float64
    Width  float64
    Name   string
}

func (r Rectangle) Area() float64 {
    return r.Length * r.Width
}

func assignRadius(s Shape, radius float64, name string) {
    switch s := s.(type) {
    case Circle:
        s.Radius = radius
        s.Name = name
    case Rectangle:
        s.Length = radius
        s.Name = name
    }
}

func main() {
    var s Shape
    c := Circle{Radius: 0, Name: "My Circle"}
    s = c
    fmt.Println(s.Area())
    fmt.Println(c.Radius)
    fmt.Println(c.Name)
    assignRadius(s, 10, "My New Circle")
    fmt.Println(c.Radius)
    fmt.Println(c.Name)
}
登录后复制

shape 的类型在 assignradius 中事先未知。我知道这与指针有关。但想不通。shape 的类型在 assignradius 中事先未知。我知道这与指针有关。但想不通。

解决方法

接口变量 s

解决方法

接口变量 s 包含形状值的副本。要像您尝试的那样修改它,它必须包含指向该形状的指针:🎜
var s shape
c := circle{radius: 0, name: "my circle"}
s = &c
登录后复制
🎜并且在修改它们的函数中,您必须键入断言指针值:🎜
func assignRadius(s Shape, radius float64, name string) {
    switch s := s.(type) {
    case *Circle:
        s.Radius = radius
        s.Name = name
    case *Rectangle:
        s.Length = radius
        s.Name = name
    }
登录后复制

以上是稍后将新值分配给 go 中接口的底层对象的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
双语言或多语言网站怎么做?
来自于 1970-01-01 08:00:00
0
0
0
objective-c - iOS9如何设置默认国际化语言
来自于 1970-01-01 08:00:00
0
0
0
这个是Java语言的吗
来自于 1970-01-01 08:00:00
0
0
0
php是世界上最好的语言
来自于 1970-01-01 08:00:00
0
0
0
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板