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로 구성하는 것도 괜찮을 것 같습니다. 그래도 컴파일된 용량이 작으니까요.
~~끝~~
'Programming > Golang' 카테고리의 다른 글
Go언어 - Gin Framework (2강 HTML Template 구성) (0) | 2020.12.13 |
---|---|
Go언어 - Lorca GUI 간단한 메모장 (0) | 2020.12.09 |
Go언어- Gin Framework(1강 설치) (0) | 2020.12.08 |
Go언어 - MySQL 연동 (0) | 2020.12.06 |
Go언어 - 소스코드 모듈화 (0) | 2020.12.06 |