<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: energy</title>
    <description>The latest articles on Forem by energy (@yanghy).</description>
    <link>https://forem.com/yanghy</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1097563%2Fe67716e2-ef6a-4b45-a266-bf2efa67b551.png</url>
      <title>Forem: energy</title>
      <link>https://forem.com/yanghy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/yanghy"/>
    <language>en</language>
    <item>
      <title>A New Era of Cross-Platform Desktop Application Development in Go Language: A Comprehensive Analysis of LCL, CEF, and Webview</title>
      <dc:creator>energy</dc:creator>
      <pubDate>Mon, 18 Nov 2024 03:30:06 +0000</pubDate>
      <link>https://forem.com/yanghy/a-new-era-of-cross-platform-desktop-application-development-in-go-language-a-comprehensive-23p9</link>
      <guid>https://forem.com/yanghy/a-new-era-of-cross-platform-desktop-application-development-in-go-language-a-comprehensive-23p9</guid>
      <description>&lt;h2&gt;
  
  
  Opening Words
&lt;/h2&gt;

&lt;p&gt;In the vast ecosystem of Go language, desktop application development has always been a field of great attention. Today, I will introduce three cross-platform desktop application development frameworks based on the Go language—LCL, CEF, and Webview. Each of them possesses unique charm and broad application scenarios. Through these three frameworks, you will be able to easily develop powerful and aesthetically pleasing cross-platform desktop applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. LCL: The Native Component Treasury in Go Language
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Open Source Address: &lt;a href="https://github.com/energye/lcl" rel="noopener noreferrer"&gt;https://github.com/energye/lcl&lt;/a&gt;
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Introduction:
&lt;/h3&gt;

&lt;p&gt;LCL (Lazarus Component Library) is a lightweight, small-sized cross-platform desktop application development framework under the Go language. It provides about 200 system-native components, making it easy for developers to build interfaces that conform to the style of different operating systems. Whether it's the Windows, Mac OS, or Linux platform, LCL can offer you rich native component support.&lt;/p&gt;

&lt;h3&gt;
  
  
  Features:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Lightweight and small in size, easy to integrate and deploy.&lt;/li&gt;
&lt;li&gt;Rich component library to meet various development needs.&lt;/li&gt;
&lt;li&gt;One set of code, run across platforms, reducing development costs.&lt;/li&gt;
&lt;li&gt;Construction &amp;amp; Usage:
LCL can be used independently or mixed with other frameworks. When used independently, you can develop pure native graphical user interface (GUI) applications; when mixed with other frameworks, you can combine their respective advantages to create more complex and powerful desktop applications.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. CEF: The Magic Tool for Web Technology Integration in Go Language
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Open Source Address: &lt;a href="https://github.com/energye/cef" rel="noopener noreferrer"&gt;https://github.com/energye/cef&lt;/a&gt;
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Introduction:
&lt;/h3&gt;

&lt;p&gt;Go CEF is a framework developed under the Go language based on LCL and CEF (Chromium Embedded Framework). It combines the native component library of LCL and the browser component library of CEF, enabling developers to use Go language and web-end technologies (HTML+CSS+JavaScript) to build desktop applications that support the Windows platform. CEF4Delphi encapsulates the CEF3 library on the basis of LCL, providing strong browser support for Go CEF.&lt;/p&gt;

&lt;h3&gt;
  
  
  Features:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Depends on the CEF binary framework environment, providing complete CEF API.&lt;/li&gt;
&lt;li&gt;Possesses both the system-native components of LCL and the browser components of CEF, offering rich functionalities.&lt;/li&gt;
&lt;li&gt;Simple development environment, fast compilation speed, enhancing development efficiency.&lt;/li&gt;
&lt;li&gt;Supports mainstream front-end frameworks (Vue, React, Angular, etc.), lowering the threshold for front-end technology.&lt;/li&gt;
&lt;li&gt;High-performance event-driven and IPC communication, achieving rapid invocation and data interaction between Go and the web end.&lt;/li&gt;
&lt;li&gt;Construction &amp;amp; Usage:
Go CEF supports the mixed use of LCL and CEF. You can use LCL's native components to construct the main interface of the application while utilizing CEF's browser components to embed web content. This hybrid usage method gives Go CEF unique advantages in cross-platform desktop application development.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Webview: The Lightweight Web Content Integration Expert in Go Language
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Open Source Address: &lt;a href="https://github.com/energye/wv" rel="noopener noreferrer"&gt;https://github.com/energye/wv&lt;/a&gt;
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Introduction:
&lt;/h3&gt;

&lt;p&gt;Go Webview (wv) is a framework developed under the Go language based on LCL and WebView technology. It supports browser component libraries such as Windows-Webview2, Linux-Webkit2, and MacOS-Webkit2, allowing developers to use Go language and web-end technologies to build cross-platform desktop applications. WebView4Delphi, Webkit2GTK, and Webkit2Cocoa respectively encapsulate corresponding WebView libraries on the basis of LCL, providing strong browser support for Go Webview.&lt;/p&gt;

&lt;h3&gt;
  
  
  Features:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Lightweight, easy to integrate and deploy.&lt;/li&gt;
&lt;li&gt;Supports full WebView2 and Webkit2 APIs, powerful functions.&lt;/li&gt;
&lt;li&gt;Does not require HTTP service support, can directly read local resources or resources embedded in the executable file.&lt;/li&gt;
&lt;li&gt;Supports mainstream front-end frameworks and native HTML+CSS+JS technologies, reducing development difficulty.&lt;/li&gt;
&lt;li&gt;High-performance event-driven and custom content interaction, meeting the needs of various application scenarios.&lt;/li&gt;
&lt;li&gt;Construction &amp;amp; Usage:
Go Webview also supports the mixed use of LCL and WebView. You can use LCL's native components to construct the main interface of the application while using WebView to embed web content. This lightweight yet powerful method gives Go Webview broad prospects for application in cross-platform desktop application development.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Through this introduction, I believe everyone now has a deeper understanding of the three cross-platform desktop application development frameworks under the Go language—LCL, CEF, and Webview. Each has its own unique charm and broad application scenarios. Whether you need to develop a desktop application with rich native components or seamlessly integrate web content into your application, you can find suitable solutions among these three frameworks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example Address: &lt;a href="https://github.com/energye/examples" rel="noopener noreferrer"&gt;https://github.com/energye/examples&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Now, let us take action together and use these powerful frameworks to create even better and more practical cross-platform desktop applications! Don't forget to follow my blog to get more exciting content about Go language and cross-platform desktop application development.&lt;/p&gt;

</description>
      <category>cef</category>
      <category>go</category>
      <category>webview</category>
    </item>
    <item>
      <title>Creating desktop applications in Golang</title>
      <dc:creator>energy</dc:creator>
      <pubDate>Sun, 11 Jun 2023 09:37:20 +0000</pubDate>
      <link>https://forem.com/yanghy/creating-desktop-applications-in-golang-3d6d</link>
      <guid>https://forem.com/yanghy/creating-desktop-applications-in-golang-3d6d</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;
&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s"&gt;"embed"&lt;/span&gt;
    &lt;span class="s"&gt;"fmt"&lt;/span&gt;
    &lt;span class="s"&gt;"github.com/energye/energy/v2/cef"&lt;/span&gt;
    &lt;span class="s"&gt;"github.com/energye/energy/v2/cef/ipc"&lt;/span&gt;
    &lt;span class="s"&gt;"github.com/energye/energy/v2/cef/ipc/context"&lt;/span&gt;
    &lt;span class="s"&gt;"github.com/energye/energy/v2/common"&lt;/span&gt;
    &lt;span class="s"&gt;"github.com/energye/energy/v2/pkgs/assetserve"&lt;/span&gt;
    &lt;span class="s"&gt;"github.com/energye/golcl/lcl/rtl/version"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;//go:embed resources&lt;/span&gt;
&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;resources&lt;/span&gt; &lt;span class="n"&gt;embed&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FS&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;cef&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GlobalInit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;resources&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;cefApp&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;cef&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NewApplication&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;cef&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BrowserWindow&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"http://localhost:22022/index.html"&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;common&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IsLinux&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;cef&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BrowserWindow&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IconFS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"resources/icon.png"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;cef&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BrowserWindow&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IconFS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"resources/icon.ico"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;common&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IsDarwin&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
        &lt;span class="n"&gt;cef&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BrowserWindow&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;EnableHideCaption&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;cef&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BrowserWindow&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Energy Vue + ElementUI Demo"&lt;/span&gt;
    &lt;span class="n"&gt;cef&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BrowserWindow&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Width&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;1200&lt;/span&gt;
    &lt;span class="n"&gt;chromiumConfig&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;cef&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BrowserWindow&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ChromiumConfig&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;chromiumConfig&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SetEnableMenu&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;ipc&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;On&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"window-state"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;func&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IContext&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;bw&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;cef&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BrowserWindow&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetWindowInfo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BrowserId&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
        &lt;span class="n"&gt;state&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ArgumentList&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetIntByIndex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;state&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;bw&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Minimize&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;state&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;bw&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Maximize&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="n"&gt;ipc&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;On&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"window-close"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;func&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IContext&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;bw&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;cef&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BrowserWindow&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetWindowInfo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BrowserId&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
        &lt;span class="n"&gt;bw&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CloseBrowserWindow&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="n"&gt;ipc&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;On&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"os-info"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;func&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IContext&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;OSVersion&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ToString&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
        &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Result&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;OSVersion&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ToString&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="n"&gt;cef&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BrowserWindow&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SetBrowserInit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;func&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;cef&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BrowserEvent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;window&lt;/span&gt; &lt;span class="n"&gt;cef&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IBrowserWindow&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c"&gt;//&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="n"&gt;cef&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SetBrowserProcessStartAfterCallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;func&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;assetserve&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NewAssetsHttpServer&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PORT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;22022&lt;/span&gt;               
        &lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AssetsFSName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"resources"&lt;/span&gt; 
        &lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Assets&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;resources&lt;/span&gt;
        &lt;span class="k"&gt;go&lt;/span&gt; &lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;StartHttpServer&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="n"&gt;cef&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cefApp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WV-YpteE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w2hh7neuqb85jv30rr7h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WV-YpteE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w2hh7neuqb85jv30rr7h.png" alt="demo preview" width="800" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cef</category>
      <category>energy</category>
      <category>gui</category>
      <category>go</category>
    </item>
    <item>
      <title>Building cross platform desktop applications using JavaScript, HTML, and CSS in GO</title>
      <dc:creator>energy</dc:creator>
      <pubDate>Thu, 08 Jun 2023 06:04:36 +0000</pubDate>
      <link>https://forem.com/yanghy/building-cross-platform-desktop-applications-using-javascript-html-and-css-in-go-447c</link>
      <guid>https://forem.com/yanghy/building-cross-platform-desktop-applications-using-javascript-html-and-css-in-go-447c</guid>
      <description>&lt;h2&gt;
  
  
  &lt;a href="https://github.com/energye/energy"&gt;Energy&lt;/a&gt; is the framework for Go to build desktop applications based on CEF
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://github.com/energye/energy"&gt;Github&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://gitee.com/energye/energy"&gt;Gitee&lt;/a&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Project Introduction
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Energy is a framework developed by Golang based on CEF(Chromium Embedded Framework), embedded with CEF binary&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use Go and Web technology (HTML+CSS+JavaScript) to build cross-platform desktop applications that support Windows, Linux and MacOS&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Knowledge of the front-end technology stack and some knowledge of the Go language is required&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Characteristic
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;development environment is simple and the compilation speed is fast. Only the Go development environment and the CEF binary framework that Energy depends on are needed&lt;/li&gt;
&lt;li&gt;cross-platform: A set of code can be packaged into Windows, domestic UOS, Deepin, Kylin, MacOS, Linux&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Language responsibilities&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Go: Go is responsible for window creation, CEF configuration and function implementation, creation of various UI components, low-level system calls, and functions that JS cannot handle, such as file stream, security encryption, high-performance processing, etc., which can be developed as a pure backend&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Web: HTML + CSS + JavaScript responsible for the function of the client interface, make any interface you want, can be used as a pure front-end development&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;front-end technology: Support mainstream front-end frameworks, such as Vue, React, Angular or pure HTML+CSS&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;event driven: High performance event driven, IPC based communication, Go and Web side is very convenient function call and data interaction&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Go interacts with the Web
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The Go and Web technologies are based on IPC communication. Data and event triggering can be exchanged between Go and Web without using the http interface, which is as simple as calling the functions of the language itself&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Define JS binding type variables in Go and provide them to JS on the Web side to realize data synchronization of Go variables or structural objects&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Listen for events in JS and trigger JS events in Go to achieve Go calling JS functions and passing parameter&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Listen for events in Go and trigger Go events in JS to achieve JS calling Go functions and passing parameters&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Built-in dependency&amp;amp;integration
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Golcl&lt;/li&gt;
&lt;li&gt;CEF &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;a href=""&gt;Development environment&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Install automatically using the energy command line tool&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Basic needs
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="n"&gt;golang&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="m"&gt;1.18&lt;/span&gt;

&lt;span class="n"&gt;energy&lt;/span&gt; &lt;span class="n"&gt;development&lt;/span&gt; &lt;span class="n"&gt;environment&lt;/span&gt;

&lt;span class="n"&gt;Use&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;energy&lt;/span&gt; &lt;span class="n"&gt;command&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="n"&gt;tool&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;automatically&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;development&lt;/span&gt; &lt;span class="n"&gt;environment&lt;/span&gt;

&lt;span class="n"&gt;Get&lt;/span&gt; &lt;span class="n"&gt;energy&lt;/span&gt; &lt;span class="n"&gt;project&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;or&lt;/span&gt; &lt;span class="n"&gt;use&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;precompiled&lt;/span&gt; &lt;span class="n"&gt;command&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="n"&gt;tool&lt;/span&gt; &lt;span class="n"&gt;directly&lt;/span&gt; &lt;span class="n"&gt;Download&lt;/span&gt; &lt;span class="n"&gt;address&lt;/span&gt;

&lt;span class="k"&gt;go&lt;/span&gt; &lt;span class="n"&gt;get&lt;/span&gt; &lt;span class="n"&gt;github&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;energye&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;energy&lt;/span&gt;
&lt;span class="n"&gt;Enter&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;energy&lt;/span&gt; &lt;span class="n"&gt;command&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="n"&gt;directory&lt;/span&gt;

&lt;span class="n"&gt;cd&lt;/span&gt; &lt;span class="n"&gt;energy&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;cmd&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;energy&lt;/span&gt;
&lt;span class="n"&gt;Install&lt;/span&gt; &lt;span class="n"&gt;command&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="n"&gt;tools&lt;/span&gt;

&lt;span class="k"&gt;go&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt;
&lt;span class="n"&gt;Execute&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;installation&lt;/span&gt; &lt;span class="n"&gt;command&lt;/span&gt;

&lt;span class="n"&gt;energy&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  example/simple Code
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s"&gt;"github.com/energye/energy/v2/cef"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c"&gt;//Global initialization must be called by every application&lt;/span&gt;
    &lt;span class="n"&gt;cef&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GlobalInit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c"&gt;//Create application&lt;/span&gt;
    &lt;span class="n"&gt;cefApp&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;cef&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NewApplication&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="c"&gt;//Set URL&lt;/span&gt;
    &lt;span class="n"&gt;cef&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BrowserWindow&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"https://energy.yanghy.cn"&lt;/span&gt;
    &lt;span class="c"&gt;//Run App&lt;/span&gt;
    &lt;span class="n"&gt;cef&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cefApp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  System support
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;windows - 32, 64&lt;/li&gt;
&lt;li&gt;linux, linux-arm - 64&lt;/li&gt;
&lt;li&gt;mac 64&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Exchange QQ Group
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;541258627&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  email
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="mailto:snxamdf@126.com"&gt;snxamdf@126.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Public License
&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://www.apache.org/licenses/LICENSE-2.0"&gt;Apache-LICENSE-2.0&lt;/a&gt;&lt;/p&gt;

</description>
      <category>go</category>
      <category>gogui</category>
      <category>cef</category>
      <category>energy</category>
    </item>
  </channel>
</rss>
