Как передать значение указателя из карты в аргумент функции - PullRequest
0 голосов
/ 11 июня 2018

Итак, мой вариант использования такой:

1.создать карту указателей на структуры (автомобили)

2.карта мутирования

3.повторить карту и перейти к функции

type Car struct {
    Model string
    Size  int
}

func getSize(car Car) {
    fmt.Println(car.Size)
}

func main() {
    cars := make(map[string]*Car)
    // fill cars with stuff
    cars["Toyota"] = &Car{
        Model: "Toyota",
        Size:  2,
    }

    for _, car := range cars {
        cars["Toyota"].Size = 4
    }

    for _, car := range cars {
        //somehow get the value of car and insert into function
        getSize(car)
    }
}

, но я не уверен, как передать значение указателя из карты в функцию, поскольку карты не позволяют вам обращаться к указателю.

Есть ли способ лучше пойти по этому поводу?

1 Ответ

0 голосов
/ 11 июня 2018

Вы можете разыменовать значение карты автомобилей во время вашего вызова, что вызовет функцию со значением, на которое указывает указатель автомобиля:

getSize(*car)


Если вы невы должны получить сообщение об ошибке компиляции:

prog.go: 31: 16: нельзя использовать car (тип * Car) в качестве типа Car в качестве аргумента для getSize

package main

import (
    "fmt"
)


type Car struct {
    Model string
    Size  int
}

func getSize(car Car) {
    fmt.Println(car.Size)
}

func main() {
    cars := make(map[string]*Car)
    // fill cars with stuff
    cars["Toyota"] = &Car{
        Model: "Toyota",
        Size:  2,
    }


    cars["Toyota"].Size = 4


    for _, car := range cars {
        //somehow get the value of car and insert into function
        getSize(car)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...