• Как узнать за какое время скомпилировалась программа на Golang?

    axifive
    @axifive
    Software Engineer
    Вам нужно засечь время исполнения.
    В Unix системах есть команда: timego ....
    В Windows PowerShell есть Measure-Command{start-process go ... }

    А дополнительную отладочную информацию можно получить с помощью флагов
    https://pkg.go.dev/cmd/compile#hdr-Command_Line
    Ответ написан
    Комментировать
  • Golang какие есть способы создания счетчика?

    bitniks
    @bitniks
    Go/PHP/Symfony developer
    Можно сделать через замыкание
    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	funcWithCounter1 := funcWithCounter()
    	fmt.Println(funcWithCounter1())
    	fmt.Println(funcWithCounter1())
    	fmt.Println(funcWithCounter1())
    
    	funcWithCounter2 := funcWithCounter()
    	fmt.Println(funcWithCounter2())
    	fmt.Println(funcWithCounter2())
    }
    
    func funcWithCounter() func() int {
    	var counter int
    	return func() int {
    		// тут полезная работа
    		counter++
    		return counter
    	}
    }

    https://play.golang.org/p/6JdUk4hwtjU
    Ответ написан
    Комментировать
  • Как мне добавить этот код в header и использовать в другом коде?

    bingo347
    @bingo347
    Crazy on performance...
    Давайте по порядку.
    В представленном примере у нас реализация функции, которая не принимает параметров и возвращает указатель на структуру android_app

    struct android_app * - это возвращаемый функцией тип;
    GetAndroidApp - имя функции;
    Конструкция (void) после имени означает, что функция без аргументов, современные компиляторы позволяют писать просто пустые скобки ();
    В фигурных скобках пишут тело функции, то есть ее реализацию.

    Компиляторы C читают код сверху вниз, использовать можно только то, что объявлено выше. Кроме того некоторые сущности вообще могут компилироваться отдельно и уже после линковаться в 1 исполняемый файл.
    Для этого язык C поддерживает декларации сущностей без их реализации, при условии, что сущность будет реализована ниже или где-то еще, что прилинкуется на сборке.
    Для функций декларацией (так же говорят заголовком) является описание ее сигнатуры, то есть для GetAndroidApp таким заголовком будет:
    // описание структуры android_app должно быть выше заголовка его использующего,
    // иначе он будет невалидным. А вот описание полей (реализация) может быть и ниже
    struct android_app;
    
    struct android_app* GetAndroidApp();


    комментарии говорится что я могу добавить его в Header
    Это значит, что данные сигнатуры можно вынести в заголовочный файл (тот что с расширением .h), это позволит вставить его во множество исходников через директиву препроцессора #include
    Ответ написан
    1 комментарий