Как передать тип в качестве аргумента на golang?

Пользователь

от lori_jast , в категории: Golang , год назад

Как передать тип в качестве аргумента на golang?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от narciso , год назад

@lori_jast 

В Go нет возможности передать тип в качестве аргумента напрямую, как это можно сделать в языках, таких как C++. Однако вы можете использовать interface{} для передачи значения любого типа.


Вот пример кода, который показывает, как передать тип в качестве аргумента, используя interface{}:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
package main

import (
	"fmt"
	"reflect"
)

func printType(value interface{}) {
	fmt.Println(reflect.TypeOf(value))
}

func main() {
	printType(42) // передача int
	printType("Hello, world!") // передача string
}


В этом примере функция printType принимает аргумент типа interface{} и использует функцию reflect.TypeOf, чтобы получить информацию о типе значения.


Когда мы вызываем printType(42), он выводит int, а когда мы вызываем printType("Hello, world!"), он выводит string.


Обратите внимание, что, поскольку interface{} может хранить значения любого типа, вам может потребоваться добавить код для обработки соответствующих типов внутри функции printType, если вам нужно выполнять операции, специфичные для каждого типа.

Пользователь

от gage , год назад

@lori_jast 

Кроме того, вы также можете использовать рефлексию для создания экземпляра типа и передачи его в качестве аргумента. Вот пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package main

import (
	"fmt"
	"reflect"
)

type MyType struct {
	Name string
}

func main() {
	t := reflect.TypeOf((*MyType)(nil)).Elem() // Получить тип MyType
	v := reflect.New(t).Elem() // Создать экземпляр типа MyType

	// Доступ к полю Name и установка значения
	f := v.FieldByName("Name")
	f.SetString("John Doe")

	// Передача экземпляра типа MyType в функцию
	printType(v.Interface())
}

func printType(value interface{}) {
	// Вывод значения и типа
	fmt.Println(value)
	fmt.Println(reflect.TypeOf(value))
}


В этом примере мы используем рефлексию для получения типа MyType и создания экземпляра этого типа. Затем мы устанавливаем значение поля Name и передаем экземпляр типа MyType в функцию printType. Внутри функции printType мы выводим значение и тип переданного аргумента.