Функциите в Go могат ли да приемат по повече от един аргумент? Могат ли да връщат по повече от един аргумент? Могат ли да приемат произволен брой аргументи? Могат ли да връщат произволен брой аргументи?
За какво се ползва ключовата дума func в езика?
За какво се ползва _
?
_
.Какво значи closure и има ли той почва у Go?
Кажете няколко разлики между C и Go указателите.
package main
import "fmt"
func main() { var x [5]float64 x[0] = 98 x[1] = 93 x[2] = 77 x[3] = 82 x[4] = 83 var total float64 = 0 for i := 0; i < 5; i++ { total += x[i] } fmt.Println(total / 5) }
Очевидно броим от 0
var x [5]float64 x[0] = 98 x[1] = 93 x[2] = 77 x[3] = 82 x[4] = 83
или накратко:
x := [5]float64{98, 93, 77, 82, 83}
len()
- връща размера като intrange
- ключова дума, която позволява да итерираме по индекс и стойностfor index, value := range arr { ... } for index := 0; index < len(arr); index++ { value := arr[index] ... }
Тези два цикъла са еквивалентни
Като масивите имат дължина и могат да се индексират, но дължината им може да се променя.
var x []float64
Горното само създава променливата, а се инициализира по следния начин:
x := make([]float64, 5)
Това указва на слайса да бъде с размер 5. Всеки слайс е част от масив с не по-малка дължина от слайса.
x := make([]float64, 5, 10)
Това е същото като горното, но този слайс сочи към масив с размер 10.
arr := [6]float64{1,2,3,4,5,6} x := arr[1:5]
Създаваме слайс от втори до четвърти елемент включително на масива arr.
x := arr[2:] // Взема всички без първите два елемента x := arr[:2] // Взема първите два елемента x := arr[:] // Взема всички елементи
x := []int{2, 3, 5, 7, 11} y := x[1:3]
slice1 := []int{1,2,3} slice2 := append(slice1, 4, 5)
1. Създаваме slice1
с три елемента
2. От slice1
правим slice2
, с още два елемента в края
slice1 := []int{1,2,3} slice1 = append(slice1, 4, 5)
1. Създаваме slice1
с три елемента
2. Добавяме два елемента в края му
slice1 := []int{1,2,3} slice2 := make([]int, 2) copy(slice2, slice1)
1. Създаваме slice1
с три елемента
2. Създаваме slice2
с два елемента (нули)
3. Копираме първите два елемента от slice1
в slice2
len(x)
- Взема размера на slice-аcap(x)
- Взема размера на масива, към който slice-а сочиНеподредена колекция от двойки ключове и стойности
var x map[string]int
Ключовете в x
са низове, а стойностите числа
За да го инициализраме, ползваме make
:
x := make(map[string]int)
Ползваме го както масиви и слайсове:
x["key"] = 10
За да вземем двойка по ключ:
value, ok := x["key"]
ok
е true
, ако съществува двойка с такъв ключ. В противен случай value
е nil
x := make(map[string]int) delete(x, "key")
Изтрива двойката, чийто ключ е "key"
if name, ok := x["key"]; ok { fmt.Println(name, ok) }
type Person struct { name string age uint } var chochko Person chochko.name = "Чочко" chochko.age = 27
Други начини за инициализиране:
chochko := Person{name: "Чочко", age: 27} chochko := Person{"Чочко", 27}
chochko := new(Person) chochko.name = "Чочко" chochko.age = 27
new само заделя памет, а make инициализира, т.е.:
package main import "fmt" type example struct { attrs map[string]int } func main() { e := new(example) e.attrs = make(map[string]int) e.attrs["h"] = 42 fmt.Println(e) }
make
се ползва само върху slice
и map