Go에 OSX 애플리케이션 #golang 쓰기

10265 단어 GojXAgopherjs

개시하다


제목은 낚시.미안합니다.
애플 대신 자바스크립트를 쓸 수 있을 것 같다.
  • http://qiita.com/zakuroishikuro/items/1b02378bf9e940602d87
  • http://qiita.com/ymmtmdk/items/5cf7665eeddf34adf63e
  • 자바스크립트로 움직일 수 있다면 바로 GopherJS의 등장이죠!
    GopherJS+Nashorn+JavaFX를 탈 때처럼 간단한 샘플을 이동해 봤다.
  • http://qiita.com/tenntenn/items/e61822b265bc2b8f6c88
  • 창밖으로 나가다


    당분간 윈도를 꺼내 보세요.
    위 Qita의 JXA 기사를 참조하여 JavaScript 코드를 Go 언어로 무심코 변환했습니다.
    진짜 하면 (아무도 안 하겠지만) 틀을 만드는 게 좋을 것 같은데 일단 interface{}부터 쓰자.$는 변수 이름에 사용할 수 없기 때문에__로 대체합니다.
    여전히 고(故) 소스에 jsobjC 다른 언어의 이름이 나와 역겹다.registerSubclass 근처에 모골이 송연해요.windowWillClose:windowWillClose라고 쓰고 잠시 빠져들었다.win.center 이렇게 쓰면 창 한가운데 수수께끼 같은 방법도 잘 어울린다.
    호출 함수도, 필드에 수치를 입력하는 것도 아니고, 단지 방문 필드는 불가사의하다.win.center() 이런 게 더 잘 알아요.
    sample.go
    package main
    
    import (
        "github.com/gopherjs/gopherjs/js"
    )
    
    func main() {
    
        objC := js.Global.Get("ObjC")
        __ := js.Global.Get("$")
        objC.Call("import", "Cocoa")
    
        var app js.Object
        objC.Call("registerSubclass", map[string]interface{}{
            "name":       "WinDelegate",
            "superclass": "NSObject",
            "protocols":  []string{"NSWindowDelegate"},
            "methods": map[string]interface{}{
                "windowWillClose:": map[string]interface{}{
                    "types": []interface{}{"void", []interface{}{"id"}},
                    "implementation": func(notification js.Object) js.Object {
                        return app.Call("terminate", 0)
                    },
                },
            },
        })
    
        styleMask := __.Get("NSTitledWindowMask").Int() |
            __.Get("NSClosableWindowMask").Int() |
            __.Get("NSMiniaturizableWindowMask").Int()
    
        win := __.Get("NSWindow").Get("alloc").Call("initWithContentRectStyleMaskBackingDefer",
            __.Call("NSMakeRect", 0, 0, 400, 400),
            styleMask,
            __.Get("NSBackingStoreBuffered"),
            false,
        )
    
        win.Get("center")
        win.Set("title", "Hello Cocoa")
        win.Call("makeKeyAndOrderFront", win)
        win.Set("delegate", __.Get("WinDelegate").Get("alloc").Get("init"))
    
        app = __.Get("NSApplication").Get("sharedApplication")
        app.Call("setActivationPolicy", __.Get("NSApplicationActivationPolicyRegular"))
        app.Call("activateIgnoringOtherApps", true)
        app.Call("run")
    
    }
    
    
    시운전.
    $ gopherjs build sample.go && osascript -l JavaScript sample.js
    
    Nashorn을 할 때보다 잘못된 정보가 쉽게 이해되기 때문에 물 필요가 없다고 생각했다go build.

    감상


    Nashorn에 있을 때 전 세계 대상의 대응 덕분에 gopehrjs는 얻지 못했다.
    고퍼군의 3D 대상을 이렇게 꾸르륵꾸르륵 만들 수 있을 정도로 만들어야 한다고 생각합니다.
    아무도 필요 없는 기사일 거라고 생각해요.
    감사합니다.

    좋은 웹페이지 즐겨찾기