Проблемы с отладчиком Голанда

У меня странная ошибка в Голанге.

OS: Linux Ubuntu 18.04.

CPU: AMD with 64 Bit Support.

IDE is Goland 2018.1.5.

Go version is 1.10.1.

Compiler is set to: 'Any'.

Я пробовал оба компилятора "gc" и "gccgo". Результат тот же.

В приведенной ниже программе Debugger показывает странные вещи. Переменная 'aUnion' содержит внутри «John», но переменная «aRecord», в которой есть тип Union, не имеет внутри «John».

Если я 'fmt.Printf', они оба там, но отладчик не показывает Джона внутри 'aRecord'. Это ошибка отладчика?

Программа очень простая. Просто вложенные структуры передаются как указатель.

    // 33.go.

    package main

    import "fmt"

    type Person struct {
        Name string
        Age  int
    }
    type GroupOfPeople struct {
        Name   string
        People []*Person
    }
    type Union struct {
        ID    int
        Group *GroupOfPeople
    }
    type Record struct {
        UnionField *Union
        Type       int
    }

    func main() {

        var aPerson *Person
        var people []*Person
        var aGroup *GroupOfPeople
        var aUnion *Union
        var aRecord *Record

        aPerson = &Person{
            Name: "John",
            Age:  10,
        }
        people = []*Person{aPerson}
        aGroup = &GroupOfPeople{
            Name:   "A Group",
            People: people,
        }
        aUnion = &Union{
            ID:    123,
            Group: aGroup,
        } // John is inside 'aUnion'.
        aRecord = &Record{
            UnionField: aUnion,
            Type:       666,
        }
        // John is NOT inside 'aRecord'.
        // WHY ?!
        fmt.Printf("aUnion: %+v.\r\n", aUnion.Group.People[0])
        fmt.Printf("aRecord: %+v.\r\n", aRecord.UnionField.Group.People[0])
    }

Спасибо за помощь!

Я только что попробовал, и в обеих выходных строках есть «Джон». Что произойдет, если вы скомпилируете и запустите эту программу из командной строки (go run file.go)?

Andy Schweig 01.07.2018 01:23

Я отредактировал вопрос. fmt.Printf показывает Джона в обеих структурах. Основная проблема в том, что встроенный отладчик Goland не показывает Джона внутри 'aRecord'. Интересно, почему это так и как это исправить.

Chelovek 01.07.2018 01:41

попробуйте проверить их в отладчике. вы будете удивлены ...

Chelovek 01.07.2018 01:54

Вопросы, требующие помощи по отладке («почему этот код не работает?»), Должны включать в себя желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для их воспроизведения в самом вопросе. Вопросы без четкой постановки проблемы не будут полезны другим читателям. См .: Как создать минимальный, полный и проверяемый пример.

peterSO 01.07.2018 02:42

Вот MCVE, который дает ожидаемый результат: play.golang.org/p/O_TkFDcunUU Пожалуйста, предоставьте точные, подробные инструкции о том, как воспроизвести вашу проблему.

peterSO 01.07.2018 02:42

На сайте play.golang.org нет отладчика. Для воспроизведения проблемы вы можете отладить код в программе Goland указанной версии. Установите точку останова на последней строке кода и проверьте две упомянутые мной переменные. Вы понимаете, что я вам говорю?

Chelovek 01.07.2018 06:19

Вот свидетельство странного поведения отладчика. 2 изображения. Почувствуйте разницу. 1. imghost.io/image/fGdA8 2. imghost.io/image/fGcjX Теперь вы поняли?

Chelovek 01.07.2018 06:27
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
7
204
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это проблема в том, как GoLand обрабатывает вложение значений этих переменных во время выполнения.

Я создал Эта проблема, чтобы отслеживать и исправлять.

Между тем, вы можете использовать функцию «Наблюдения», чтобы наблюдать за «aRecord.UnionField.Group.People» в качестве примера, который затем будет правильно отображать значения. Извините за причиненные неудобства.

И небольшое обновление. Это будет исправлено в выпуске 2018.2, и если вы хотите попробовать его раньше, вы можете использовать следующий выпуск EAP после 2018.2 EAP 3.

dlsniper 02.07.2018 22:24

Другие вопросы по теме