2016-07-20 3 views
1

Я делаю (не двоичное) дерево в Голанге.Как я могу реализовать void * в golang?

В Java я хотел бы использовать что-то вроде

class Node{ 
    List <Object> data; 
} 

Где данные могут быть либо указатель на данные или дочернего узла

В C или C++, я хотел бы использовать пустоту * ,

Какой я должен использовать в golang

ответ

2

Я никогда не пытался решить эту проблему на любом языке, будет ли это работать в Go?

go play link редактировать после прочтения дубликата вопроса я вижу, что вы не спрашиваете о реализации, так или иначе наслаждаться ♥ ︎

package main 

import (
    "fmt" 
) 

type Node struct { 
    List []*Node 
    Data interface{} 
} 

func main() { 
    trivial := Node{} 

    leaf := Node{Data: 1} 

    tree := Node{ 
     List: []*Node{ 
      &leaf, 
      &leaf, 
     }, 
    } 
    out(trivial) 
    out(leaf) 
    out(tree) 
} 

func out(x interface{}) { 
    fmt.Printf("%T:%+v\n", x, x) 
} 

// main.Node:{List:[] Data:<nil>} 
// main.Node:{List:[] Data:1} 
// main.Node:{List:[0xc82000e180 0xc82000e180] Data:<nil>} 
0

Там нет недействительных указателей в Go. Способ справиться с этим заключается в использовании пустого интерфейса interface{}, который по сути реализуется всеми типами. Я задал вопрос об этой частичной спине, которую вы можете найти здесь; Go equivalent of a void pointer in C

+2

Там также unsafe.Pointer что, ну, менее безопасно, потому что он может быть принужденными к произвольному типу. Вы правы в том, что 'interface {}' более похож на 'Object', хотя это просто тип, который есть у любого другого типа. – LinearZoetrope