通过引用改变接口值

2024年 2月 14日 47.5k 0

通过引用改变接口值

php小编百草在这里为大家介绍一种通过引用改变接口值的方法。在编程中,有时候我们需要改变一个函数或方法的参数,但是又不希望直接返回一个新的值,而是希望通过引用的方式修改原来的值。这种情况下,我们可以使用引用参数来实现。通过引用参数,我们可以直接在函数内部修改传递进来的变量的值,而不需要返回一个新的值。这种方法可以提高性能,并且使代码更加简洁易读。在接下来的文章中,我们将详细介绍如何使用引用参数来改变接口值。

问题内容

package main

import (
"fmt"
)

// -------- library code. can't change ------------
type client struct {
transport roundtripper
}

type roundtripper interface {
do()
}

type transport struct{}

func (d transport) do() {}

var defaulttransport roundtripper = transport{}

// -------- my code. can change ------------
func changetransport(r roundtripper) {
if r == nil {
fmt.println("transport is nil")
r = defaulttransport
}
}

func main() {
c := client{}
changetransport(c.transport)
fmt.println(c.transport)
}

登录后复制

输出:

transport is nil

登录后复制

预期:

transport is nil
{}

登录后复制登录后复制

游乐场

我还根据https://stackoverflow.com/a/44905592/6740589尝试了这个:

func changetransport(r roundtripper) {
if r == nil {
fmt.println("transport is nil")
d, ok := defaulttransport.(transport)
if !ok {
log.fatal("impossible")
}

if t, ok := r.(*transport); ok {
t = &d
fmt.println("ignoreme", t)
} else {
log.fatal("uff")
}

}
}

登录后复制

输出:

transport is nil
2009/11/10 23:00:00 Uff

登录后复制

游乐场

解决方法

使用roundtripper接口的指针作为changetransport函数参数来更改指针的值:

// -------- my code. can change ------------
func changetransport(r *roundtripper) {
if r != nil && *r == nil {
fmt.println("transport is nil")
*r = defaulttransport
}
}

func main() {
c := client{}
changetransport(&c.transport)
fmt.println(c.transport)
}

登录后复制

transport is nil
{}

登录后复制登录后复制

游乐场

以上就是通过引用改变接口值的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论