본문 바로가기
Programming/Golang

Go언어 - Lorca GUI 라이브러리

by Wilkyway 2020. 12. 8.
반응형

Go 언어로 구현된 라이브러리들도 상당히 많습니다. (https://github.com/avelino/awesome-go#gui). 이전에 Fyne, Gotk3, andlabs/ui, sciter 에 대해서 포스팅한 적이 있는데요...최대한 설치할 것들이 적고 쉽게 구축 가능한 라이브러리들을 찾아보고 있었습니다. 그러던 중 Lorca라는 것을 발견했는데요. 오늘은 이 Lorca 를 한번 사용해보겠습니다. Lorca는 HTML 문법을 사용하여 매우 쉽게 UI를 구성할 수 있다는 장점이 있습니다. 비슷하게는 Webview가 있는데, 가볍고 build된 파일도 용량이 매우 작지만 설치시 조금 애로가 있을 수 있고, 세부설정도 Lorca보다는 조금 어렵다고 합니다. 반대로 얘기하면, Lorca는 설정할 수 있는 항목이 제한적이지만 심플하게 만들어보기에는 적합하다고 합니다.

 

1. 설치

여타 다른 go 라이브러리들과 마찬가지로 go get으로 lorca를 설치해줍시다. 

go get github.com/zserge/lorca

 

2. Hello World

우선 아래의 소스를 그대로 복붙하여 실행이 되는지 봅시다.

package main

import (
	"log"
	"net/url"

	"github.com/zserge/lorca"
)

func main() {
	// Create UI with basic HTML passed via data URI
	ui, err := lorca.New("data:text/html,"+url.PathEscape(`
	<html>
		<head><title>Hello</title></head>
		<body><h1>Hello, world!</h1></body>
	</html>
	`), "", 480, 320)
	if err != nil {
		log.Fatal(err)
	}
	defer ui.Close()
	// Wait until UI window is closed
	<-ui.Done()
}

<결과>

이쁜 앱이 나타났습니다^^. 음.....역시 electron의 느낌이...

 

 

 

Lorca사이트에서 제공하는 Javascript - Go 연동 예제입니다. 

package main

import (
	"net/url"

	"github.com/zserge/lorca"
)

var ui lorca.UI

func main() {
	ui, _ = lorca.New("", "", 480, 320)
	defer ui.Close()

	ui.Bind("helloFromGo", helloFromGo)

	ui.Load("data:text/html," + url.PathEscape(`
    <!doctype html>
    <html lang="ja">
    <head>
    <title>Lorca Sample</title>
	<script>
        function helloFromJavaScript() {
            return 'Hello from JavaScript!'
        }
    </script>
    </head>
    <body>
        <button onclick="helloFromGo()"> Press Me! </button>
        <div id="content"></div>
    </body>
    </html>
    `))

	<-ui.Done()
}

func helloFromGo() {
	msg := ui.Eval(`helloFromJavaScript();`).String() + "<br>" + "Hello From Go!"
	ui.Eval(`document.getElementById('content').innerHTML="` + msg + `";`)
}

helloFromGo() 함수는 javascript 에서 return하는 문자열을 받아들이고, "Hello From Go" 문자열과 합하고,  <div id="content">에 내용으로 출력해줍니다. 

데이터 처리는 golang으로 작성할 수도 있지만, javascript로 작성할 수도 있습니다. 굳이 ui.Eval로 데이터를 왔다갔다 하는 것이 불편하다고 생각되면 javascript로 구성하는 것도 괜찮을 것 같습니다. 그래도 컴파일된 용량이 작으니까요. 

 

~~끝~~

반응형

댓글