Задать вопрос
  • Почему в одном случае интерфейс реализуется, а во втором - нет?

    @micronull
    Go умеет самостоятельно разименовывать указатели при вызове метода.

    Т.е. так как у нас по факту переменная `second` является указателем на структуру `firstStruct`, то мы должны были бы предварительно разименовать, перед вызовом метода `init`:
    var second *firstStruct = &firstStruct{} 
    (*second).init()

    Но Go знает что это указатель и в синтаксисе можно производить вызов метода напрямую, а Go самостоятельно разименует указатель на структуру.
    second.init()

    У конструкции `&secondStruct{}` нет ошибки, так как сигнатура метода описывает работу с указателем на структуру:
    func (f *secondStruct) init() {...}
    Поэтому такая консрукция в данном случае не доступна: var f ifRealization = secondStruct{}
    Ответ написан
    1 комментарий
  • Как правильно вести техническую документацию Системному администратору?

    @leobatura
    network engineer
    С опытом пришло понимание, что должно быть вот так:

    1) Идёшь в бухгалтерию, берешь там список имущества, которое числится на тебе / на отделе, проходишь по всем -- сверяешь, вплоть до старой гарнитуры, всё должно сойтись. Лицензии на ПО точно также. Ты должен в любой момент времени точно сказать -- где, что и сколько у тебя стоит, сколько на складе, что ты заказал, что пришло и то ли пришло. Для бухгалтерии это всё коробочки с лампочками. ОБЯЗАТЕЛЬНО! должны биться серийные номера. Если их нет требуй присвоить инвентарный. Даже на картридже для принтера. Если условная Света из логистики принесла свою мышь, у тебя должно быть это отображено. Всё с парком машин происходить только с твоего ведома.
    Не бойся обращаться к руководству -- оно оценит, что ты экономишь их деньги.
    Всё, что ты выдаешь -- выдавай под роспись. Это дисциплинирует.

    2) Схема сети. Видеонаблюдение и телефония. Как нарисованная, так и WeatherMap в Cacti. Многие ей пренебрегают, почем зря. Ты всегда должен знать что у тебя происходит с каналами связи. Все вланы, все адреса, местоположение должно быть отражено и подписано. Все стойки и шкафы должны быть сфотографированы, так чтобы было чёткое понимание, что-куда-зачем.
    Поверь, в случае аварии тебе это очень сократит время на восстановление.
    aid1284150-v4-900px-Create-a-Network-Doc

    3) Маркировка оборудования. Всё, нет не так -- ВСЁ!!! должно быть подписано. Все розетки, все патчи. Вообще всё!

    4) Делаешь себе локальную вики, пох на чем и пишешь туда АБСОЛЮТНО всё. Как настроить порт на коммутаторе, набор основных команд, диагностика, версия прошивки, какая-то основная конфигурация. Бэкапы конфигурации храни в текстовом виде, не доверяй всяким .cfg, как настроить vlan на микроте, как поднять VPN до соседнего офиса.
    Тебе это очень сильно сократит время, особенно некоторые операции надо проводить довольно редко.

    5) Пиши скрипты для рутины. Скрипты тоже должны быть в вики.
    Допустим обновить 5 коммутаторов или поправить ACL ненапряжно. А если их 50? 150?

    6) В вики не должно быть ни одной ссылки на сторонние ресурсы. Завтра страница переедет, а ты на нее надеялся.

    7) У тебя должны быть контакты всех поставщиков услуг, что касается твоего отдела: провайдеров, заправщиков, инженеров, горсетей, номера договоров, и прочая херня Если что-то случилось, ты должен очень быстро получить ответы, а не ждать на горячей линии. Держи контакты актуальными.

    8) Чтобы это всё имело хоть какой-то смысл -- трать 1 час в день, чтобы заняться документацией. Иначе всё это херня.
    Ответ написан
    2 комментария
  • Из-за чего, когда я конвертирую байты в строку и обратно, то байты отличаются?

    В первом примере вы не конвертируете байты в строку и обратно. Вы конвертируете байты в их хекс-коды, а потом еще раз конвертируете результат в хекс-коды. Логично, что у вас не получается одинаковой строки, ибо вы два раза кодируете и ни одного раза не декодируете.
    Если вам нужно положить какие-то бинарные данные во что-то, что поддерживает только ASCII-текст, используйте лучше base64.
    https://go.dev/play/p/NPrAMrsHZje
    package main
    
    import (
    	"encoding/base64"
    	"fmt"
    )
    
    func main() {
    	srcString := "Привет, тут есть юникод"
    	fmt.Println("Исходный текст:", srcString)
    
    	codedStr := base64.StdEncoding.EncodeToString([]byte(srcString))
    	fmt.Println("После кодирования:", string(codedStr))
    
    	resBytes, err := base64.StdEncoding.DecodeString(codedStr)
    	if err != nil {
    		fmt.Println("Ошибка декодирования:", err)
    		return
    	}
    	resString := string(resBytes)
    	fmt.Println("После декодирования обратно:", resString)
    }
    Ответ написан
    Комментировать
  • Сколько занимает в памяти Struct{}{}?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    Всё верно, она занимает 0 байт.
    Можно проверить:
    package main
    
    import (
        "fmt"
        "unsafe"
    )
    
    type S1 struct {
        f1 int
    }
    
    func main() {
        s1 := S1{}
        s2 := struct{}{}
    
        fmt.Printf("s1 size: %v\n", unsafe.Sizeof(s1))
        fmt.Printf("s2 size: %v\n", unsafe.Sizeof(s2))
    }

    Вывод
    s1 size: 8
    s2 size: 0


    Там, где в мапе нужны только ключи - я всегда делаю значение struct{}{}
    Ответ написан
    4 комментария
  • Суть функции IsNotExist()?

    @ghostiam
    На Go писатель, серверов пинатель.
    os.IsNotExist(err) проверяет ошибку, что это ошибка отсутствия файла, можно проверять ошибку не только Stat, но и ошибку при открытии файла.

    Stat может вернуть не только ошибку не найденного файла, но и ошибку ввода/вывода, таймаут и ещё букет ошибок, для этого и используется доп проверка ошибки os.IsNotExist(err)

    Не верное заключение по поводу примера кода, верно так:
    _, err := os.Stat(filename)
    if err != nil {
        if os.IsNotExist(err) {
            fmt.Println("file does not exist") // это_true
        } else {
        // другая ошибка  - это_false
        }
    } else {
        // тут файл существует 
    }
    Ответ написан
  • Как на GO спарсить инфу с сайта и найти определенную фразу?

    @vadimuar Автор вопроса
    Мой код по этому вопросу.
    Спасибо, GLaDosSystem.
    code
    package main
    
    import (
    	"fmt"
    	"io/ioutil"
    	"log"
    	"net/http"
    	"regexp"
    )
    
    func main() {
    	resp, err := http.Get("LINK")
    	if err != nil {
    		log.Fatalln(err)
    	}
    
    	body, err := ioutil.ReadAll(resp.Body)
    	if err != nil {
    		log.Fatalln(err)
    	}
    
    	tm, err := regexp.Match("TEXT", []byte(body))
    
    	if tm {
    		fmt.Println("true")
    	} else {
    		fmt.Println("false")
    	}
    }
    Ответ написан
    Комментировать
  • Как убрать кучу лишних веток в GitHub-репозитории?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Теперь в репозитории куча веток, от которых надо избавиться. Как?

    git push <remote> :<branch-name-1-to-delete> :<branch-name-2-to-delete> ...
    Ответ написан
    2 комментария
  • Как вы настраиваете табуляцию?

    @abmanimenja
    Современные (и не очень современные) IDE - это умеют сами.
    Да и не только IDE, а и специализированные программистские редакторы - тоже умеют.

    Общепринятых нет. В некоторых языках есть традиции. В некоторых фирмах есть code style guide.

    Язык - Go .

    Вы вот сейчас серьезно?

    Go чуть ли не единственный, где данной проблемы нет от слова "вообще". Вообще нет.

    Утилита go fmt делает так, как всенепременно рекомендуется делать для всех исходников, написанных на этом языке. Умеет работать как с отдельными файлами, так и с целыми каталогами файлов. Все делает совершенно автоматически.
    Ответ написан
    4 комментария
  • Основные концепции в golang для изучения?

    @abmanimenja
    Как то заумно вы подходите....
    Просто пройдите https://tour.golang.org для начала
    Ответ написан
    Комментировать
  • На какой язык программирования перейти?

    @abmanimenja
    См. вакансии вас интересующие (например, на hh.ru).
    См. требования к вакансиям вас интересующим.
    Ответ написан
    4 комментария
  • В какой последовательности изучать сети?

    Подкаст нашли, а цикл статей нет?)
    https://linkmeup.ru/blog/11.html

    + по тому же заголовку виде youtube
    Ответ написан
    Комментировать