Je suppose que si j'essaie de passer un pointeur sur une fonction, cette déclaration de fonction devrait également recevoir un pointeur? Pas sûr, j'ai essayé ceci:

package main

import (
    "fmt"
)
type I interface {
    Get() int
    Set(int)
}

type S struct {
    Age int
}
func (s S) Get() int {
    return s.Age
}
func (s *S) Set(age int) {
    s.Age = age
}
func f(i I) {
    i.Set(10)
    fmt.Println(i.Get())
}
func main() {
    s := S{}
    f(&s) //4
    fmt.Println(s.Get())
}

Il imprime

10
10

On voit que la fonction de f est

func f(i I)

Je ne suis pas sûr que ce soit une déclaration "passe par valeur", si par valeur, alors "i" ne devrait pas être changé en dehors de la fonction "f" à droite, qui est une copie à l'intérieur de "f".

Alors, quel point me suis-je trompé?

-3
Troskyvs 4 nov. 2019 à 08:06