Пакет js
Обзор
Пакет js предоставляет доступ к среде хоста WebAssembly при использовании архитектуры js/wasm. Его API основан на семантике JavaScript.
Этот пакет является ЭКСПЕРИМЕНТАЛЬНЫМ. Сейчас он предназначен только для запуска тестов и пока не предоставляет пользователям полноценный API. На него не распространяется обещание совместимости Go.
Указатель
Примеры
Файлы пакета
func.go js.go
func CopyBytesToGo
func CopyBytesToGo(dst []byte, src Value) int
CopyBytesToGo копирует байты из src в dst. Вызывает панику, если src не является Uint8Array или Uint8ClampedArray. Возвращает количество скопированных байтов, равное меньшей из длин src и dst.
func CopyBytesToJS
func CopyBytesToJS(dst Value, src []byte) int
CopyBytesToJS копирует байты из src в dst. Вызывает панику, если dst не является Uint8Array или Uint8ClampedArray. Возвращает количество скопированных байтов, равное меньшей из длин src и dst.
type Error
Error оборачивает ошибку JavaScript.
type Error struct {
// Value is the underlying JavaScript error value.
Value
}
func (Error) Error
func (e Error) Error() string
Error реализует интерфейс error.
type Func
Func — это обёрнутая функция Go, которую может вызывать JavaScript.
type Func struct {
Value // the JavaScript function that invokes the Go function
// contains filtered or unexported fields
}
func FuncOf
func FuncOf(fn func(this Value, args []Value) any) Func
FuncOf возвращает функцию для использования в JavaScript.
Функция Go fn вызывается со значением ключевого слова JavaScript "this" и аргументами вызова. Возвращаемое значение вызова — это результат функции Go, преобразованный обратно в JavaScript согласно правилам ValueOf.
При вызове обёрнутой функции Go из JavaScript цикл обработки событий приостанавливается и запускается новая горутина. Другие обёрнутые функции, вызванные во время вызова из Go в JavaScript, выполняются в той же горутине.
В результате, если одна из обёрнутых функций блокируется, цикл обработки событий JavaScript блокируется до её возврата. Поэтому вызов любого асинхронного API JavaScript, которому требуется цикл обработки событий, например fetch (http.Client), приводит к немедленной взаимной блокировке. Следовательно, блокирующая функция должна явно запускать новую горутину.
Чтобы освободить ресурсы, Func.Release необходимо вызвать, когда функция больше не будет вызываться.
Пример
Код:
var cb js.Func
cb = js.FuncOf(func(this js.Value, args []js.Value) any {
fmt.Println("button clicked")
cb.Release() // release the function if the button will not be clicked again
return nil
})
js.Global().Get("document").Call("getElementById", "myButton").Call("addEventListener", "click", cb)
func (Func) Release
func (c Func) Release()
Release освобождает ресурсы, выделенные для функции. После вызова Release функцию нельзя вызывать. Release можно вызвать, даже если функция ещё выполняется.
type Type
Type представляет тип JavaScript-значения Value.
type Type int
const (
TypeUndefined Type = iota
TypeNull
TypeBoolean
TypeNumber
TypeString
TypeSymbol
TypeObject
TypeFunction
) func (Type) String
func (t Type) String() string
type Value
Value представляет значение JavaScript. Нулевое значение — это значение JavaScript "undefined". Значения можно сравнивать на равенство с помощью метода Equal.
type Value struct {
// contains filtered or unexported fields
}
func Global
func Global() Value
Global возвращает глобальный объект JavaScript, обычно "window" или "global".
func Null
func Null() Value
Null возвращает значение JavaScript "null".
func Undefined
func Undefined() Value
Undefined возвращает значение JavaScript "undefined".
func ValueOf
func ValueOf(x any) Value
ValueOf возвращает x как значение JavaScript:
| Go | JavaScript |
| ---------------------- | ---------------------- |
| js.Value | [its value] |
| js.Func | function |
| nil | null |
| bool | boolean |
| integers and floats | number |
| string | string |
| []interface{} | new array |
| map[string]interface{} | new object |
Вызывает панику, если x не относится к одному из ожидаемых типов.
func (Value) Bool
func (v Value) Bool() bool
Bool возвращает значение v как bool. Вызывает панику, если v не является логическим значением JavaScript.
func (Value) Call
func (v Value) Call(m string, args ...any) Value
Call вызывает метод m значения v в JavaScript с указанными аргументами. Вызывает панику, если у v нет метода m. Аргументы преобразуются в значения JavaScript согласно правилам функции ValueOf.
func (Value) Delete
func (v Value) Delete(p string)
Delete удаляет свойство JavaScript p значения v. Вызывает панику, если v не является объектом JavaScript.
func (Value) Equal
func (v Value) Equal(w Value) bool
Equal сообщает, равны ли v и w согласно оператору JavaScript ===.
func (Value) Float
func (v Value) Float() float64
Float возвращает значение v как float64. Вызывает панику, если v не является числом JavaScript.
func (Value) Get
func (v Value) Get(p string) Value
Get возвращает свойство JavaScript p значения v. Вызывает панику, если v не является объектом JavaScript.
func (Value) Index
func (v Value) Index(i int) Value
Index возвращает элемент JavaScript с индексом i из значения v. Вызывает панику, если v не является объектом JavaScript.
func (Value) InstanceOf
func (v Value) InstanceOf(t Value) bool
InstanceOf сообщает, является ли v экземпляром типа t согласно оператору JavaScript instanceof.
func (Value) Int
func (v Value) Int() int
Int возвращает значение v, усечённое до типа int. Вызывает панику, если v не является числом JavaScript.
func (Value) Invoke
func (v Value) Invoke(args ...any) Value
Invoke вызывает значение v в JavaScript с указанными аргументами. Вызывает панику, если v не является функцией JavaScript. Аргументы преобразуются в значения JavaScript согласно правилам функции ValueOf.
func (Value) IsNaN
func (v Value) IsNaN() bool
IsNaN сообщает, является ли v значением JavaScript "NaN".
func (Value) IsNull
func (v Value) IsNull() bool
IsNull сообщает, является ли v значением JavaScript "null".
func (Value) IsUndefined
func (v Value) IsUndefined() bool
IsUndefined сообщает, является ли v значением JavaScript "undefined".
func (Value) Length
func (v Value) Length() int
Length возвращает свойство JavaScript "length" значения v. Вызывает панику, если v не является объектом JavaScript.
func (Value) New
func (v Value) New(args ...any) Value
New применяет оператор JavaScript "new" к значению v в качестве конструктора с указанными аргументами. Вызывает панику, если v не является функцией JavaScript. Аргументы преобразуются в значения JavaScript согласно правилам функции ValueOf.
func (Value) Set
func (v Value) Set(p string, x any)
Set задаёт свойству JavaScript p значения v значение ValueOf(x). Вызывает панику, если v не является объектом JavaScript.
func (Value) SetIndex
func (v Value) SetIndex(i int, x any)
SetIndex задаёт элементу JavaScript с индексом i значения v значение ValueOf(x). Вызывает панику, если v не является объектом JavaScript.
func (Value) String
func (v Value) String() string
String возвращает значение v в виде строки. String — особый случай из-за соглашения Go о методе String. В отличие от других методов получения значений, он не вызывает панику, если тип v не равен TypeString. Вместо этого он возвращает строку вида "<T>" или "<T: V>", где T — тип v, а V — строковое представление значения v.
func (Value) Truthy
func (v Value) Truthy() bool
Truthy возвращает результат проверки «истинности» значения v в JavaScript. В JavaScript значения false, 0, "", null, undefined и NaN являются «ложными», а все остальные — «истинными». См. https://developer.mozilla.org/en-US/docs/Glossary/Truthy.
func (Value) Type
func (v Value) Type() Type
Type возвращает тип значения v в JavaScript. Он похож на оператор JavaScript typeof, но для null возвращает TypeNull вместо TypeObject.
type ValueError
Ошибка ValueError возникает при вызове метода Value для значения Value, которое его не поддерживает. Такие случаи описаны в документации каждого метода.
type ValueError struct {
Method string
Type Type
}
func (*ValueError) Error
func (e *ValueError) Error() string
© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/syscall/js/