Question: From here <http://blog.golang.org/slices> (it's right before the Capacity section)

```
type path []byte

func (p path) ToUpper() {
    for i, b := range p {
        if 'a' <= b && b <= 'z' {
            p[i] = b + 'A' - 'a'
        }
    }
}

func main() {
    pathName := path("/usr/bin/tso")
    pathName.ToUpper()
    string1 := string(pathName)
    fmt.Printf("%s\n", string1)
}

```

Was reading on slices and stuff in golang. This is a function to convert ascii characters. How would you go about turning this function to handle unicode as well?

Answer: 
You should use `rune` when you use unicode. The `unicode` package in golang has a toUpper function.

```
package main

import (
    "unicode"
    "fmt"
)

type path []rune

func (p path) ToUpper() {
    for i, b := range p {
        p[i] = unicode.ToUpper(b)
    }
}

func main() {
    pathName := path("/usr/bin/tso")
    pathName.ToUpper()
    string1 := string(pathName)
    fmt.Printf("%s\n", string1)
}

```

in the playground:
[example](https://play.golang.org/p/yIbjkde2rY)
You can use `strings.Map` to apply a function to each rune of a string, returning the mapped string. [Playground link to this code:](https://play.golang.org/p/5Fm3Tc7RjC)

```
package main

import (
    "fmt"
    "strings"
    "unicode"
)

func main() {
    pathName := strings.Map(unicode.ToUpper, "/usr/bin/tso")
    fmt.Printf("%s\n", pathName)
}

```