GOLANGTESTS Telegram 766
👣 Что выйдет код ?

go 
package main

import "fmt"

// Пара обобщённого типа
type Pair[T any, U any] struct {
First T
Second U
}

// Метод, меняющий местами элементы
func (p Pair[T, U]) Swap() Pair[U, T] {
return Pair[U, T]{First: p.Second, Second: p.First}
}

// Карта обобщённого типа
type Mapping[K comparable, V any] map[K]V

func main() {
// явно указываем T=int, U=string
p1 := Pair[int, string]{First: 1, Second: "one"}

// начиная с Go 1.21 можно вывести параметры типа из литерала!
// здесь компилятор сам понимает, что T=string, U=int
p2 := Pair{"two", 2}

// аналогично для обобщённого alias-типа map
m := Mapping{"beta": 2}

// откатываем пару p2
swapped := p2.Swap()

fmt.Printf("%T %v\n", p2, p2)
fmt.Printf("%T %v\n", swapped, swapped)
fmt.Printf("%T %v\n", m, m)
}




Ответ: Код на Go 1.24 выведет следующее:

`main.Pair string int {two 2}`
`main.Pair int string {2 two}`
`main.Mapping string int map["beta":2]`

**Объяснение:**

1. **`p1 := Pairint, string{First: 1, Second: "one"}`** и **`p2 := Pair{"two", 2}`**:
* Создаются две переменные типа `Pair`.
* Для `p1` типы `T` (int) и `U` (string) указываются явно.
* Для `p2`, начиная с Go 1.21, компилятор автоматически выводит типы `T` (string) и `U` (int) из значений литерала `{"two", 2}`.

2. **`m := Mapping{"beta": 2}`**:
* Создается переменная `m` типа `Mapping`. `Mapping` является псевдонимом для `mapstringint`. Компилятор выводит типы ключа (string) и значения (int) из литерала `{"beta": 2}`.

3. **`swapped := p2.Swap()`**:
* Вызывается метод `Swap()` для `p2`. Метод `Swap()` возвращает новую структуру `Pair`, в которой типы `U` и `T` поменяны местами, а также значения полей `First` и `Second`. Таким образом, `swapped` будет иметь тип `Pairint, string` и значение `{2, "two"}`.

4. **`fmt.Printf("%T %v\n", p2, p2)`**:
* `%T` выводит тип переменной `p2`, который был выведен как `main.Pair string int`.
* `%v` выводит значение переменной `p2`, которое равно `{two 2}`.

5. **`fmt.Printf("%T %v\n", swapped, swapped)`**:
* `%T` выводит тип переменной `swapped`, который является результатом метода `Swap()` и равен `main.Pair int string`.
* `%v` выводит значение переменной `swapped`, которое равно `{2 two}`.

6. **`fmt.Printf("%T %v\n", m, m)`**:
* `%T` выводит тип переменной `m`, который является `main.Mapping string int`, что эквивалентно `mapstringint`.
* `%v` выводит значение переменной `m`, которое является картой `map["beta":2]`.

Таким образом, программа выведет тип и значение каждой из созданных и модифицированных переменных.
Please open Telegram to view this post
VIEW IN TELEGRAM



tgoop.com/golangtests/766
Create:
Last Update:

👣 Что выйдет код ?

go 
package main

import "fmt"

// Пара обобщённого типа
type Pair[T any, U any] struct {
First T
Second U
}

// Метод, меняющий местами элементы
func (p Pair[T, U]) Swap() Pair[U, T] {
return Pair[U, T]{First: p.Second, Second: p.First}
}

// Карта обобщённого типа
type Mapping[K comparable, V any] map[K]V

func main() {
// явно указываем T=int, U=string
p1 := Pair[int, string]{First: 1, Second: "one"}

// начиная с Go 1.21 можно вывести параметры типа из литерала!
// здесь компилятор сам понимает, что T=string, U=int
p2 := Pair{"two", 2}

// аналогично для обобщённого alias-типа map
m := Mapping{"beta": 2}

// откатываем пару p2
swapped := p2.Swap()

fmt.Printf("%T %v\n", p2, p2)
fmt.Printf("%T %v\n", swapped, swapped)
fmt.Printf("%T %v\n", m, m)
}




Ответ: Код на Go 1.24 выведет следующее:

`main.Pair string int {two 2}`
`main.Pair int string {2 two}`
`main.Mapping string int map["beta":2]`

**Объяснение:**

1. **`p1 := Pairint, string{First: 1, Second: "one"}`** и **`p2 := Pair{"two", 2}`**:
* Создаются две переменные типа `Pair`.
* Для `p1` типы `T` (int) и `U` (string) указываются явно.
* Для `p2`, начиная с Go 1.21, компилятор автоматически выводит типы `T` (string) и `U` (int) из значений литерала `{"two", 2}`.

2. **`m := Mapping{"beta": 2}`**:
* Создается переменная `m` типа `Mapping`. `Mapping` является псевдонимом для `mapstringint`. Компилятор выводит типы ключа (string) и значения (int) из литерала `{"beta": 2}`.

3. **`swapped := p2.Swap()`**:
* Вызывается метод `Swap()` для `p2`. Метод `Swap()` возвращает новую структуру `Pair`, в которой типы `U` и `T` поменяны местами, а также значения полей `First` и `Second`. Таким образом, `swapped` будет иметь тип `Pairint, string` и значение `{2, "two"}`.

4. **`fmt.Printf("%T %v\n", p2, p2)`**:
* `%T` выводит тип переменной `p2`, который был выведен как `main.Pair string int`.
* `%v` выводит значение переменной `p2`, которое равно `{two 2}`.

5. **`fmt.Printf("%T %v\n", swapped, swapped)`**:
* `%T` выводит тип переменной `swapped`, который является результатом метода `Swap()` и равен `main.Pair int string`.
* `%v` выводит значение переменной `swapped`, которое равно `{2 two}`.

6. **`fmt.Printf("%T %v\n", m, m)`**:
* `%T` выводит тип переменной `m`, который является `main.Mapping string int`, что эквивалентно `mapstringint`.
* `%v` выводит значение переменной `m`, которое является картой `map["beta":2]`.

Таким образом, программа выведет тип и значение каждой из созданных и модифицированных переменных.

BY Go tests


Share with your friend now:
tgoop.com/golangtests/766

View MORE
Open in Telegram


Telegram News

Date: |

Telegram channels enable users to broadcast messages to multiple users simultaneously. Like on social media, users need to subscribe to your channel to get access to your content published by one or more administrators. How to Create a Private or Public Channel on Telegram? How to Create a Private or Public Channel on Telegram? Polls Click “Save” ;
from us


Telegram Go tests
FROM American