| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- package main
- import "fmt"
- func main() {
- // foo1()
- // foo2()
- // foo3()
- // foo4()
- // foo5()
- // foo6()
- // foo7()
- foo8()
- }
- // строки
- // Строки в Go неизменяемы
- func foo1() {
- // Строка как есть
- var world string = `Мир\r\n`
- fmt.Println(world)
- // Одинарный кавычки для байт (uint8)
- var rawBinary byte = '\x27'
- fmt.Println(rawBinary)
- fmt.Println(string(rawBinary))
- // rune (uint32) для UTF-8 символов
- var someRune rune = 'ℒ'
- fmt.Println(someRune)
- fmt.Println(string(someRune))
- // получение подстроки, в байтах, не в символах!
- var helloWorld string = "Hello world!"
- hello := helloWorld[:5]
- fmt.Println(hello)
- // конвертация в слайс байт о обратно
- byteString := []byte(helloWorld)
- helloWorld = string(byteString)
- fmt.Println(byteString)
- fmt.Println(helloWorld)
- }
- // константры
- func foo2() {
- const pi = 3.14
- // блок констант
- const (
- hello = "Привет"
- e = 2.718
- )
- // iota - автоинкремент для констант
- const (
- zero = iota
- _ // пустая переменная, пропуск iota
- three // = 3
- )
- const (
- // нетипизироанная константа
- year = 2017
- // типизированная константа
- yearTyped int = 2026
- )
- }
- // указатели
- func foo3() {
- // получение указателя на переменную типа int
- // инициализированную значением по умолчанию
- d := new(int)
- fmt.Println(d)
- }
- // массивы
- func foo4() {
- // определение размера при объявлении
- a1 := [...]int{1, 2, 3}
- fmt.Println(a1)
- }
- // слайсы
- func foo5() {
- // создание
- /*
- var buf0 []int
- buf1 := []int{}
- buf2 := []int{42}
- buf3 := make([]int, 0) // len = 0, cap = 0
- buf4 := make([]int, 5) // len = 5, cap = 5
- buf5 := make([]int, 5, 10) // len = 5, cap = 10
- */
- // добавление элементов
- var buf []int
- buf = append(buf, 9, 10)
- // добавление слайса в слайс
- otherBuf := make([]int, 3)
- buf = append(buf, otherBuf...)
- // можно копировать в часть существующего слайса
- ints := []int{1, 2, 3, 4}
- copy(ints[1:3], []int{5, 6})
- fmt.Println(ints)
- }
- // map
- func foo6() {
- // инициализация при создании
- var user map[string]string = map[string]string{
- "name": "Vasily",
- "lastname": "Romanov",
- }
- fmt.Println(user)
- // сразу с нужной емкостью
- // profile := make(map[string]string, 10)
- // проверка на существование ключа
- mName, nNameExist := user["middleName"]
- fmt.Println(mName, nNameExist)
- // удаление ключа
- delete(user, "lastName")
- }
- // условный оператор
- func foo7() {
- mapVal := map[string]string{"name": "rvasily"}
- // условие с блоком инициализации
- if keyValue, keyExist := mapVal["name"]; keyExist {
- fmt.Println("name =", keyValue)
- }
- // получаем только признак существование ключа
- if _, keyExist := mapVal["name"]; keyExist {
- fmt.Println("key 'name' exist")
- }
- // switch по 1 переменной
- strVal := "name"
- switch strVal {
- case "name":
- fallthrough // чтобы провалиться в следующее условие
- case "test", "lastName":
- // some work
- default:
- // some work
- }
- // switch как замена многим ifelse
- var val1, val2 = 2, 2
- switch {
- case val1 > 1 || val2 < 11:
- fmt.Println("first block")
- case val2 > 10:
- fmt.Println("second block")
- }
- // выход из цикла, находясь внутри switch
- Loop:
- for key, val := range mapVal {
- fmt.Println("switch in loop", key, val)
- switch {
- case key == "lastName":
- break
- fmt.Println("dont print this")
- case key == "firstName" && val == "Vasily":
- fmt.Println("switch - break loop here")
- break Loop
- }
- } // конце for
- }
- // циклы
- func foo8() {
- // цикл без условия
- isRun := true
- for isRun {
- fmt.Println("loop iteration with condition")
- isRun = false
- }
- // операции по slice
- sl := []int{1, 2, 3}
- idx := 0
- for idx , len(s1) {
- fmt.Println("while-type loop, idx:", idx, "value:", sl[idx])
- idx++
- }
- for i := 0; i < len(sl); i++ {
- fmt.Println("c-style loop", i, sl[i])
- }
- for idx := range sl {
- fmt.Println("range slice by index", idx)
- }
- for idx, val := range sl {
- fmt.Println("range slice by idx-value", idx, val)
- }
- // операции по map
- profile := map[int]string{1: "Vasily", 2: "Romanov"}
- for key := range profile {
- fmt.Println("range map by key", key)
- }
- for key, val := range progile {
- fmt.Println("range map by key-val", key, val)
- }
- for _, val := range profile {
- fmt.Println("range map by bal", val)
- }
- // итерироване по строке
- str := "Привет, Мир!"
- for pos, char := range str {
- fmt.Printf("%#U at pos %d\n" char, pos)
- }
- }
|