简体   繁体   中英

Golang : functional programming in Go

I tried something I did in Javascript. But it says http://play.golang.org/p/qlWLI03Dnl

    package main

    import "fmt"
    import "regexp"
    import "strings"

    func swapit(str string) string {
        var validID = regexp.MustCompile(`[a-z]|[A-Z]`)
        return validID.ReplaceAllString(str, func(${0}, ${1}, ${2}) string {
                return (${1}) ? strings.ToUpper(${0}) : strings.ToLower(${0})
            })

    }

    func main() {
        fmt.Println(swapit("hello wOrld."))
        // HELLO WoRLD.

    }

I also tried this removing ? : syntax but still does not work. http://play.golang.org/p/mD6_78zzo1

Does really go not support this? Do I just give up and just bruteforce each character to change cases?

Thanks a lot

As @James Henstridge already pointed out, there are multiple problems with your code. This answer will not focus on the errors, but rather a different way of solving the problem.

If your aim is to learn about using regexp in Go, this answer of mine is useless.
If your aim is to get learn how to make a function that swaps cases, then I suggest a solution without regexp, utilizing the unicode package instead:

package main

import (
    "bytes"
    "fmt"
    "unicode"
)

func SwapCase(str string) string {
    b := new(bytes.Buffer)

    for _, r := range str {
        if unicode.IsUpper(r) {
            b.WriteRune(unicode.ToLower(r))
        } else {
            b.WriteRune(unicode.ToUpper(r))
        }
    }

    return b.String()
}

func main() {
    fmt.Println(SwapCase("Hej värLDen."))
}

Output:

hEJ VÄRldEN.

Playground

This solution will handle all non AZ characters as well, such as ö-Ö and å-Å.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM