Slice of struct can't be plugged into slice of interface in golang [duplicate]











up vote
0
down vote

favorite













This question already has an answer here:




  • golang: slice of struct != slice of interface it implements?

    5 answers




I have Tag struct and TableAbstruct interface like below example.



[Tag struct]



type Tag struct {
Id int `db:"id"`
Name string `db:"Name"`
}
func (tag Tag) Serialize() string {
...
}


[TableAbstruct interface]



type TableAbstruct interface {
Serialize() string
}


Xxx() function returns TableAbstruct, but actual type is Tag. And below program will work well because Tag includes TableAbstruct interface.



func Xxx() TableAbstruct {
result := TableAbstruct{}
for i := 0; i < 10; i++ {
table_obj := Tag{}
result = append(result, table_obj)
}
return result
}


But I want to write like below and I couldn't. I think the problem is TypeError. But I couldn't understand why the error has occurred.



func Xxx() TableAbstruct {
result := Tag{}
return result
}









share|improve this question













marked as duplicate by Volker go
Users with the  go badge can single-handedly close go questions as duplicates and reopen them as needed.

StackExchange.ready(function() {
if (StackExchange.options.isMobile) return;

$('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');

$hover.hover(
function() {
$hover.showInfoMessage('', {
messageElement: $msg.clone().show(),
transient: false,
position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
dismissable: false,
relativeToBody: true
});
},
function() {
StackExchange.helpers.removeMessages();
}
);
});
});
Nov 9 at 6:02


This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.



















    up vote
    0
    down vote

    favorite













    This question already has an answer here:




    • golang: slice of struct != slice of interface it implements?

      5 answers




    I have Tag struct and TableAbstruct interface like below example.



    [Tag struct]



    type Tag struct {
    Id int `db:"id"`
    Name string `db:"Name"`
    }
    func (tag Tag) Serialize() string {
    ...
    }


    [TableAbstruct interface]



    type TableAbstruct interface {
    Serialize() string
    }


    Xxx() function returns TableAbstruct, but actual type is Tag. And below program will work well because Tag includes TableAbstruct interface.



    func Xxx() TableAbstruct {
    result := TableAbstruct{}
    for i := 0; i < 10; i++ {
    table_obj := Tag{}
    result = append(result, table_obj)
    }
    return result
    }


    But I want to write like below and I couldn't. I think the problem is TypeError. But I couldn't understand why the error has occurred.



    func Xxx() TableAbstruct {
    result := Tag{}
    return result
    }









    share|improve this question













    marked as duplicate by Volker go
    Users with the  go badge can single-handedly close go questions as duplicates and reopen them as needed.

    StackExchange.ready(function() {
    if (StackExchange.options.isMobile) return;

    $('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
    var $hover = $(this).addClass('hover-bound'),
    $msg = $hover.siblings('.dupe-hammer-message');

    $hover.hover(
    function() {
    $hover.showInfoMessage('', {
    messageElement: $msg.clone().show(),
    transient: false,
    position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
    dismissable: false,
    relativeToBody: true
    });
    },
    function() {
    StackExchange.helpers.removeMessages();
    }
    );
    });
    });
    Nov 9 at 6:02


    This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

















      up vote
      0
      down vote

      favorite









      up vote
      0
      down vote

      favorite












      This question already has an answer here:




      • golang: slice of struct != slice of interface it implements?

        5 answers




      I have Tag struct and TableAbstruct interface like below example.



      [Tag struct]



      type Tag struct {
      Id int `db:"id"`
      Name string `db:"Name"`
      }
      func (tag Tag) Serialize() string {
      ...
      }


      [TableAbstruct interface]



      type TableAbstruct interface {
      Serialize() string
      }


      Xxx() function returns TableAbstruct, but actual type is Tag. And below program will work well because Tag includes TableAbstruct interface.



      func Xxx() TableAbstruct {
      result := TableAbstruct{}
      for i := 0; i < 10; i++ {
      table_obj := Tag{}
      result = append(result, table_obj)
      }
      return result
      }


      But I want to write like below and I couldn't. I think the problem is TypeError. But I couldn't understand why the error has occurred.



      func Xxx() TableAbstruct {
      result := Tag{}
      return result
      }









      share|improve this question














      This question already has an answer here:




      • golang: slice of struct != slice of interface it implements?

        5 answers




      I have Tag struct and TableAbstruct interface like below example.



      [Tag struct]



      type Tag struct {
      Id int `db:"id"`
      Name string `db:"Name"`
      }
      func (tag Tag) Serialize() string {
      ...
      }


      [TableAbstruct interface]



      type TableAbstruct interface {
      Serialize() string
      }


      Xxx() function returns TableAbstruct, but actual type is Tag. And below program will work well because Tag includes TableAbstruct interface.



      func Xxx() TableAbstruct {
      result := TableAbstruct{}
      for i := 0; i < 10; i++ {
      table_obj := Tag{}
      result = append(result, table_obj)
      }
      return result
      }


      But I want to write like below and I couldn't. I think the problem is TypeError. But I couldn't understand why the error has occurred.



      func Xxx() TableAbstruct {
      result := Tag{}
      return result
      }




      This question already has an answer here:




      • golang: slice of struct != slice of interface it implements?

        5 answers








      go






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 9 at 3:46









      mk-tool

      315




      315




      marked as duplicate by Volker go
      Users with the  go badge can single-handedly close go questions as duplicates and reopen them as needed.

      StackExchange.ready(function() {
      if (StackExchange.options.isMobile) return;

      $('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
      var $hover = $(this).addClass('hover-bound'),
      $msg = $hover.siblings('.dupe-hammer-message');

      $hover.hover(
      function() {
      $hover.showInfoMessage('', {
      messageElement: $msg.clone().show(),
      transient: false,
      position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
      dismissable: false,
      relativeToBody: true
      });
      },
      function() {
      StackExchange.helpers.removeMessages();
      }
      );
      });
      });
      Nov 9 at 6:02


      This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.






      marked as duplicate by Volker go
      Users with the  go badge can single-handedly close go questions as duplicates and reopen them as needed.

      StackExchange.ready(function() {
      if (StackExchange.options.isMobile) return;

      $('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
      var $hover = $(this).addClass('hover-bound'),
      $msg = $hover.siblings('.dupe-hammer-message');

      $hover.hover(
      function() {
      $hover.showInfoMessage('', {
      messageElement: $msg.clone().show(),
      transient: false,
      position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
      dismissable: false,
      relativeToBody: true
      });
      },
      function() {
      StackExchange.helpers.removeMessages();
      }
      );
      });
      });
      Nov 9 at 6:02


      This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.


























          1 Answer
          1






          active

          oldest

          votes

















          up vote
          1
          down vote



          accepted










          Go does not have any fanciness around slices and types. Put simply, if you say you are going to return TableAbstruct, you have to return that exactly. So if you want to return a Tag, you have to create a slice of TableAbstruct and then go populate it manually:



          func Xxx() TableAbstruct {
          var returnValue TableAbstruct
          for _, t := range result {
          returnValue = append(returnValue, t)
          }
          return returnValue
          }





          share|improve this answer




























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes








            up vote
            1
            down vote



            accepted










            Go does not have any fanciness around slices and types. Put simply, if you say you are going to return TableAbstruct, you have to return that exactly. So if you want to return a Tag, you have to create a slice of TableAbstruct and then go populate it manually:



            func Xxx() TableAbstruct {
            var returnValue TableAbstruct
            for _, t := range result {
            returnValue = append(returnValue, t)
            }
            return returnValue
            }





            share|improve this answer

























              up vote
              1
              down vote



              accepted










              Go does not have any fanciness around slices and types. Put simply, if you say you are going to return TableAbstruct, you have to return that exactly. So if you want to return a Tag, you have to create a slice of TableAbstruct and then go populate it manually:



              func Xxx() TableAbstruct {
              var returnValue TableAbstruct
              for _, t := range result {
              returnValue = append(returnValue, t)
              }
              return returnValue
              }





              share|improve this answer























                up vote
                1
                down vote



                accepted







                up vote
                1
                down vote



                accepted






                Go does not have any fanciness around slices and types. Put simply, if you say you are going to return TableAbstruct, you have to return that exactly. So if you want to return a Tag, you have to create a slice of TableAbstruct and then go populate it manually:



                func Xxx() TableAbstruct {
                var returnValue TableAbstruct
                for _, t := range result {
                returnValue = append(returnValue, t)
                }
                return returnValue
                }





                share|improve this answer












                Go does not have any fanciness around slices and types. Put simply, if you say you are going to return TableAbstruct, you have to return that exactly. So if you want to return a Tag, you have to create a slice of TableAbstruct and then go populate it manually:



                func Xxx() TableAbstruct {
                var returnValue TableAbstruct
                for _, t := range result {
                returnValue = append(returnValue, t)
                }
                return returnValue
                }






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 9 at 4:29









                poy

                5,61753262




                5,61753262















                    Popular posts from this blog

                    Schultheiß

                    Verwaltungsgliederung Dänemarks

                    Liste der Kulturdenkmale in Wilsdruff