itarticle go interface composing interfaces type conversion implementing with values vs .pointers best prcatices 0