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 <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 {}
以上是透過引用改變介面值的詳細內容。更多資訊請關注PHP中文網其他相關文章!