LINUX.ORG.RU

Как проверить существование

Никак. Пили свой NullableInt, или используй указатель *Int

no-such-file ★★★★★
()

У структуры все поля существуют при создании. Если в объявлении типа есть поля то, они будут и в структуре этого типа. Если нету то не будет.

Int0l ★★
()
Последнее исправление: Int0l (всего исправлений: 2)
Ответ на: комментарий от Xwo

Любой каприз за ваши деньги. ;)

package main

import (
	"fmt"
	"reflect"
)

func HasField(v interface{}, name string) bool {
	return hasField(reflect.ValueOf(v), name)
}

func hasField(v reflect.Value, name string) bool {
	switch v.Type().Kind() {
	case reflect.Ptr:
		return hasField(v.Elem(), name)
	case reflect.Struct:
		_, ok := v.Type().FieldByName(name)
		return ok
	}
	return false
}

func main() {
	type Employee struct {
		ID      int
		Name    string
		Address string
		some    int
	}
	x := Employee{
		Name: "Vasya",
	}
	fmt.Println(HasField(x, "some"))      // true
	fmt.Println(HasField(x, "someOther")) // false
}

Но учти! reflect is a path to the dark side.

Серьёзно, не надо так делать. Никогда. Но если очень хочется, то можно конечно. Но всё же лучше не надо.

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)
Ответ на: комментарий от beastie

Только хотел по поводу reflect написать, а вы сами это упомянули в конце своего сообщения :)

deterok ★★★★★
()

Через указатели:

package main

import (
	"fmt"
	// "math/rand"
)

func main() {
	type Employee struct {
		ID      int
		Name    string
		Address string
		some    *int
	}
	x := Employee{
		Name: "Vasya",
	}
	// x.some = new(int)
	// *x.some = 42
	if x.some == nil {
		fmt.Println("some unset")
	} else {
		fmt.Printf("some: %d\n", *x.some)
	}

	fmt.Println("")

}
KillTheCat ★★★★★
()
Ответ на: комментарий от Deleted

ТС сам не знает, что хочет. В общем случае, сравнение с умолчальным значение – это то, что он скорее всего хотел.

beastie ★★★★★
()

Как проверить существование члена?

Прощупать уже предлагали?

anonymous
()

на легальность?

anonymous
()

Ээээ Го вроде типизированный...

dem ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.