Документация
Здесь описаны функции и структуры для использования языка программирования Gentee в проектах на Golang.
Тип Custom служит для дополнительной настройки компилятора и виртуальной машины. Передается при вызове функции Customize.
- Embedded []EmbedItem - массив дополнительных функций для стандартной библиотеки.
Тип EmbedItem описывает функцию, подключаемую к стандартной библиотеки. Используется в типе Custom.
- Prototype string - описание функции на языке Gentee. Например, myfunc(str,int) int.
- Object interface{} - соответствующая golang функция.
Тип Settings служит для указания дополнительных параметров при запуске байт-кода в методе Run.
- CmdLine []string - массив параметров командной строки.
- Stdin *os.File - свой собственный стандартный ввод.
- Stdout *os.File - свой собственный стандартный вывод.
- Stderr *os.File - свой собственный вывод для ошибок.
- Input []byte - предопределенный стандартный ввод (stdin). Может использоваться, например, в функции ReadString.
- Cycle uint64 - максимальное количество итераций в цикле. По умолчанию, равно 16000000.
- Depth uint32 - максимальная вложенность исполняемых блоков. Ограничивает глубину рекурсии. По умолчанию, равно 1000.
- SysChan chan int - канал для отправки команд SysSuspend (1), SysResume (2), SysTerminate (3). Позволяет управлять выполнением скрипта извне.
- SysSuspend - приостановить работу скрипта и всех потоков.
- SysResume - возобновить работу скрипта и всех потоков.
- SysTerminate - завершить работу скрипта и всех потоков.
- Playground Playground - настройки режима песочницы.
- Path string - путь к временной директории для записи и чтения файлов. Если не указан, то будет будет создана поддиректория во временной директории.
- AllSizeLimit int64 - суммарный размер файлов. По умолчанию, 10 MB.
- FilesLimit int - максимальное количество файлов. По умолчанию, 100.
- SizeLimit int64 - максимальный размер файла. По умолчанию, 5 MB.
- ProgressFunc gentee.ProgressFunc - функция для отображения процесса копирования, скачивания и т.д., например, в виде прогресс-бара. Функция должна иметь следующий тип:func MyProgress(progress *gentee.Progress) boolи возвращать true. Тип Progress описан ниже. Функция ProgressFunc вызывается при копировании, скачивании файлов, а также при вызове функций Progress.
settings.SysChan = make(chan int)
go func() {
_, err = exec.Run(settings)
}()
settings.SysChan <- gentee.SysTerminate
Тип Progress служит для отображения процесса копирования, скачивания. Переменная этого типа передается в функцию ProgressFunc и имеет следующие поля:
- ID uint32 - уникальный идентификатор.
- Type int32 - тип процесса.
- ProgressCopy (0) - копирование.
- ProgressDownload (1) - скачивание.
- ProgressCompress (2) - сжатие.
- ProgressDecompress (3) - распаковка.
- Status int32 - статус.
- ProgStatusStart (0) - начало процесса.
- ProgStatusActive (1) - процесс идёт.
- ProgStatusEnd (2) - процесс закончен.
- Total int64 - общий размер.
- Current int64 - текущий размер.
- Source string - источник процесса.
- Dest string - целевой объект процесса.
- Ratio float64 - отношение Current/Total. Для получения процентов необходимо умножить на 100.
- Custom interface{} - служит для хранения любой дополнительной информации.
Функция Customize служит для дополнительной настройки компилятора и виртуальной машины. Она должна вызываться раньше всех функций. Функция возвращает значение ошибки.
Функция New создает рабочее пространство для компиляции исходного кода.
Функция Compile компилирует скрипт переданный в input. В параметре path можно указать путь к скрипту. Функция возвращает структуру с байт-кодом, номер модуля и значение ошибки.
Функция CompileAndRun компилирует скрипт из файле filename и выполняет его. Функция возвращает результат выполнения скрипта и значение ошибки.
Функц ия CompileFile компилирует скрипт из файла filename. Функция возвращает структуру с байт-кодом, номер модуля и значение ошибки.
Функция Run выполняет байт-код из структуры exec. В параметре settings можно указать дополнительные настройки. Функция возвращает результат выполнения скрипта и значение ошибки.
Функция Gentee2GoType конвертирует переменную в стандартные типы Go. Во втором параметре можно указать тип Gentee переменной. Например, arr.bool. В этом случае, вы получите массив переменных типа bool, а не int64. Вы можете использовать эту функцию, в ваших встраиваемых функциях.
Таблица соответствия типов
Gentee тип | Получаемый тип | Возвращаемый тип (vtype) |
int | int64 | int64 |
bool | int64 | bool ("bool") |
char | int64 | rune ("rune") |
float | float64 | float64 |
str | string | string |
arr | *core.Array | []interface{} |
buf | *core.Buffer | []byte |
map | *core.Map | map[string]interface{} |
set | *core.Set | []byte |
struct type | *core.Struct | map[string]interface{} |
obj | *core.Obj | interface{} |
func cnv1(in *core.Map) (*core.Map, error) {
my := gentee.Gentee2GoType(in).(map[string]interface{})
for key, a := range my {
for i, v := range a.([]interface{}) {
a.([]interface{})[i] = v.(int64) + 1
}
delete(my, key)
my[key+`2`] = a
}
ret, err := gentee.Go2GenteeType(my)
return ret.(*core.Map), err
}
Функция Go2GenteeType конвертирует стандартный тип Go в тип Gentee. Во втором параметре можно указать тип Gentee переменной. Например, set, если вы хотите сконвертировать []byte в *core.Set. Вы можете использовать эту функцию, в ваших встраиваемых функциях.
Таблица соответствия типов
Gentee тип | Получаемый Go тип | Возвращаемый тип (vtype) |
int | all int & uint | int64 |
bool | bool | int64 |
char | rune | int64 |
float | float64 | float64 |
str | string | string |
arr | []interface{} | *core.Array |
buf | []byte | *core.Buffer |
set | []byte | *core.Set ("set") |
map | map[string]interface{} | *core.Map |
obj | interface{} | *core.Obj ("obj") |
func cnv5(in *core.Set) (*core.Set, error) {
my := gentee.Gentee2GoType(in).([]byte)
for i, b := range my {
if i > 10 {
break
}
if b == 0 {
my[i] = 1
} else {
my[i] = b - 1
}
}
ret, err := gentee.Go2GenteeType(my, `set`)
return ret.(*core.Set), err
}
Функция Version возвращает номер текущей версии языка.
Last modified 2yr ago