# Спецификация Go: преобразования в и из строкового типа

1\. **Преобразование целочисленного значения со знаком или без знака в строковый тип** дает строку, содержащую представление целого числа в UTF-8. Значения за пределами диапазона допустимых кодовых точек Unicode преобразуются в "\uFFFD".

```
string('a')       // "a"
string(-1)        // "\ufffd" == "\xef\xbf\xbd"
string(0xf8)      // "\u00f8" == "ø" == "\xc3\xb8"
type MyString string
MyString(0x65e5)  // "\u65e5" == "日" == "\xe6\x97\xa5"
```

2\. **Преобразование среза байтов в строковый тип** дает строку, последовательные байты которой являются элементами среза.

```
string([]byte{'h', 'e', 'l', 'l', '\xc3', '\xb8'})   // "hellø"
string([]byte{})                                     // ""
string([]byte(nil))                                  // ""

type MyBytes []byte
string(MyBytes{'h', 'e', 'l', 'l', '\xc3', '\xb8'})  // "hellø"
```

3\. **Преобразование среза рун в строковый тип** дает строку, которая является объединением отдельных значений рун, преобразованных в строки.

```
string([]rune{0x767d, 0x9d6c, 0x7fd4})   // "\u767d\u9d6c\u7fd4" == "白鵬翔"
string([]rune{})                         // ""
string([]rune(nil))                      // ""

type MyRunes []rune
string(MyRunes{0x767d, 0x9d6c, 0x7fd4})  // "\u767d\u9d6c\u7fd4" == "白鵬翔"
```

4\. **Преобразование значения типа строки в тип среза байтов** дает срез, последовательными элементами которого являются байты строки.

```
[]byte("hellø")   // []byte{'h', 'e', 'l', 'l', '\xc3', '\xb8'}
[]byte("")        // []byte{}

MyBytes("hellø")  // []byte{'h', 'e', 'l', 'l', '\xc3', '\xb8'}
```

5\. **Преобразование значения типа строки в срез типа руны** дает срез, содержащий отдельные кодовые точки Unicode строки.

```
[]rune(MyString("白鵬翔"))  // []rune{0x767d, 0x9d6c, 0x7fd4}
[]rune("")                 // []rune{}

MyRunes("白鵬翔")           // []rune{0x767d, 0x9d6c, 0x7fd4}
```
