четверг, 18 августа 2016 г.

Глобальные переменные в Golang

package dif

import (
    "time"
)

var StartTime = time.Now()
var I int
var S string


------------------------------------

// temp project main.go
package main
import (
    "fmt"
    dif "имяПроекта/dif"
)
func three() {
    dif.I = 50
    dif.S = "ress"
    fmt.Println(dif.I)
    fmt.Println(dif.S)
}
func two() {
    fmt.Println(dif.StartTime)
    dif.I = 10
    dif.S = "text"
    fmt.Println(dif.I)
    fmt.Println(dif.S)
    three()
}
func one() {
    two()
}
func main() {
    one()
}
вторник, 16 августа 2016 г.

массив структур в Golang

package main

import (
"fmt"
"sort"
)

type Person struct {
Name string
Age  int
}

func (p Person) String() string {
return fmt.Sprintf("%s: %d", p.Name, p.Age)
}

// ByAge implements sort.Interface for []Person based on
// the Age field.
type ByAge []Person

func (a ByAge) Len() int           { return len(a) }
func (a ByAge) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }
func (a ByAge) Less(i, j int) bool { return a[i].Age < a[j].Age }

func main() {
people := []Person{
{"Bob", 31},
{"John", 42},
{"Michael", 17},
{"Jenny", 26},
}

fmt.Println(people)
sort.Sort(ByAge(people))
fmt.Println(people)

}

воскресенье, 14 августа 2016 г.

Как найти номер символа в строке ?

func find_rune_number(str, char string) []int { // функция принимает (строку и символ) и выдаёт масиив индексов символа
    slice1 := []int{}               // создать массив
    for i := 0; i < len(str); i++ { // цыкл поиска символов
        j := i + 1
        if str[i:j] == char {
            fmt.Println(str[i:j], "№", i)
            slice1 = append(slice1, i) // добавить в массив номер искомого символа
        }

    }
    arr := slice1

    return arr

}


среда, 10 августа 2016 г.

Как удалить комментарии которые начинаются на "!" и заканчиваются "\n" ? Golang

import (
    "fmt"
    "regexp")



func RemoveCppStyleComments(content []byte) []byte {
    cppcmt := regexp.MustCompile(`!.*`)
    return cppcmt.ReplaceAll(content, []byte(""))
}
    

func main() {
str := "\nКруто работает !Это надо удалить\n функция удаления !Это надо удалить\n комментариев"

    fmt.Println(str)
    byte1 := []byte(str)
    byte2 := RemoveCppStyleComments(byte1)
    str666 := string(byte2)
    fmt.Println(str666)
}

Как удалить \n совсем из string ? в Golang

    str := "\n раз два старое тест старое \n старое старое"

    fmt.Println(str)
    str45 := strings.Replace(str, "\n", "", -1)
    fmt.Println(str45, "вар") // добавляем "вар" для проверки 

Как заменить слово в строке(string) ? в Golang

    str := "\n раз два старое тест старое \n"
    fmt.Println(str)
    str45 := strings.Replace(str, "старое", "новое", -1)// -1 заменяет все слова в строке
    fmt.Println(str45)

Как удалить \n в строке(string) (только в начале строки и в конце строки )в Golang ?

        str := "\n раз два три тест \n"
           fmt.Println(str)
        str23 := strings.Trim(str, "\n")

           fmt.Println(str23, "вар") // втсавляем "вар" для проверки удаления \n

работа с символами rune в Golang

    str := "\"RECT\""
    fmt.Println(str)

    // Get rune slice.
    // ... Modify the slice's data.
    ch := []rune(str)
    ch[0] = 'y'
    ch = append(ch, 'e')

    // Create new string from modified slice.
    result := string(ch)

    fmt.Println(result)

Структуры в Golang

type Location struct {
    x     int
    y     int
    valid bool
}

func main() {
    // Create a new Location struct instance.
    loc := new(Location)

    // Set a field and then print its value.
    loc.x = 10
    fmt.Println(loc.x)
}

Как определить тип переменной в Golang?

var var1 int = 1
fmt.Printf("%T\n", var1)

Регулярные выражения(RegEx) в Golang

Регулярные выражения(RegEx) — система обработки текста, основанная на специальной системе записи образцов для поиска. Образец (англ. pattern), задающий правило поиска, иногда называют шаблоном или маской.


Основные квантификаторы, якоря и спецсимволы:
^ обозначение начала строки
$ обозначение конца строки
| или
\ экранирование для метасимволов (не работает в символьных классах)
[…] символьный класс
[^…] инвертированный символьный класс
. совпадение с любым символом, кроме символа новой строки
? предшествующий символ необязателен
* любое количество предшествующего символа(выражения) , в том числе и 0
+ хотя бы 1 предшествующий символ (выражение) должен быть найден

{max,min} – минимальное и максимальное количество совпадений для предшествующего символа(выражения)

Если в конце любого квантификатора (?,*,+) поставить символ ? то будет использоваться алгоритм захватывающий минимально возможное совпадение.

Для использования RegEx в golang необходимо подключить пакет regexp.

При создании шаблона обычно используют метод regexp.MustCompile(p).В случае неуспешной компиляции возникает аварийная ситуация. Такой подход упрощает использование переменных, содержащих скомпилированные выражения. Если нужно только проверить наличие совпадения, достаточно использовать метод regexp.MatchString(p, s)

Этот метод возвращает true или false в зависимости от того соответствует строка s шаблону p или нет. Также будет возвращено nil в качестве ошибки.

У многих методов есть реализации для случая, когда исходная строка представлена не типом string , а типом []byte.

Пример проверки на совпадение:


[...] перечисление букв
[abc] - находим всё где есть "a" или "b" или "c"
[a-c] - тоже самое
/[bcr]at/ - находим "bat" или "cat" или "rat"


[^...] - что угодно кроме
/[^abc]/ - что угодно кроме букв "a"или "b" или "c"
/[^a-zA-Z]/ - что угодно кроме букв алфавита

\d - только цифры .
\s - пробельные символы т.е. [\ \t\r\n\f] пробел , перенос строки, табуляция и т.д.
\w - любые буквы и цифры (английские + русские )
\D - не цифра (отрицание предыдущего)
\S - не пробел
\W - не буквы и цифры
\N - что угодно кроме "\n"
. - что угодно кроме "\n"
^ - начало строки
$ - конец строки

Квантификатор - ставится после выражения

? - 0 или 1 (либо есть либо нет , хз)
*- 0 или более (либо нет либо дохуя)
+ - 1 или более (либо есть либо дохуя)
{x} - буква пресутствует подряд x раз ( [a]{3} = "aaa")
{x,y} - от х до y включительно
{ ,y} - от нуля до y включительно
{x, } - от х до бесконечности




Готовые примеры :
Дата время
\d{4}-\d{2}-\d{2}  - 2015-10-14
\d{2}:\d{2}:\d{2} - 19:35:01
[п].*[я] - "урок №123 про регулярные выражения Hello"











вторник, 9 августа 2016 г.

Есть ли жизнь после С++ ?

Сего дня решился я на коварную затею . Перейти на сторону противника . C злощастного C++ перейти на Go(golang). В конце рабочего дня я почувствовал то состояние когда смотриш на часы и думаешь как быстро летит время имхо столько еще хотел сделать. Такого я уже давно перестал чувствовать к C++ .