mirror of
https://github.com/wavetermdev/wails.git
synced 2026-08-05 13:53:43 -07:00
Update parser and bindings generation
Update tests
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
# Application
|
||||
|
||||
The application API assists in creating an application using the Wails framework.
|
||||
The application API assists in creating an application using the Wails
|
||||
framework.
|
||||
|
||||
### New
|
||||
|
||||
|
||||
+962
-1092
File diff suppressed because it is too large
Load Diff
@@ -19,16 +19,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
### Added
|
||||
|
||||
- [darwin] add Event ApplicationShouldHandleReopen to able handle dock icon click by @5aaee9 in [#2991](https://github.com/wailsapp/wails/pull/2991)
|
||||
- [darwin] add getPrimaryScreen/getScreens to impl by @tmclane in [#2618](https://github.com/wailsapp/wails/pull/2618)
|
||||
- [darwin] add Event ApplicationShouldHandleReopen to able handle dock icon
|
||||
click by @5aaee9 in [#2991](https://github.com/wailsapp/wails/pull/2991)
|
||||
- [darwin] add getPrimaryScreen/getScreens to impl by @tmclane in
|
||||
[#2618](https://github.com/wailsapp/wails/pull/2618)
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fixed Doctor apt package verify by [Atterpac](https://github.com/Atterpac) in [#2972](https://github.com/wailsapp/wails/pull/2972).
|
||||
- Fixed application frozen when quit (Darwin) by @5aaee9 in [#2982](https://github.com/wailsapp/wails/pull/2982)
|
||||
- Fixed background colours of examples on Windows by [mmgvh](https://github.com/mmghv) in [#2750](https://github.com/wailsapp/wails/pull/2750).
|
||||
- Fixed default context menus by [mmgvh](https://github.com/mmghv) in [#2753](https://github.com/wailsapp/wails/pull/2753).
|
||||
|
||||
- Fixed Doctor apt package verify by [Atterpac](https://github.com/Atterpac) in
|
||||
[#2972](https://github.com/wailsapp/wails/pull/2972).
|
||||
- Fixed application frozen when quit (Darwin) by @5aaee9 in
|
||||
[#2982](https://github.com/wailsapp/wails/pull/2982)
|
||||
- Fixed background colours of examples on Windows by
|
||||
[mmgvh](https://github.com/mmghv) in
|
||||
[#2750](https://github.com/wailsapp/wails/pull/2750).
|
||||
- Fixed default context menus by [mmgvh](https://github.com/mmghv) in
|
||||
[#2753](https://github.com/wailsapp/wails/pull/2753).
|
||||
|
||||
### Changed
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Changes for v3
|
||||
|
||||
!!! note
|
||||
This is currently an unsorted brain dump of changes. It will be organised into a more readable format soon.
|
||||
!!! note This is currently an unsorted brain dump of changes. It will be
|
||||
organised into a more readable format soon.
|
||||
|
||||
## Options
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
# Introduction
|
||||
|
||||
!!! note
|
||||
This guide is a work in progress.
|
||||
!!! note This guide is a work in progress.
|
||||
|
||||
Thanks for wanting to help out with development of Wails! This guide will help
|
||||
you get started.
|
||||
@@ -48,8 +47,10 @@ The project has the following structure:
|
||||
|
||||
### Alpha Todo List
|
||||
|
||||
We are currently tracking known issues and tasks in the [Alpha Todo List](https://github.com/orgs/wailsapp/projects/6).
|
||||
If you want to help out, please check this list and follow the instructions in the [Feedback](../getting-started/feedback.md) page.
|
||||
We are currently tracking known issues and tasks in the
|
||||
[Alpha Todo List](https://github.com/orgs/wailsapp/projects/6). If you want to
|
||||
help out, please check this list and follow the instructions in the
|
||||
[Feedback](../getting-started/feedback.md) page.
|
||||
|
||||
### Adding window functionality
|
||||
|
||||
@@ -140,8 +141,8 @@ The `InjectJS()` method returns JavaScript that should be injected into all
|
||||
windows as they are created. This is useful for adding custom JavaScript
|
||||
functions that complement the plugin.
|
||||
|
||||
The built-in plugins can be found in the `v3/plugins` directory.
|
||||
Check them out for inspiration.
|
||||
The built-in plugins can be found in the `v3/plugins` directory. Check them out
|
||||
for inspiration.
|
||||
|
||||
## Tasks
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ Status of features in v3.
|
||||
Application interface methods
|
||||
|
||||
| Method | Windows | Linux | Mac | Notes |
|
||||
|---------------------------------------------------------------|---------|-------|-----|-------|
|
||||
| ------------------------------------------------------------- | ------- | ----- | --- | ----- |
|
||||
| run() error | Y | Y | Y | |
|
||||
| destroy() | | Y | Y | |
|
||||
| setApplicationMenu(menu \*Menu) | Y | Y | Y | |
|
||||
@@ -36,7 +36,7 @@ Application interface methods
|
||||
Webview Window Interface Methods
|
||||
|
||||
| Method | Windows | Linux | Mac | Notes |
|
||||
|----------------------------------------------------|---------|-------|-----|------------------------------------------|
|
||||
| -------------------------------------------------- | ------- | ----- | --- | ---------------------------------------- |
|
||||
| center() | Y | Y | Y | |
|
||||
| close() | y | Y | Y | |
|
||||
| destroy() | | Y | Y | |
|
||||
@@ -90,7 +90,7 @@ Webview Window Interface Methods
|
||||
### Application
|
||||
|
||||
| Feature | Windows | Linux | Mac | Notes |
|
||||
|---------|---------|-------|-----|-------|
|
||||
| ------- | ------- | ----- | --- | ----- |
|
||||
| Quit | Y | Y | Y | |
|
||||
| Hide | Y | | Y | |
|
||||
| Show | Y | | Y | |
|
||||
@@ -98,7 +98,7 @@ Webview Window Interface Methods
|
||||
### Dialogs
|
||||
|
||||
| Feature | Windows | Linux | Mac | Notes |
|
||||
|----------|---------|-------|-----|-------|
|
||||
| -------- | ------- | ----- | --- | ----- |
|
||||
| Info | Y | Y | Y | |
|
||||
| Warning | Y | Y | Y | |
|
||||
| Error | Y | Y | Y | |
|
||||
@@ -109,14 +109,14 @@ Webview Window Interface Methods
|
||||
### Clipboard
|
||||
|
||||
| Feature | Windows | Linux | Mac | Notes |
|
||||
|---------|---------|-------|-----|-------|
|
||||
| ------- | ------- | ----- | --- | ----- |
|
||||
| SetText | Y | | Y | |
|
||||
| Text | Y | | Y | |
|
||||
|
||||
### ContextMenu
|
||||
|
||||
| Feature | Windows | Linux | Mac | Notes |
|
||||
|------------------|---------|-------|-----|-------|
|
||||
| ---------------- | ------- | ----- | --- | ----- |
|
||||
| OpenContextMenu | Y | | Y | |
|
||||
| On By Default | | | | |
|
||||
| Control via HTML | Y | | | |
|
||||
@@ -134,7 +134,7 @@ show the context menu unless it is explicitly set with
|
||||
### Screens
|
||||
|
||||
| Feature | Windows | Linux | Mac | Notes |
|
||||
|------------|---------|-------|-----|-------|
|
||||
| ---------- | ------- | ----- | --- | ----- |
|
||||
| GetAll | Y | Y | Y | |
|
||||
| GetPrimary | Y | Y | Y | |
|
||||
| GetCurrent | Y | Y | Y | |
|
||||
@@ -142,7 +142,7 @@ show the context menu unless it is explicitly set with
|
||||
### System
|
||||
|
||||
| Feature | Windows | Linux | Mac | Notes |
|
||||
|------------|---------|-------|-----|-------|
|
||||
| ---------- | ------- | ----- | --- | ----- |
|
||||
| IsDarkMode | | | Y | |
|
||||
|
||||
### Window
|
||||
@@ -152,7 +152,7 @@ Y = Supported U = Untested
|
||||
- = Not available
|
||||
|
||||
| Feature | Windows | Linux | Mac | Notes |
|
||||
|---------------------|---------|-------|-----|--------------------------------------------------------------------------------------|
|
||||
| ------------------- | ------- | ----- | --- | ------------------------------------------------------------------------------------ |
|
||||
| Center | Y | Y | Y | |
|
||||
| Focus | Y | Y | | |
|
||||
| FullScreen | Y | Y | Y | |
|
||||
@@ -190,7 +190,7 @@ applied when the window is created. An 'X' indicates that the option is not
|
||||
supported by the platform.
|
||||
|
||||
| Feature | Windows | Linux | Mac | Notes |
|
||||
|---------------------------------|---------|-------|-----|--------------------------------------------|
|
||||
| ------------------------------- | ------- | ----- | --- | ------------------------------------------ |
|
||||
| AlwaysOnTop | Y | | | |
|
||||
| BackgroundColour | Y | Y | | |
|
||||
| BackgroundType | | | | Acrylic seems to work but the others don't |
|
||||
@@ -230,13 +230,13 @@ To log or not to log? System logger vs custom logger.
|
||||
## Menu
|
||||
|
||||
| Event | Windows | Linux | Mac | Notes |
|
||||
|--------------------------|---------|-------|-----|-------|
|
||||
| ------------------------ | ------- | ----- | --- | ----- |
|
||||
| Default Application Menu | Y | Y | Y | |
|
||||
|
||||
## Tray Menus
|
||||
|
||||
| Feature | Windows | Linux | Mac | Notes |
|
||||
|--------------------|---------|-------|-----|----------------------------------------------------------------------|
|
||||
| ------------------ | ------- | ----- | --- | -------------------------------------------------------------------- |
|
||||
| Icon | Y | | Y | Windows has default icons for light/dark mode & supports PNG or ICO. |
|
||||
| Label | - | | Y | |
|
||||
| Label (ANSI Codes) | - | | | |
|
||||
@@ -245,7 +245,7 @@ To log or not to log? System logger vs custom logger.
|
||||
### Methods
|
||||
|
||||
| Method | Windows | Linux | Mac | Notes |
|
||||
|-------------------------------|---------|-------|-----|-------|
|
||||
| ----------------------------- | ------- | ----- | --- | ----- |
|
||||
| setLabel(label string) | - | | Y | |
|
||||
| run() | Y | | Y | |
|
||||
| setIcon(icon []byte) | Y | | Y | |
|
||||
@@ -260,7 +260,7 @@ To log or not to log? System logger vs custom logger.
|
||||
Mapping native events to cross-platform events.
|
||||
|
||||
| Event | Windows | Linux | Mac | Notes |
|
||||
|--------------------------|---------|-------|-----------------|-------|
|
||||
| ------------------------ | ------- | ----- | --------------- | ----- |
|
||||
| WindowWillClose | | | WindowWillClose | |
|
||||
| WindowDidClose | | | | |
|
||||
| WindowDidResize | | | | |
|
||||
@@ -284,7 +284,7 @@ Contains a lot needed for development.
|
||||
## Theme
|
||||
|
||||
| Mode | Windows | Linux | Mac | Notes |
|
||||
|--------|---------|-------|-----|-------|
|
||||
| ------ | ------- | ----- | --- | ----- |
|
||||
| Dark | Y | | | |
|
||||
| Light | Y | | | |
|
||||
| System | Y | | | |
|
||||
@@ -302,7 +302,7 @@ All templates are working.
|
||||
Built-in plugin support:
|
||||
|
||||
| Plugin | Windows | Linux | Mac | Notes |
|
||||
|-----------------|---------|-------|-----|-------|
|
||||
| --------------- | ------- | ----- | --- | ----- |
|
||||
| Browser | Y | | Y | |
|
||||
| KV Store | Y | Y | Y | |
|
||||
| Log | Y | Y | Y | |
|
||||
@@ -318,7 +318,7 @@ TODO:
|
||||
## Packaging
|
||||
|
||||
| | Windows | Linux | Mac | Notes |
|
||||
|-----------------|---------|-------|-----|-------|
|
||||
| --------------- | ------- | ----- | --- | ----- |
|
||||
| Icon Generation | Y | | Y | |
|
||||
| Icon Embedding | Y | | Y | |
|
||||
| Info.plist | - | | Y | |
|
||||
@@ -329,7 +329,7 @@ TODO:
|
||||
## Frameless Windows
|
||||
|
||||
| Feature | Windows | Linux | Mac | Notes |
|
||||
|---------|---------|-------|-----|------------------------------------------------|
|
||||
| ------- | ------- | ----- | --- | ---------------------------------------------- |
|
||||
| Resize | Y | | Y | |
|
||||
| Drag | Y | Y | Y | Linux - can always drag with `Meta`+left mouse |
|
||||
|
||||
@@ -340,7 +340,7 @@ TODO:
|
||||
### Mac Options
|
||||
|
||||
| Feature | Default | Notes |
|
||||
|-------------------------|-------------------|------------------------------------------------------|
|
||||
| ----------------------- | ----------------- | ---------------------------------------------------- |
|
||||
| Backdrop | MacBackdropNormal | Standard solid window |
|
||||
| DisableShadow | false | |
|
||||
| TitleBar | | Standard window decorations by default |
|
||||
@@ -356,7 +356,7 @@ TODO:
|
||||
### Windows Options
|
||||
|
||||
| Feature | Default | Notes |
|
||||
|-----------------------------------|---------------|---------------------------------------------|
|
||||
| --------------------------------- | ------------- | ------------------------------------------- |
|
||||
| BackdropType | Solid | |
|
||||
| DisableIcon | false | |
|
||||
| Theme | SystemDefault | |
|
||||
@@ -385,4 +385,3 @@ The examples can be compiled using the following command:
|
||||
CGO_ENABLED=0 go build -tags purego
|
||||
|
||||
Note: things are currently not working after the refactor
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Feedback
|
||||
|
||||
We welcome (and encourage) your feedback! Please search for existing tickets or posts before creating new ones.
|
||||
Here are the different ways to provide feedback:
|
||||
We welcome (and encourage) your feedback! Please search for existing tickets or
|
||||
posts before creating new ones. Here are the different ways to provide feedback:
|
||||
|
||||
=== "Bugs"
|
||||
|
||||
@@ -35,7 +35,8 @@ Here are the different ways to provide feedback:
|
||||
- Please *don't* just add comments like "+1" or "me too".
|
||||
- Please feel free to comment if there is more to add to the post, such as "this bug also affect ARM builds" or "Another option would be to ....."
|
||||
|
||||
There is a list of known issues & work in progress can be found [here](https://github.com/orgs/wailsapp/projects/6).
|
||||
There is a list of known issues & work in progress can be found
|
||||
[here](https://github.com/orgs/wailsapp/projects/6).
|
||||
|
||||
## Things we are looking for feedback on
|
||||
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
**# Roadmap
|
||||
\*\*# Roadmap
|
||||
|
||||
The roadmap is a living document and is subject to change. If you have any suggestions, please open an issue.
|
||||
Each milestone will have a set of goals that we are aiming to achieve. These are subject to change.
|
||||
The roadmap is a living document and is subject to change. If you have any
|
||||
suggestions, please open an issue. Each milestone will have a set of goals that
|
||||
we are aiming to achieve. These are subject to change.
|
||||
|
||||
## Alpha milestones
|
||||
|
||||
@@ -9,8 +10,9 @@ Each milestone will have a set of goals that we are aiming to achieve. These are
|
||||
|
||||
#### Goals
|
||||
|
||||
Alpha 1 is the initial release. It is intended to get feedback on the new API and to get people experimenting with it.
|
||||
The main goal is to get most of the examples working on all platforms.
|
||||
Alpha 1 is the initial release. It is intended to get feedback on the new API
|
||||
and to get people experimenting with it. The main goal is to get most of the
|
||||
examples working on all platforms.
|
||||
|
||||
#### Status
|
||||
|
||||
@@ -20,15 +22,16 @@ The main goal is to get most of the examples working on all platforms.
|
||||
|
||||
{{ read_csv("status.csv") }}
|
||||
|
||||
- Mac Dialogs work, however the file dialogs issue a warning that needs to be fixed.
|
||||
- Mac Dialogs work, however the file dialogs issue a warning that needs to be
|
||||
fixed.
|
||||
|
||||
#### TODO:
|
||||
|
||||
- [ ] Fix `+[CATransaction synchronize] called within transaction` warnings on Mac
|
||||
- [ ] Fix `+[CATransaction synchronize] called within transaction` warnings on
|
||||
Mac
|
||||
- [ ] When hiding window, application terminates
|
||||
|
||||
### Alpha 2
|
||||
|
||||
- [ ] Most examples working on Linux
|
||||
- [ ] Project creation via `wails init`
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# What's new in v3?
|
||||
|
||||
!!! note
|
||||
The features that will be included in the v3 release may change from this list.
|
||||
!!! note The features that will be included in the v3 release may change from
|
||||
this list.
|
||||
|
||||
## Multiple Windows
|
||||
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
|
||||
API:`New(appOptions Options) *App`
|
||||
|
||||
`New(appOptions Options)` 使用给定的应用程序选项创建一个新的应用程序。它对未指定的选项应用默认值,将其与提供的选项合并,然后初始化并返回应用程序的实例。
|
||||
`New(appOptions Options)` 使用给定的应用程序选项创建一个新的应用程序。它对未指定
|
||||
的选项应用默认值,将其与提供的选项合并,然后初始化并返回应用程序的实例。
|
||||
|
||||
如果在初始化过程中出现错误,应用程序将停止,并显示提供的错误消息。
|
||||
|
||||
@@ -40,7 +41,8 @@ func main() {
|
||||
|
||||
API:`Capabilities() capabilities.Capabilities`
|
||||
|
||||
`Capabilities()` 返回应用程序当前具有的功能的映射。这些功能可以是操作系统提供的不同功能,如 webview 功能。
|
||||
`Capabilities()` 返回应用程序当前具有的功能的映射。这些功能可以是操作系统提供的
|
||||
不同功能,如 webview 功能。
|
||||
|
||||
```go
|
||||
// 获取应用程序的功能
|
||||
@@ -92,7 +94,8 @@ API:`Quit()`
|
||||
|
||||
API:`IsDarkMode() bool`
|
||||
|
||||
`IsDarkMode()` 检查应用程序是否在暗模式下运行。它返回一个布尔值,指示是否启用了暗模式。
|
||||
`IsDarkMode()` 检查应用程序是否在暗模式下运行。它返回一个布尔值,指示是否启用了
|
||||
暗模式。
|
||||
|
||||
```go
|
||||
// 检查是否启用了暗模式
|
||||
@@ -138,7 +141,8 @@ API:`NewWebviewWindow() *WebviewWindow`
|
||||
|
||||
API:`NewWebviewWindowWithOptions(windowOptions WebviewWindowOptions) *WebviewWindow`
|
||||
|
||||
`NewWebviewWindowWithOptions()` 使用自定义选项创建一个新的 Webview 窗口。新创建的窗口将添加到应用程序管理的窗口映射中。
|
||||
`NewWebviewWindowWithOptions()` 使用自定义选项创建一个新的 Webview 窗口。新创建
|
||||
的窗口将添加到应用程序管理的窗口映射中。
|
||||
|
||||
```go
|
||||
// 使用自定义选项创建一个新的 Webview 窗口
|
||||
@@ -178,7 +182,8 @@ API:`GetWindowByName(name string) *WebviewWindow`
|
||||
|
||||
API:`CurrentWindow() *WebviewWindow`
|
||||
|
||||
`CurrentWindow()` 获取并返回应用程序中当前活动窗口的指针。如果没有窗口,则返回 nil。
|
||||
`CurrentWindow()` 获取并返回应用程序中当前活动窗口的指针。如果没有窗口,则返回
|
||||
nil。
|
||||
|
||||
```go
|
||||
// 获取当前窗口
|
||||
@@ -189,7 +194,8 @@ API:`CurrentWindow() *WebviewWindow`
|
||||
|
||||
API:`RegisterContextMenu(name string, menu *Menu)`
|
||||
|
||||
`RegisterContextMenu()` 注册具有给定名称的上下文菜单。稍后可以在应用程序中使用该菜单。
|
||||
`RegisterContextMenu()` 注册具有给定名称的上下文菜单。稍后可以在应用程序中使用该
|
||||
菜单。
|
||||
|
||||
```go
|
||||
|
||||
@@ -204,7 +210,8 @@ API:`RegisterContextMenu(name string, menu *Menu)`
|
||||
|
||||
API:`SetMenu(menu *Menu)`
|
||||
|
||||
`SetMenu()` 设置应用程序的菜单。在 Mac 上,这将是全局菜单。对于 Windows 和 Linux,这将是任何新窗口的默认菜单。
|
||||
`SetMenu()` 设置应用程序的菜单。在 Mac 上,这将是全局菜单。对于 Windows 和
|
||||
Linux,这将是任何新窗口的默认菜单。
|
||||
|
||||
```go
|
||||
// 创建一个新的菜单
|
||||
@@ -229,55 +236,64 @@ API:`ShowAboutDialog()`
|
||||
|
||||
API:`InfoDialog()`
|
||||
|
||||
`InfoDialog()` 创建并返回一个具有 `InfoDialogType` 的 `MessageDialog` 的新实例。此对话框通常用于向用户显示信息消息。
|
||||
`InfoDialog()` 创建并返回一个具有 `InfoDialogType` 的 `MessageDialog` 的新实例。
|
||||
此对话框通常用于向用户显示信息消息。
|
||||
|
||||
### Question
|
||||
|
||||
API:`QuestionDialog()`
|
||||
|
||||
`QuestionDialog()` 创建并返回一个具有 `QuestionDialogType` 的 `MessageDialog` 的新实例。此对话框通常用于向用户提问并期望回应。
|
||||
`QuestionDialog()` 创建并返回一个具有 `QuestionDialogType` 的 `MessageDialog` 的
|
||||
新实例。此对话框通常用于向用户提问并期望回应。
|
||||
|
||||
### Warning
|
||||
|
||||
API:`WarningDialog()`
|
||||
|
||||
`WarningDialog()` 创建并返回一个具有 `WarningDialogType` 的 `MessageDialog` 的新实例。如其名称所示,此对话框主要用于向用户显示警告消息。
|
||||
`WarningDialog()` 创建并返回一个具有 `WarningDialogType` 的 `MessageDialog` 的新
|
||||
实例。如其名称所示,此对话框主要用于向用户显示警告消息。
|
||||
|
||||
### Error
|
||||
|
||||
API:`ErrorDialog()`
|
||||
|
||||
`ErrorDialog()` 创建并返回一个具有 `ErrorDialogType` 的 `MessageDialog` 的新实例。此对话框设计用于在需要向用户显示错误消息时使用。
|
||||
`ErrorDialog()` 创建并返回一个具有 `ErrorDialogType` 的 `MessageDialog` 的新实
|
||||
例。此对话框设计用于在需要向用户显示错误消息时使用。
|
||||
|
||||
### OpenFile
|
||||
|
||||
API:`OpenFileDialog()`
|
||||
|
||||
`OpenFileDialog()` 创建并返回一个新的 `OpenFileDialogStruct`。此对话框提示用户从其文件系统中选择一个或多个文件。
|
||||
`OpenFileDialog()` 创建并返回一个新的 `OpenFileDialogStruct`。此对话框提示用户从
|
||||
其文件系统中选择一个或多个文件。
|
||||
|
||||
### SaveFile
|
||||
|
||||
API:`SaveFileDialog()`
|
||||
|
||||
`SaveFileDialog()` 创建并返回一个新的 `SaveFileDialogStruct`。此对话框提示用户选择其文件系统上的位置以保存文件。
|
||||
`SaveFileDialog()` 创建并返回一个新的 `SaveFileDialogStruct`。此对话框提示用户选
|
||||
择其文件系统上的位置以保存文件。
|
||||
|
||||
### OpenDirectory
|
||||
|
||||
API:`OpenDirectoryDialog()`
|
||||
|
||||
`OpenDirectoryDialog()` 创建并返回一个具有 `OpenDirectoryDialogType` 的 `MessageDialog` 的新实例。此对话框使用户能够从其文件系统中选择目录。
|
||||
`OpenDirectoryDialog()` 创建并返回一个具有 `OpenDirectoryDialogType` 的
|
||||
`MessageDialog` 的新实例。此对话框使用户能够从其文件系统中选择目录。
|
||||
|
||||
### On
|
||||
|
||||
API:`On(eventType events.ApplicationEventType, callback func(event *Event)) func()`
|
||||
|
||||
`On()` 注册特定应用程序事件的事件侦听器。提供的回调函数将在相应事件发生时触发。该函数返回一个可调用的函数,用于删除侦听器。
|
||||
`On()` 注册特定应用程序事件的事件侦听器。提供的回调函数将在相应事件发生时触发。
|
||||
该函数返回一个可调用的函数,用于删除侦听器。
|
||||
|
||||
### RegisterHook
|
||||
|
||||
API:`RegisterHook(eventType events.ApplicationEventType, callback func(event *Event)) func()`
|
||||
|
||||
`RegisterHook()` 注册要在特定事件期间作为钩子运行的回调函数。这些钩子在使用 `On()` 附加的侦听器之前运行。该函数返回一个可调用的函数,用于删除钩子。
|
||||
`RegisterHook()` 注册要在特定事件期间作为钩子运行的回调函数。这些钩子在使用
|
||||
`On()` 附加的侦听器之前运行。该函数返回一个可调用的函数,用于删除钩子。
|
||||
|
||||
### GetPrimaryScreen
|
||||
|
||||
@@ -291,7 +307,8 @@ API:`GetScreens() ([]*Screen, error)`
|
||||
|
||||
`GetScreens()` 返回有关连接到系统的所有屏幕的信息。
|
||||
|
||||
这是提供的 `App` 结构中导出的方法的简要摘要。请注意,有关更详细的功能或注意事项,请参考实际的 Go 代码或进一步的内部文档。
|
||||
这是提供的 `App` 结构中导出的方法的简要摘要。请注意,有关更详细的功能或注意事
|
||||
项,请参考实际的 Go 代码或进一步的内部文档。
|
||||
|
||||
## Options
|
||||
|
||||
@@ -315,4 +332,4 @@ API:`GetScreens() ([]*Screen, error)`
|
||||
--8<--
|
||||
../v3/pkg/application/options_application_mac.go
|
||||
--8<--
|
||||
```
|
||||
```
|
||||
|
||||
@@ -1,28 +1,34 @@
|
||||
# 主线程函数
|
||||
|
||||
这些方法是在主线程上运行代码的实用函数。当您想要在UI线程上运行自定义代码时,这是必需的。
|
||||
这些方法是在主线程上运行代码的实用函数。当您想要在UI线程上运行自定义代码时,这是
|
||||
必需的。
|
||||
|
||||
### InvokeSync
|
||||
|
||||
API: `InvokeSync(fn func())`
|
||||
|
||||
此函数以同步方式运行传入的函数(`fn`)。它使用一个`WaitGroup`(`wg`)确保主线程在`fn`函数完成之前等待,然后才继续执行。如果在`fn`内部发生恐慌,它将传递给应用程序选项中定义的处理程序函数`PanicHandler`。
|
||||
此函数以同步方式运行传入的函数(`fn`)。它使用一个`WaitGroup`(`wg`)确保主线程
|
||||
在`fn`函数完成之前等待,然后才继续执行。如果在`fn`内部发生恐慌,它将传递给应用程
|
||||
序选项中定义的处理程序函数`PanicHandler`。
|
||||
|
||||
### InvokeSyncWithResult
|
||||
|
||||
API: `InvokeSyncWithResult[T any](fn func() T) (res T)`
|
||||
|
||||
此函数与`InvokeSync(fn func())`类似,但它返回一个结果。可用于调用具有单个返回值的任何函数。
|
||||
此函数与`InvokeSync(fn func())`类似,但它返回一个结果。可用于调用具有单个返回值
|
||||
的任何函数。
|
||||
|
||||
### InvokeSyncWithError
|
||||
|
||||
API: `InvokeSyncWithError(fn func() error) (err error)`
|
||||
|
||||
此函数同步运行`fn`并返回`fn`产生的任何错误。请注意,如果在`fn`执行期间发生恐慌,此函数将从恢复。
|
||||
此函数同步运行`fn`并返回`fn`产生的任何错误。请注意,如果在`fn`执行期间发生恐慌,
|
||||
此函数将从恢复。
|
||||
|
||||
### InvokeSyncWithResultAndError
|
||||
|
||||
API: `InvokeSyncWithResultAndError[T any](fn func() (T, error)) (res T, err error)`
|
||||
API:
|
||||
`InvokeSyncWithResultAndError[T any](fn func() (T, error)) (res T, err error)`
|
||||
|
||||
此函数同步运行`fn`并返回类型为`T`的结果和一个错误。
|
||||
|
||||
@@ -30,8 +36,10 @@ API: `InvokeSyncWithResultAndError[T any](fn func() (T, error)) (res T, err erro
|
||||
|
||||
API: `InvokeAsync(fn func())`
|
||||
|
||||
此函数以异步方式运行`fn`。它在主线程上运行给定的函数。如果在`fn`内部发生恐慌,它将传递给应用程序选项中定义的处理程序函数`PanicHandler`。
|
||||
此函数以异步方式运行`fn`。它在主线程上运行给定的函数。如果在`fn`内部发生恐慌,它
|
||||
将传递给应用程序选项中定义的处理程序函数`PanicHandler`。
|
||||
|
||||
---
|
||||
|
||||
注意:这些函数将阻塞执行,直到`fn`完成。确保`fn`不会阻塞至关重要。如果需要运行阻塞函数,请改用`InvokeAsync`。
|
||||
注意:这些函数将阻塞执行,直到`fn`完成。确保`fn`不会阻塞至关重要。如果需要运行阻
|
||||
塞函数,请改用`InvokeAsync`。
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
# 菜单
|
||||
|
||||
可以创建菜单并添加到应用程序中。它们可以用于创建上下文菜单、系统托盘菜单和应用程序菜单。
|
||||
可以创建菜单并添加到应用程序中。它们可以用于创建上下文菜单、系统托盘菜单和应用程
|
||||
序菜单。
|
||||
|
||||
要创建一个新菜单,请调用:
|
||||
|
||||
@@ -15,7 +16,8 @@
|
||||
|
||||
API:`Add(label string) *MenuItem`
|
||||
|
||||
此方法以 `string` 类型的 `label` 作为输入,并将具有给定标签的新 `MenuItem` 添加到菜单中。它返回添加的 `MenuItem`。
|
||||
此方法以 `string` 类型的 `label` 作为输入,并将具有给定标签的新 `MenuItem` 添加
|
||||
到菜单中。它返回添加的 `MenuItem`。
|
||||
|
||||
### 添加分隔符
|
||||
|
||||
@@ -27,13 +29,15 @@ API:`AddSeparator()`
|
||||
|
||||
API:`AddCheckbox(label string, enabled bool) *MenuItem`
|
||||
|
||||
此方法以 `string` 类型的 `label` 和 `bool` 类型的 `enabled` 作为输入,并将具有给定标签和启用状态的新复选框 `MenuItem` 添加到菜单中。它返回添加的 `MenuItem`。
|
||||
此方法以 `string` 类型的 `label` 和 `bool` 类型的 `enabled` 作为输入,并将具有给
|
||||
定标签和启用状态的新复选框 `MenuItem` 添加到菜单中。它返回添加的 `MenuItem`。
|
||||
|
||||
### 添加单选按钮
|
||||
|
||||
API:`AddRadio(label string, enabled bool) *MenuItem`
|
||||
|
||||
此方法以 `string` 类型的 `label` 和 `bool` 类型的 `enabled` 作为输入,并将具有给定标签和启用状态的新单选按钮 `MenuItem` 添加到菜单中。它返回添加的 `MenuItem`。
|
||||
此方法以 `string` 类型的 `label` 和 `bool` 类型的 `enabled` 作为输入,并将具有给
|
||||
定标签和启用状态的新单选按钮 `MenuItem` 添加到菜单中。它返回添加的 `MenuItem`。
|
||||
|
||||
### 更新
|
||||
|
||||
@@ -45,16 +49,18 @@ API:`Update()`
|
||||
|
||||
API:`AddSubmenu(s string) *Menu`
|
||||
|
||||
此方法以 `string` 类型的 `s` 作为输入,并将具有给定标签的新子菜单 `MenuItem` 添加到菜单中。它返回添加的子菜单。
|
||||
此方法以 `string` 类型的 `s` 作为输入,并将具有给定标签的新子菜单 `MenuItem` 添
|
||||
加到菜单中。它返回添加的子菜单。
|
||||
|
||||
### 添加角色
|
||||
|
||||
API:`AddRole(role Role) *Menu`
|
||||
|
||||
此方法以 `Role` 类型的 `role` 作为输入,如果不为 `nil`,则将其添加到菜单中,并返回 `Menu`。
|
||||
此方法以 `Role` 类型的 `role` 作为输入,如果不为 `nil`,则将其添加到菜单中,并返
|
||||
回 `Menu`。
|
||||
|
||||
### 设置标签
|
||||
|
||||
API:`SetLabel(label string)`
|
||||
|
||||
此方法设置 `Menu` 的 `label`。
|
||||
此方法设置 `Menu` 的 `label`。
|
||||
|
||||
@@ -93,10 +93,11 @@ API:`WindowOffset(offset int) *SystemTray`
|
||||
|
||||
API:`WindowDebounce(debounce time.Duration) *SystemTray`
|
||||
|
||||
`WindowDebounce` 方法设置防抖时间。在 Windows 上,它用于指定在响应通知图标上的鼠标松开事件之前等待多长时间。
|
||||
`WindowDebounce` 方法设置防抖时间。在 Windows 上,它用于指定在响应通知图标上的鼠
|
||||
标松开事件之前等待多长时间。
|
||||
|
||||
### OpenMenu
|
||||
|
||||
API:`OpenMenu()`
|
||||
|
||||
`OpenMenu` 方法打开与系统托盘关联的菜单。
|
||||
`OpenMenu` 方法打开与系统托盘关联的菜单。
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
# 窗口
|
||||
|
||||
要创建一个窗口,可以使用[Application.NewWebviewWindow](application.md#newwebviewwindow)或[Application.NewWebviewWindowWithOptions](application.md#newwebviewwindowwithoptions)。前者创建一个具有默认选项的窗口,而后者允许您指定自定义选项。
|
||||
要创建一个窗口,可以使
|
||||
用[Application.NewWebviewWindow](application.md#newwebviewwindow)或[Application.NewWebviewWindowWithOptions](application.md#newwebviewwindowwithoptions)。
|
||||
前者创建一个具有默认选项的窗口,而后者允许您指定自定义选项。
|
||||
|
||||
这些方法可在返回的WebviewWindow对象上调用:
|
||||
|
||||
@@ -20,7 +22,8 @@ API: `Name() string`
|
||||
|
||||
API: `SetSize(width, height int) *WebviewWindow`
|
||||
|
||||
此方法将WebviewWindow的大小设置为提供的宽度和高度参数。如果提供的尺寸超过约束条件,它们将被相应调整。
|
||||
此方法将WebviewWindow的大小设置为提供的宽度和高度参数。如果提供的尺寸超过约束条
|
||||
件,它们将被相应调整。
|
||||
|
||||
### SetAlwaysOnTop
|
||||
|
||||
@@ -32,7 +35,8 @@ API: `SetAlwaysOnTop(b bool) *WebviewWindow`
|
||||
|
||||
API: `Show() *WebviewWindow`
|
||||
|
||||
`Show`方法用于使窗口可见。如果窗口未运行,它首先调用`run`方法启动窗口,然后使其可见。
|
||||
`Show`方法用于使窗口可见。如果窗口未运行,它首先调用`run`方法启动窗口,然后使其
|
||||
可见。
|
||||
|
||||
### Hide
|
||||
|
||||
@@ -68,7 +72,8 @@ API: `GetScreen() (*Screen, error)`
|
||||
|
||||
API: `SetFrameless(frameless bool) *WebviewWindow`
|
||||
|
||||
此函数用于移除窗口边框和标题栏。它根据提供的布尔值(true表示无边框,false表示有边框)切换窗口的无边框状态。
|
||||
此函数用于移除窗口边框和标题栏。它根据提供的布尔值(true表示无边框,false表示有
|
||||
边框)切换窗口的无边框状态。
|
||||
|
||||
#### RegisterContextMenu
|
||||
|
||||
@@ -98,4 +103,4 @@ API: `SetEnabled(enabled bool)`
|
||||
|
||||
API: `SetAbsolutePosition(x int, y int)`
|
||||
|
||||
此函数设置窗口在屏幕上的绝对位置。
|
||||
此函数设置窗口在屏幕上的绝对位置。
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# 更新日志
|
||||
|
||||
<!--
|
||||
<!--
|
||||
此项目的所有重要更改将在此文件中记录。
|
||||
|
||||
格式基于[保持一个更改日志](https://keepachangelog.com/en/1.0.0/),
|
||||
@@ -19,16 +19,21 @@
|
||||
|
||||
### Added
|
||||
|
||||
- [darwin] 添加Event ApplicationShouldHandleReopen以处理单击dock图标的功能 @5aaee9 in [#2991](https://github.com/wailsapp/wails/pull/2991)
|
||||
- [darwin] 添加getPrimaryScreen/getScreens的实现 @tmclane in [#2618](https://github.com/wailsapp/wails/pull/2618)
|
||||
- [darwin] 添加Event ApplicationShouldHandleReopen以处理单击dock图标的功能
|
||||
@5aaee9 in [#2991](https://github.com/wailsapp/wails/pull/2991)
|
||||
- [darwin] 添加getPrimaryScreen/getScreens的实现 @tmclane in
|
||||
[#2618](https://github.com/wailsapp/wails/pull/2618)
|
||||
|
||||
### Fixed
|
||||
|
||||
- 修复Doctor apt软件包验证问题 [Atterpac](https://github.com/Atterpac) in [#2972](https://github.com/wailsapp/wails/pull/2972)。
|
||||
- 修复应用程序在退出时冻结的问题 (Darwin) @5aaee9 in [#2982](https://github.com/wailsapp/wails/pull/2982)
|
||||
- 修复Windows上示例的背景颜色问题 [mmgvh](https://github.com/mmghv) in [#2750](https://github.com/wailsapp/wails/pull/2750)。
|
||||
- 修复默认上下文菜单问题 [mmgvh](https://github.com/mmghv) in [#2753](https://github.com/wailsapp/wails/pull/2753)。
|
||||
|
||||
- 修复Doctor apt软件包验证问题 [Atterpac](https://github.com/Atterpac) in
|
||||
[#2972](https://github.com/wailsapp/wails/pull/2972)。
|
||||
- 修复应用程序在退出时冻结的问题 (Darwin) @5aaee9 in
|
||||
[#2982](https://github.com/wailsapp/wails/pull/2982)
|
||||
- 修复Windows上示例的背景颜色问题 [mmgvh](https://github.com/mmghv) in
|
||||
[#2750](https://github.com/wailsapp/wails/pull/2750)。
|
||||
- 修复默认上下文菜单问题 [mmgvh](https://github.com/mmghv) in
|
||||
[#2753](https://github.com/wailsapp/wails/pull/2753)。
|
||||
|
||||
### Changed
|
||||
|
||||
@@ -36,4 +41,4 @@
|
||||
|
||||
### Deprecated
|
||||
|
||||
### Security
|
||||
### Security
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
# v3的更改
|
||||
|
||||
!!! note
|
||||
这是当前的无序更改脑升级。很快它将组织成一个更易读的格式。
|
||||
!!! note这是当前的无序更改脑升级。很快它将组织成一个更易读的格式。
|
||||
|
||||
## 选项
|
||||
|
||||
@@ -17,46 +16,63 @@
|
||||
|
||||
### 应用程序事件
|
||||
|
||||
应用程序事件是由应用程序发出的事件。这些事件包括macOS上的`ApplicationDidFinishLaunching`等本机事件。
|
||||
应用程序事件是由应用程序发出的事件。这些事件包括macOS上
|
||||
的`ApplicationDidFinishLaunching`等本机事件。
|
||||
|
||||
### 窗口事件
|
||||
|
||||
窗口事件是由窗口发出的事件。这些事件包括macOS上的`WindowDidBecomeMain`等本机事件。还定义了常见事件,以便它们在跨平台上工作,例如`WindowClosing`。
|
||||
窗口事件是由窗口发出的事件。这些事件包括macOS上的`WindowDidBecomeMain`等本机事
|
||||
件。还定义了常见事件,以便它们在跨平台上工作,例如`WindowClosing`。
|
||||
|
||||
### 自定义事件
|
||||
|
||||
用户定义的事件称为`WailsEvents`。这是为了将它们与用于与浏览器通信的`Event`对象区分开来。WailsEvents现在是封装事件的对象。这包括事件名称,数据和事件的源。
|
||||
用户定义的事件称为`WailsEvents`。这是为了将它们与用于与浏览器通信的`Event`对象区
|
||||
分开来。WailsEvents现在是封装事件的对象。这包括事件名称,数据和事件的源。
|
||||
|
||||
与WailsEvent关联的数据现在是单个值。如果需要多个值,则可以使用struct。
|
||||
|
||||
### 事件回调和`Emit`函数签名
|
||||
|
||||
事件回调的签名(由`On`,`Once`和`OnMultiple`使用)已更改。在v2中,回调函数接收可选数据。在v3中,回调函数接收包含与事件相关的所有数据的`WailsEvent`对象。
|
||||
事件回调的签名(由`On`,`Once`和`OnMultiple`使用)已更改。在v2中,回调函数接收可
|
||||
选数据。在v3中,回调函数接收包含与事件相关的所有数据的`WailsEvent`对象。
|
||||
|
||||
类似地,`Emit`函数已更改。它现在不再接受名称和可选数据,而是接受一个`WailsEvent`对象,它将发出该对象。
|
||||
类似地,`Emit`函数已更改。它现在不再接受名称和可选数据,而是接受一
|
||||
个`WailsEvent`对象,它将发出该对象。
|
||||
|
||||
### `Off`和`OffAll`
|
||||
|
||||
在v2中,`Off`和`OffAll`调用将删除JS和Go中的事件。由于v3具有多窗口的特性,因此已更改为这些方法仅适用于调用它们的上下文。例如,如果你在一个窗口中调用`Off`,它仅会删除该窗口的事件。如果你在Go中使用`Off`,它只会删除Go的事件。
|
||||
在v2中,`Off`和`OffAll`调用将删除JS和Go中的事件。由于v3具有多窗口的特性,因此已
|
||||
更改为这些方法仅适用于调用它们的上下文。例如,如果你在一个窗口中调用`Off`,它仅
|
||||
会删除该窗口的事件。如果你在Go中使用`Off`,它只会删除Go的事件。
|
||||
|
||||
### Hooks
|
||||
|
||||
事件钩子是v3中的新功能。它们允许您钩入事件系统,并在发出某些事件时执行操作。例如,您可以钩入`WindowClosing`事件,在窗口关闭之前执行一些清理操作。钩子可以在应用程序级别或窗口级别使用`RegisterHook`进行注册。应用程序级别适用于应用程序事件。仅当窗口级别钩子与其注册的窗口一起调用。
|
||||
事件钩子是v3中的新功能。它们允许您钩入事件系统,并在发出某些事件时执行操作。例
|
||||
如,您可以钩入`WindowClosing`事件,在窗口关闭之前执行一些清理操作。钩子可以在应
|
||||
用程序级别或窗口级别使用`RegisterHook`进行注册。应用程序级别适用于应用程序事件。
|
||||
仅当窗口级别钩子与其注册的窗口一起调用。
|
||||
|
||||
### 日志记录
|
||||
|
||||
在v2中,日志记录会混淆,因为应用程序日志和系统(内部)日志都使用相同的记录器。我们已经对此进行了简化:
|
||||
在v2中,日志记录会混淆,因为应用程序日志和系统(内部)日志都使用相同的记录器。我
|
||||
们已经对此进行了简化:
|
||||
|
||||
- 内部日志现在使用标准的Go `slog`记录器处理。这是通过应用程序选项中的`logger`选项进行配置的。默认情况下,这使用[tint](https://github.com/lmittmann/tint)记录器。
|
||||
- 现在可以通过新的`log`插件进行应用程序日志记录,它在底层使用`slog`。此插件提供了一个简单的用于记录到控制台的API。它在Go和JS中都可用。
|
||||
- 内部日志现在使用标准的Go `slog`记录器处理。这是通过应用程序选项中的`logger`选
|
||||
项进行配置的。默认情况下,这使用[tint](https://github.com/lmittmann/tint)记录
|
||||
器。
|
||||
- 现在可以通过新的`log`插件进行应用程序日志记录,它在底层使用`slog`。此插件提供
|
||||
了一个简单的用于记录到控制台的API。它在Go和JS中都可用。
|
||||
|
||||
### 开发人员注意事项
|
||||
|
||||
在Go中发出事件时,它会将事件分派到本地的Go侦听器以及应用程序中的每个窗口。在JS中发出事件时,它现在会将事件发送到应用程序。这将被处理,就好像它是在Go中发出的,但是发送者ID将是窗口的ID。
|
||||
在Go中发出事件时,它会将事件分派到本地的Go侦听器以及应用程序中的每个窗口。在JS中
|
||||
发出事件时,它现在会将事件发送到应用程序。这将被处理,就好像它是在Go中发出的,但
|
||||
是发送者ID将是窗口的ID。
|
||||
|
||||
## 窗口
|
||||
|
||||
Window API在很大程度上保持不变,但方法现在是在窗口实例而不是运行时上。一些值得注意的变化是:
|
||||
Window API在很大程度上保持不变,但方法现在是在窗口实例而不是运行时上。一些值得注
|
||||
意的变化是:
|
||||
|
||||
- 窗口现在具有标识它们的名称。用于在发出事件时标识窗口。
|
||||
- 窗口上现在有更多以前不可用的方法,例如`AbsolutePosition`和`ToggleDevTools`。
|
||||
@@ -64,11 +80,14 @@ Window API在很大程度上保持不变,但方法现在是在窗口实例而
|
||||
|
||||
## 剪切板
|
||||
|
||||
剪贴板API已经简化。现在有一个单独的`Clipboard`对象,可以用于读取和写入剪贴板。`Clipboard`对象在Go和JS中都可用。`SetText()`用于设置文本,`Text()`用于获取文本。
|
||||
剪贴板API已经简化。现在有一个单独的`Clipboard`对象,可以用于读取和写入剪贴
|
||||
板。`Clipboard`对象在Go和JS中都可用。`SetText()`用于设置文本,`Text()`用于获取文
|
||||
本。
|
||||
|
||||
## 绑定
|
||||
|
||||
绑定的工作方式与v2类似,通过提供一种将结构方法绑定到前端的方式。这些可以在前端使用由`wails3 generate bindings`命令生成的绑定包装器来调用:
|
||||
绑定的工作方式与v2类似,通过提供一种将结构方法绑定到前端的方式。这些可以在前端使
|
||||
用由`wails3 generate bindings`命令生成的绑定包装器来调用:
|
||||
|
||||
```javascript
|
||||
// @ts-check
|
||||
@@ -103,7 +122,12 @@ window.go.main = {
|
||||
};
|
||||
```
|
||||
|
||||
默认情况下,绑定的方法是混淆的,并使用uint32 ID进行标识,该ID是使用[FNV哈希算法](https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function)计算的。这是为了防止方法名称在生产构建中被暴露出来。在调试模式下,方法ID与计算的方法ID一起记录,以帮助调试。如果您希望增加额外的混淆层,可以使用`BindAliases`选项。这允许您指定别名ID与方法ID的映射。当前端使用ID调用方法时,方法ID将首先在别名映射中查找匹配项。如果找不到,它将假定是标准方法ID,并尝试以通常的方式查找方法。
|
||||
默认情况下,绑定的方法是混淆的,并使用uint32 ID进行标识,该ID是使
|
||||
用[FNV哈希算法](https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function)计
|
||||
算的。这是为了防止方法名称在生产构建中被暴露出来。在调试模式下,方法ID与计算的方
|
||||
法ID一起记录,以帮助调试。如果您希望增加额外的混淆层,可以使用`BindAliases`选
|
||||
项。这允许您指定别名ID与方法ID的映射。当前端使用ID调用方法时,方法ID将首先在别名
|
||||
映射中查找匹配项。如果找不到,它将假定是标准方法ID,并尝试以通常的方式查找方法。
|
||||
|
||||
示例:
|
||||
|
||||
@@ -129,7 +153,10 @@ window.go.main = {
|
||||
|
||||
### 不安全调用
|
||||
|
||||
如果您不介意在二进制文件中以明文形式提供调用,并且不打算使用[garble](https://github.com/burrowers/garble),那么可以使用不安全的`wails.CallByName()`方法。此方法接受要调用的方法的完全限定名称和要传递给它的参数。示例:
|
||||
如果您不介意在二进制文件中以明文形式提供调用,并且不打算使
|
||||
用[garble](https://github.com/burrowers/garble),那么可以使用不安全
|
||||
的`wails.CallByName()`方法。此方法接受要调用的方法的完全限定名称和要传递给它的参
|
||||
数。示例:
|
||||
|
||||
```go
|
||||
wails.CallByName("main.GreetService.Greet", "world!")
|
||||
@@ -145,7 +172,9 @@ window.go.main = {
|
||||
|
||||
### Windows
|
||||
|
||||
Windows中的对话框按钮是不可配置的,根据对话框的类型是恒定的。要在按下按钮时触发回调,请创建一个具有与您希望附加回调的按钮相同名称的按钮。示例:创建一个标签为“确定”的按钮,并使用`OnClick()`方法设置回调方法:
|
||||
Windows中的对话框按钮是不可配置的,根据对话框的类型是恒定的。要在按下按钮时触发
|
||||
回调,请创建一个具有与您希望附加回调的按钮相同名称的按钮。示例:创建一个标签为“
|
||||
确定”的按钮,并使用`OnClick()`方法设置回调方法:
|
||||
|
||||
```go
|
||||
dialog := app.QuestionDialog().
|
||||
@@ -163,19 +192,29 @@ Windows中的对话框按钮是不可配置的,根据对话框的类型是恒
|
||||
|
||||
## 拖放
|
||||
|
||||
可以按窗口启用本机拖放。只需将`EnableDragAndDrop`窗口配置选项设置为`true`,窗口将允许将文件拖放到其上。当这种情况发生时,将发出`events.FilesDropped`事件。然后可以使用`WindowEvent.Context()`中的`DroppedFiles()`方法检索文件名。这将返回一个包含文件名的字符串切片。
|
||||
可以按窗口启用本机拖放。只需将`EnableDragAndDrop`窗口配置选项设置为`true`,窗口
|
||||
将允许将文件拖放到其上。当这种情况发生时,将发出`events.FilesDropped`事件。然后
|
||||
可以使用`WindowEvent.Context()`中的`DroppedFiles()`方法检索文件名。这将返回一个
|
||||
包含文件名的字符串切片。
|
||||
|
||||
## 上下文菜单
|
||||
|
||||
上下文菜单是当用户右键单击元素时显示的上下文菜单。创建上下文菜单与创建标准菜单相同,使用`app.NewMenu()`。要使上下文菜单对窗口可用,请调用`window.RegisterContextMenu(name, menu)`。名称将是上下文菜单的ID,并由前端使用。
|
||||
上下文菜单是当用户右键单击元素时显示的上下文菜单。创建上下文菜单与创建标准菜单相
|
||||
同,使用`app.NewMenu()`。要使上下文菜单对窗口可用,请调
|
||||
用`window.RegisterContextMenu(name, menu)`。名称将是上下文菜单的ID,并由前端使
|
||||
用。
|
||||
|
||||
要指示元素具有上下文菜单,请将`data-contextmenu`属性添加到元素。此属性的值应为先前在窗口中注册的上下文菜单的名称。
|
||||
要指示元素具有上下文菜单,请将`data-contextmenu`属性添加到元素。此属性的值应为先
|
||||
前在窗口中注册的上下文菜单的名称。
|
||||
|
||||
可以在应用程序级别注册上下文菜单,使其对所有窗口可用。可以使用`app.RegisterContextMenu(name, menu)`完成此操作。如果在窗口级别找不到上下文菜单,则将检查应用程序上下文菜单。`v3/examples/contextmenus`中可以找到此演示。
|
||||
可以在应用程序级别注册上下文菜单,使其对所有窗口可用。可以使
|
||||
用`app.RegisterContextMenu(name, menu)`完成此操作。如果在窗口级别找不到上下文菜
|
||||
单,则将检查应用程序上下文菜单。`v3/examples/contextmenus`中可以找到此演示。
|
||||
|
||||
## Wails标记语言(WML)
|
||||
|
||||
Wails标记语言是一种简单的标记语言,允许您在没有JavaScript的情况下向标准HTML元素添加功能。
|
||||
Wails标记语言是一种简单的标记语言,允许您在没有JavaScript的情况下向标准HTML元素
|
||||
添加功能。
|
||||
|
||||
当前支持以下标签:
|
||||
|
||||
@@ -189,7 +228,8 @@ Wails标记语言是一种简单的标记语言,允许您在没有JavaScript
|
||||
<button data-wml-event="myevent">Click Me</button>
|
||||
```
|
||||
|
||||
有时您需要用户确认操作。可以通过向元素添加`data-wml-confirm`属性来完成。此属性的值将是要显示给用户的消息。
|
||||
有时您需要用户确认操作。可以通过向元素添加`data-wml-confirm`属性来完成。此属性的
|
||||
值将是要显示给用户的消息。
|
||||
|
||||
示例:
|
||||
|
||||
@@ -201,7 +241,8 @@ Wails标记语言是一种简单的标记语言,允许您在没有JavaScript
|
||||
|
||||
### `data-wml-window`
|
||||
|
||||
可以通过将`data-wml-window`属性添加到元素中来调用任何`wails.window`方法。属性的值应为要调用的方法的名称。方法名称应与导出的方法的名称完全匹配。
|
||||
可以通过将`data-wml-window`属性添加到元素中来调用任何`wails.window`方法。属性的
|
||||
值应为要调用的方法的名称。方法名称应与导出的方法的名称完全匹配。
|
||||
|
||||
```html
|
||||
<button data-wml-window="Close">Close Window</button>
|
||||
@@ -219,12 +260,15 @@ Wails标记语言是一种简单的标记语言,允许您在没有JavaScript
|
||||
|
||||
## 系统托盘
|
||||
|
||||
Wails 3附带了一个内置的系统托盘。这是一个完全功能的系统托盘,旨在尽可能简单地使用。可以设置托盘的图标、工具提示和菜单。还可以“附加”窗口到系统托盘。这样做将提供以下功能:
|
||||
Wails 3附带了一个内置的系统托盘。这是一个完全功能的系统托盘,旨在尽可能简单地使
|
||||
用。可以设置托盘的图标、工具提示和菜单。还可以“附加”窗口到系统托盘。这样做将提供
|
||||
以下功能:
|
||||
|
||||
- 单击托盘图标会切换窗口可见性
|
||||
- 右键单击托盘将打开菜单(如果有)
|
||||
|
||||
在macOS上,如果没有附加的窗口,则托盘将使用显示菜单的默认方法(任何按钮)。如果有附加的窗口但没有菜单,则托盘将切换窗口,而不管按下的按钮如何。
|
||||
在macOS上,如果没有附加的窗口,则托盘将使用显示菜单的默认方法(任何按钮)。如果
|
||||
有附加的窗口但没有菜单,则托盘将切换窗口,而不管按下的按钮如何。
|
||||
|
||||
## 插件
|
||||
|
||||
@@ -246,13 +290,16 @@ type Plugin interface {
|
||||
|
||||
`Name()`方法返回插件的名称。这用于记录目的。
|
||||
|
||||
`Init(*application.App) error`方法在加载插件时调用。`*application.App`参数是加载插件的应用程序。任何错误都将阻止应用程序启动。
|
||||
`Init(*application.App) error`方法在加载插件时调用。`*application.App`参数是加载
|
||||
插件的应用程序。任何错误都将阻止应用程序启动。
|
||||
|
||||
`Shutdown()`方法在应用程序关闭时调用。
|
||||
|
||||
`CallableByJS()`方法返回可以从前端调用的导出函数列表。这些方法名称必须与插件导出的方法名称完全匹配。
|
||||
`CallableByJS()`方法返回可以从前端调用的导出函数列表。这些方法名称必须与插件导出
|
||||
的方法名称完全匹配。
|
||||
|
||||
`InjectJS()`方法返回应注入到创建的所有窗口中的JavaScript。这对于添加与插件补充的自定义JavaScript函数很有用。
|
||||
`InjectJS()`方法返回应注入到创建的所有窗口中的JavaScript。这对于添加与插件补充的
|
||||
自定义JavaScript函数很有用。
|
||||
|
||||
### 提示
|
||||
|
||||
@@ -270,7 +317,8 @@ const (
|
||||
)
|
||||
```
|
||||
|
||||
由于Go和JavaScript之间的不兼容性,无法以这种方式使用自定义类型。最好的策略是为float64使用类型别名:
|
||||
由于Go和JavaScript之间的不兼容性,无法以这种方式使用自定义类型。最好的策略是为
|
||||
float64使用类型别名:
|
||||
|
||||
```go
|
||||
type MyEnum = float64
|
||||
@@ -293,7 +341,8 @@ const MyEnum = {
|
||||
```
|
||||
|
||||
- 为什么使用`float64`?不能使用`int`吗?
|
||||
- 因为JavaScript没有“int”的概念。一切都是`number`,在Go中会转换为`float64`。Go的反射包中还有类型转换的限制,这意味着使用`int`是行不通的。
|
||||
- 因为JavaScript没有“int”的概念。一切都是`number`,在Go中会转换为`float64`。Go
|
||||
的反射包中还有类型转换的限制,这意味着使用`int`是行不通的。
|
||||
|
||||
### BackgroundColour
|
||||
|
||||
@@ -301,13 +350,16 @@ const MyEnum = {
|
||||
|
||||
### WindowIsTranslucent
|
||||
|
||||
已删除此标志。现在有一个`BackgroundType`标志,可用于设置窗口应具有的背景类型。此标志可以设置为以下任何值:
|
||||
已删除此标志。现在有一个`BackgroundType`标志,可用于设置窗口应具有的背景类型。此
|
||||
标志可以设置为以下任何值:
|
||||
|
||||
- `BackgroundTypeSolid` - 窗口将具有实心背景
|
||||
- `BackgroundTypeTransparent` - 窗口将具有透明背景
|
||||
- `BackgroundTypeTranslucent` - 窗口将具有半透明背景
|
||||
|
||||
在Windows上,如果`BackgroundType`设置为`BackgroundTypeTranslucent`,则可以使用`WindowsWindow`选项中的`BackdropType`标志设置透明度的类型。这可以设置为以下任何值:
|
||||
在Windows上,如果`BackgroundType`设置为`BackgroundTypeTranslucent`,则可以使
|
||||
用`WindowsWindow`选项中的`BackdropType`标志设置透明度的类型。这可以设置为以下任
|
||||
何值:
|
||||
|
||||
- `Auto` - 窗口将使用系统确定的效果
|
||||
- `None` - 窗口没有背景
|
||||
@@ -319,23 +371,32 @@ const MyEnum = {
|
||||
|
||||
### WndProcInterceptor
|
||||
|
||||
如果设置了此标志,将拦截WndProc并调用该函数。这允许您直接处理Windows消息。该函数应具有以下签名:
|
||||
如果设置了此标志,将拦截WndProc并调用该函数。这允许您直接处理Windows消息。该函数
|
||||
应具有以下签名:
|
||||
|
||||
```go
|
||||
func(hwnd uintptr, msg uint32, wParam, lParam uintptr) (returnValue uintptr, shouldReturn)
|
||||
```
|
||||
|
||||
如果`shouldReturn`值设置为`true`,则`returnValue`将由主wndProc方法返回。如果设置为`false`,将忽略返回值,并且消息将继续由主wndProc方法处理。
|
||||
如果`shouldReturn`值设置为`true`,则`returnValue`将由主wndProc方法返回。如果设置
|
||||
为`false`,将忽略返回值,并且消息将继续由主wndProc方法处理。
|
||||
|
||||
## 在关闭时隐藏窗口+OnBeforeClose
|
||||
|
||||
在v2中,有一个`HideWindowOnClose`标志,用于在关闭窗口时隐藏窗口。`HideWindowOnClose`标志与`OnBeforeClose`回调之间存在逻辑重叠。在v3中,已删除`HideWindowOnClose`标志,并将`OnBeforeClose`回调重命名为`ShouldClose`。当用户尝试关闭窗口时,将调用`ShouldClose`回调。如果回调返回`true`,窗口将关闭。如果返回`false`,窗口将不会关闭。这可以用于隐藏窗口而不是关闭窗口。
|
||||
在v2中,有一个`HideWindowOnClose`标志,用于在关闭窗口时隐藏窗
|
||||
口。`HideWindowOnClose`标志与`OnBeforeClose`回调之间存在逻辑重叠。在v3中,已删
|
||||
除`HideWindowOnClose`标志,并将`OnBeforeClose`回调重命名为`ShouldClose`。当用户
|
||||
尝试关闭窗口时,将调用`ShouldClose`回调。如果回调返回`true`,窗口将关闭。如果返
|
||||
回`false`,窗口将不会关闭。这可以用于隐藏窗口而不是关闭窗口。
|
||||
|
||||
## 窗口拖动
|
||||
|
||||
在v2中,使用`--wails-drag`属性来指示可以使用元素拖动窗口。在v3中,已将其替换为`--webkit-app-region`,以更符合其他框架处理方式。`--webkit-app-region`属性可以设置为以下任何值:
|
||||
在v2中,使用`--wails-drag`属性来指示可以使用元素拖动窗口。在v3中,已将其替换
|
||||
为`--webkit-app-region`,以更符合其他框架处理方式。`--webkit-app-region`属性可以
|
||||
设置为以下任何值:
|
||||
|
||||
- `drag` - 可使用该元素拖动窗口
|
||||
- `no-drag` - 该元素无法用于拖动窗口
|
||||
|
||||
我们本来希望使用`app-region`,但是在webkit在macOS上的`getComputedStyle`调用不支持它。
|
||||
我们本来希望使用`app-region`,但是在webkit在macOS上的`getComputedStyle`调用不支
|
||||
持它。
|
||||
|
||||
@@ -9,13 +9,16 @@
|
||||
- Git 克隆此存储库。切换到 `v3-alpha` 分支。
|
||||
- 安装 CLI:`cd v3/cmd/wails3 && go install`
|
||||
|
||||
- 可选:如果您想要使用构建系统构建前端代码,您需要安装 [npm](https://nodejs.org/en/download)。
|
||||
- 可选:如果您想要使用构建系统构建前端代码,您需要安装
|
||||
[npm](https://nodejs.org/en/download)。
|
||||
|
||||
## 构建
|
||||
|
||||
对于简单的程序,您可以使用标准的 `go build` 命令。也可以使用 `go run`。
|
||||
|
||||
Wails 还配备了一个构建系统,可用于构建更复杂的项目。它使用了强大的 [Task](https://taskfile.dev) 构建系统。要了解更多信息,请查看任务主页或运行 `wails task --help`。
|
||||
Wails 还配备了一个构建系统,可用于构建更复杂的项目。它使用了强大的
|
||||
[Task](https://taskfile.dev) 构建系统。要了解更多信息,请查看任务主页或运行
|
||||
`wails task --help`。
|
||||
|
||||
## 项目结构
|
||||
|
||||
@@ -42,13 +45,18 @@ Wails 还配备了一个构建系统,可用于构建更复杂的项目。它
|
||||
|
||||
### 添加窗口功能
|
||||
|
||||
添加窗口功能的首选方法是在 `pkg/application/webview_window.go` 文件中添加一个新函数。这应该实现所有平台所需的功能。任何特定于平台的代码都应通过 `webviewWindowImpl` 接口方法调用。该接口由每个目标平台实现,以提供平台特定的功能。在某些情况下,这可能不执行任何操作。添加接口方法后,请确保每个平台都实现了它。一个很好的例子是 `SetMinSize` 方法。
|
||||
添加窗口功能的首选方法是在 `pkg/application/webview_window.go` 文件中添加一个新
|
||||
函数。这应该实现所有平台所需的功能。任何特定于平台的代码都应通过
|
||||
`webviewWindowImpl` 接口方法调用。该接口由每个目标平台实现,以提供平台特定的功
|
||||
能。在某些情况下,这可能不执行任何操作。添加接口方法后,请确保每个平台都实现了
|
||||
它。一个很好的例子是 `SetMinSize` 方法。
|
||||
|
||||
- Mac: `webview_window_darwin.go`
|
||||
- Windows: `webview_window_windows.go`
|
||||
- Linux: `webview_window_linux.go`
|
||||
|
||||
大多数,如果不是全部,特定于平台的代码应在主线程上运行。为了简化这一点,在 `application.go` 中定义了一些 `invokeSync` 方法。
|
||||
大多数,如果不是全部,特定于平台的代码应在主线程上运行。为了简化这一点,在
|
||||
`application.go` 中定义了一些 `invokeSync` 方法。
|
||||
|
||||
### 更新运行时
|
||||
|
||||
@@ -65,9 +73,12 @@ wails3 task runtime:build
|
||||
- 将事件添加到 `events.txt` 文件中
|
||||
- 运行 `wails3 task events:generate`
|
||||
|
||||
有几种类型的事件:特定于平台的应用程序和窗口事件 + 通用事件。通用事件对于跨平台事件处理很有用,但您不必局限于“最低公共分母”。如果需要,可以使用特定于平台的事件。
|
||||
有几种类型的事件:特定于平台的应用程序和窗口事件 + 通用事件。通用事件对于跨平台
|
||||
事件处理很有用,但您不必局限于“最低公共分母”。如果需要,可以使用特定于平台的事
|
||||
件。
|
||||
|
||||
添加通用事件时,请确保映射了特定于平台的事件。一个示例是在 `window_webview_darwin.go` 中:
|
||||
添加通用事件时,请确保映射了特定于平台的事件。一个示例是在
|
||||
`window_webview_darwin.go` 中:
|
||||
|
||||
```go
|
||||
// 将 ShouldClose 转化为通用的 WindowClosing 事件
|
||||
@@ -98,19 +109,24 @@ type Plugin interface {
|
||||
|
||||
`Name()` 方法返回插件的名称。这用于日志记录。
|
||||
|
||||
`Init(*application.App) error` 方法在加载插件时调用。`*application.App` 参数是加载插件的应用程序。任何错误都将阻止应用程序启动。
|
||||
`Init(*application.App) error` 方法在加载插件时调用。`*application.App` 参数是加
|
||||
载插件的应用程序。任何错误都将阻止应用程序启动。
|
||||
|
||||
`Shutdown()` 方法在应用程序关闭时调用。
|
||||
|
||||
`CallableByJS()` 方法返回可以从前端调用的导出函数列表。这些方法的名称必须与插件导出的方法的名称完全匹配。
|
||||
`CallableByJS()` 方法返回可以从前端调用的导出函数列表。这些方法的名称必须与插件
|
||||
导出的方法的名称完全匹配。
|
||||
|
||||
`InjectJS()` 方法返回应注入到所有窗口中的 JavaScript。这对于添加与插件相补充的自定义 JavaScript 函数非常有用。
|
||||
`InjectJS()` 方法返回应注入到所有窗口中的 JavaScript。这对于添加与插件相补充的自
|
||||
定义 JavaScript 函数非常有用。
|
||||
|
||||
内置插件可以在 `v3/plugins` 目录中找到。参考它们以获得灵感。
|
||||
|
||||
## 任务
|
||||
|
||||
Wails CLI 使用 [Task](https://taskfile.dev) 构建系统。它作为库导入并用于运行 `Taskfile.yaml` 中定义的任务。与 Task 的主要交互发生在 `v3/internal/commands/task.go` 中。
|
||||
Wails CLI 使用 [Task](https://taskfile.dev) 构建系统。它作为库导入并用于运行
|
||||
`Taskfile.yaml` 中定义的任务。与 Task 的主要交互发生在
|
||||
`v3/internal/commands/task.go` 中。
|
||||
|
||||
### 升级 Taskfile
|
||||
|
||||
@@ -124,7 +140,8 @@ wails3 task taskfile:upgrade
|
||||
|
||||
如果存在不兼容性,则应在 `v3/internal/commands/task.go` 文件中显示。
|
||||
|
||||
通常,修复不兼容性的最佳方法是克隆 `https://github.com/go-task/task` 上的任务存储库,并查看 git 历史记录以确定发生了什么变化以及原因。
|
||||
通常,修复不兼容性的最佳方法是克隆 `https://github.com/go-task/task` 上的任务存
|
||||
储库,并查看 git 历史记录以确定发生了什么变化以及原因。
|
||||
|
||||
要检查所有更改是否正确工作,请重新安装 CLI 并再次检查版本:
|
||||
|
||||
@@ -135,13 +152,17 @@ wails3 task -version
|
||||
|
||||
## 打开 PR
|
||||
|
||||
确保所有 PR 都有与之关联的工单,以提供更改的上下文。如果没有工单,请先创建一个。确保所有 PR 都已使用所做的更改更新了 CHANGELOG.md 文件。CHANGELOG.md 文件位于 `mkdocs-website/docs` 目录中。
|
||||
确保所有 PR 都有与之关联的工单,以提供更改的上下文。如果没有工单,请先创建一个。
|
||||
确保所有 PR 都已使用所做的更改更新了 CHANGELOG.md 文件。CHANGELOG.md 文件位于
|
||||
`mkdocs-website/docs` 目录中。
|
||||
|
||||
## 其他任务
|
||||
|
||||
### 升级 Taskfile
|
||||
|
||||
Wails CLI 使用 [Task](https://taskfile.dev) 构建系统。它作为库导入并用于运行 `Taskfile.yaml` 中定义的任务。与 Task 的主要交互发生在 `v3/internal/commands/task.go` 中。
|
||||
Wails CLI 使用 [Task](https://taskfile.dev) 构建系统。它作为库导入并用于运行
|
||||
`Taskfile.yaml` 中定义的任务。与 Task 的主要交互发生在
|
||||
`v3/internal/commands/task.go` 中。
|
||||
|
||||
要检查是否有 Taskfile 的升级,请运行 `wails3 task -version` 并检查 Task 网站。
|
||||
|
||||
@@ -153,11 +174,12 @@ wails3 task taskfile:upgrade
|
||||
|
||||
如果存在不兼容性,则应在 `v3/internal/commands/task.go` 文件中显示。
|
||||
|
||||
通常,修复不兼容性的最佳方法是克隆 `https://github.com/go-task/task` 上的任务存储库,并查看 git 历史记录以确定发生了什么变化以及原因。
|
||||
通常,修复不兼容性的最佳方法是克隆 `https://github.com/go-task/task` 上的任务存
|
||||
储库,并查看 git 历史记录以确定发生了什么变化以及原因。
|
||||
|
||||
要检查所有更改是否正确工作,请重新安装 CLI 并再次检查版本:
|
||||
|
||||
```shell
|
||||
wails3 task cli:install
|
||||
wails3 task -version
|
||||
```
|
||||
```
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
||||
# 反馈
|
||||
|
||||
我们欢迎(并鼓励)您的反馈!在创建新的反馈之前,请先搜索现有的票据或帖子。
|
||||
以下是提供反馈的不同方式:
|
||||
我们欢迎(并鼓励)您的反馈!在创建新的反馈之前,请先搜索现有的票据或帖子。以下是
|
||||
提供反馈的不同方式:
|
||||
|
||||
=== "错误"
|
||||
|
||||
@@ -35,7 +35,8 @@
|
||||
- 请*不要*只添加"+1"或"me too"等评论。
|
||||
- 如果帖子还有更多内容可补充,请随时发表评论,例如"此错误也影响ARM构建"或"另一种选项是......"
|
||||
|
||||
已知问题和正在进行的工作列表可以在[此处](https://github.com/orgs/wailsapp/projects/6)找到。
|
||||
已知问题和正在进行的工作列表可以
|
||||
在[此处](https://github.com/orgs/wailsapp/projects/6)找到。
|
||||
|
||||
## 我们寻求反馈的内容
|
||||
|
||||
@@ -55,4 +56,4 @@
|
||||
- 哪些功能缺失?
|
||||
- 哪些功能是不需要的?
|
||||
- 文档
|
||||
- 有什么可以更清晰的地方?
|
||||
- 有什么可以更清晰的地方?
|
||||
|
||||
@@ -65,7 +65,8 @@ go install
|
||||
|
||||
## 系统检查
|
||||
|
||||
运行`wails3 doctor`将检查您是否安装了正确的依赖项。如果没有安装,它将提供缺失的内容,并帮助您解决任何问题。
|
||||
运行`wails3 doctor`将检查您是否安装了正确的依赖项。如果没有安装,它将提供缺失的
|
||||
内容,并帮助您解决任何问题。
|
||||
|
||||
## 看起来缺少`wails3`命令?
|
||||
|
||||
@@ -73,4 +74,4 @@ go install
|
||||
|
||||
- 确保您已正确按照Go安装指南进行操作。
|
||||
- 检查`go/bin`目录是否在`PATH`环境变量中。
|
||||
- 关闭/重新打开当前终端以使用新的`PATH`变量。
|
||||
- 关闭/重新打开当前终端以使用新的`PATH`变量。
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user