Как удалить кавычки из строки в Golang

у меня есть строка в Golang, которая окружена кавычками. Моя цель-убрать все кавычки по бокам, но игнорировать все кавычки внутри строки. Как мне это сделать? Мой инстинкт говорит мне использовать функцию удаления, как в C#, но я не вижу ничего подобного в Go.

например:

"hello""world"

должно быть преобразовано в:

hello""world

для дальнейшего уточнения, это:

"""hello"""

будет станьте таким:

""hello""

потому, что внешние, должны быть удалены только.

3 ответов


использовать выражение фрагмент:

s = s[1 : len(s)-1]

Если есть вероятность, что кавычек нет, то используйте это:

if len(s) > 0 && s[0] == '"' {
    s = s[1:]
}
if len(s) > 0 && s[len(s)-1] == '"' {
    s = s[:len(s)-1]
}

детская площадка пример


использовать выражения ломтик. Вы должны написать надежный код, который обеспечивает правильный вывод для несовершенного ввода. Например,

package main

import "fmt"

func trimQuotes(s string) string {
    if len(s) >= 2 {
        if s[0] == '"' && s[len(s)-1] == '"' {
            return s[1 : len(s)-1]
        }
    }
    return s
}

func main() {
    tests := []string{
        `"hello""world"`,
        `"""hello"""`,
        `"`,
        `""`,
        `"""`,
        `goodbye"`,
        `"goodbye"`,
        `goodbye"`,
        `good"bye`,
    }

    for _, test := range tests {
        fmt.Printf("`%s` -> `%s`\n", test, trimQuotes(test))
    }
}

выход:

`"hello""world"` -> `hello""world`
`"""hello"""` -> `""hello""`
`"` -> `"`
`""` -> ``
`"""` -> `"`
`goodbye"` -> `goodbye"`
`"goodbye"` -> `goodbye`
`goodbye"` -> `goodbye"`
`good"bye` -> `good"bye`

Вы можете воспользоваться ломтики, чтобы удалить первый и последний элемент среза.

package main

import "fmt"

func main() {
    str := `"hello""world"`

    if str[0] == '"' {
        str = str[1:]
    }
    if i := len(str)-1; str[i] == '"' {
        str = str[:i]
    }

    fmt.Println( str )
}

поскольку срез разделяет базовую память, это не копирует строку. Это просто меняет str срез, чтобы начать один символ и закончить один символ раньше.

Это как различные байты.Функции обрезки работа.