// OverwriteStructTag overwrites the struct tag completely func OverwriteStructTag(tag *ast.BasicLit, tagName string, offset *int, data []byte) []byte { val := tag.Value start := int(tag.Pos()) + *offset - 1 end := int(tag.End()) + *offset - 1 length := len(val) oldLength := end - start // Delete the original tag data = DeleteRange(data, start, end) var newTag string if options.AppendMode == Append { oldTag := removeIndex(removeIndex(val, 0), len(val)-2) newTag = fmt.Sprintf("`%s:\"%s\" %s`", options.Tag, tagName, oldTag) } else { newTag = fmt.Sprintf("`%s:\"%s\"`", options.Tag, tagName) } numSpaces := len(newTag) - oldLength - 1 var spaces string // Can't pass a negative number to strings.Repeat() // it will cause a panic because it passes this number directly to make() if numSpaces > 0 { spaces = strings.Repeat(" ", numSpaces) } newTag = fmt.Sprintf("%s%s", spaces, newTag) localOffset := len(newTag) - length *offset += localOffset // Insert new tag data = Insert(data, []byte(newTag), start) return data }