func SliceValue(i any) any {
if reflect.TypeOf(i).Kind() == reflect.Slice {
sliceVal := reflect.ValueOf(i)
if sliceVal.Len() > 0 {
return sliceVal.Index(0).Interface()
}
}
return nil
}
Go reflectパッケージを使って関数名を取得する と組み合わせると、こういうこともできる
func FunctionName(i any) string {
if reflect.TypeOf(i).Kind() == reflect.Func {
return runtime.FuncForPC(reflect.ValueOf(i).Pointer()).Name()
} else if reflect.TypeOf(i).Kind() == reflect.Slice {
sliceVal := reflect.ValueOf(i)
if sliceVal.Len() > 0 {
firstElem := sliceVal.Index(0)
return runtime.FuncForPC(firstElem.Pointer()).Name()
}
}
return ""
}