[Go Library] Lorca

Study·2021년 5월 31일
0

고랭 라이브러리

목록 보기
1/4
post-thumbnail

Lorca

고랭 GUI 라이브러리 중 하나인 Lorca

다른 GUI 라이브러리들 보다 매우 쉽게 구축이 가능하며 HTML 문법을 통해 쉬운 GUI 를 구성할 수 있다는 장점이 있다.

크롬 브라우저를 UI 레이어로 사용하고 있으며 UI 에서 GO 코드를 호출하며 원할히 UI 를 조작할 수 있다.

특징

  1. cgo 없이 간단하게 API 사용 가능
  2. 작은 응용 프로그램 (5 ~ 10MB)
  3. HTML / CSS 로 모든 기능과 GO 성능 개발 용이
  4. GO 함수를 노출하고 Javascript 에서 호출
  5. GO 에서 임의의 Javascript 코드 호출
  6. 고루틴에서 UI 와 기본 앱 간의 비동기 흐름
  7. 로컬 웹 서버에서 또는 데이터 URL 을 통해 웹 UI 로드 지원
  8. 여러 앱 창 지원
  9. 패키징 및 브랜딩 지원

설계 상의 한계

  1. 크롬 >= 70 을 설치해야 한다.
  2. 아직 크롬 창을 제어할 순 없다. (테두리 제거, 투명하게, 위치 크기 제어)
  3. 창 메뉴 없음 (타사 라이브러리로는 구현 가능)

더 많은 제어를 위해서는 유사한 API 와 함께 webview 라이브러리를 사용하는 것이 좋다.

그럼 마이그레이션이 원할해 진다.

작동원리

내부적으로 크롬 개발자툴 프로토콜을 사용하여 크롬 인스턴스에서 계측한다.

Lorca 는 설치된 크롬을 찾고, 임시 포트에 바인딩된 원격 디버깅 인스턴스를 시작하여 stderr 하고 실제 웹소켓 끝점에서 읽는다.

그 후 새 웹소켓 서버에 대한 새 클라이언트를 연결하고 이를 통해 JSON 메시지를 전송하여 계측한다.

Javascript 함수는 크롬에서 평가되는 반면 GO 함수는 실제로 GO 런타임에서 실행되며 반환 값은 크롬에 전달된다.

특허

MIT 라이센스에 따라 배포되어 자유롭게 이용이 가능하다.

Hello World!

package main

import (
	"log"
	"net/url"

	"github.com/zserge/lorca"
)

func main() {
	// HTML 로 UI 를 생성
	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()
    
	// UI 가 닫힐 때까지 기다림
	<-ui.Done()
}

매우 쉽게 UI 창을 띄우는 것이 가능하다.

profile
Study

0개의 댓글