Go 언어로 오프라인에서도 사용할 수 있는 WEB 매뉴얼을 만들어 보았다

8436 단어 5cli


모두 keita69sawada입니다.

Go 언어로 CLI로 툴을 만들 때 사용자에게 그림을 사용하여 설명을 하면 툴의 사용법을 알기 쉽다고 생각하지만, 아스키아트라면 한계가 있고 뭔가 좋은 방법이 없을까 생각했을 때에 , 'A Tour of GO'와 ​​같이 오프라인으로 브라우저에 올 수 없습니까?

그럼, 「Go 언어로 오프라인에서도 사용할 수 있는 WEB 매뉴얼을 만들어 보자!」라고
성게는이 기사입니다.

대상 독자


  • CLI를 만들고 도움말에 그림을 사용하고 싶은 사람

  • 전제 조건


  • Go 언어 개발 환경이 갖추어져있는 사람

  • 절차



    1. 우선 움직여 보는 사람은 이쪽



    명령
    git clone https://github.com/keita69/qiita-go-bt.git
    cd qiita-go-bt
    setup.bat
    go-assets-builder -o ./src/bt/bindata.go data
    go install bt
    bt.exe
    ブラウザが開いてhttp://localhost:3000/dataで"hello world !"が表示される
    

    2. 디렉토리 구조(발췌)를 본다



    디렉토리 구조(발췌)
    git cloneした場所
    │  setup.bat ・・・ Go環境セットアップ用
    ├─bin
    │      bt.exe ・・・ コンパイルした結果の実行ファイル
    │      go-assets-builder.exe ・・・ バイナリ(data配下のファイル)をGOソースに変換するツール
    ├─data
    │      index.html ・・・ マニュアル(今回はただのhello world)
    ├─pkg
    └─src
        ├─bt
        │      bindata.go ・・・ go-asserts-builderで生成されたGOソース
        │      bt.go ・・・ 作成したGOソース
    

    3. setup.bat 살펴보기



    setup.bat
    set GOPATH=%~dp0 ・・・ GOPATHを設定
    set PATH=%PATH%;%GOPATH%bin ・・・ GO実行ファイルにPATHを通す
    
    go get -u github.com/jessevdk/go-assets-builder ・・・ アセット(jpeg,htmlなどをGo言語に変換したもの)を作成するツール 
    go get -u github.com/skratchdot/open-golang/open ・・・ ブラウザを起動するパッケージ
    

    4. GO 소스를 살펴보기



    4-1. bt.go 소스를 살펴보기



    이것만으로 좋다!

    bt.go
    package main
    
    import (
        "net/http"
    
        "github.com/skratchdot/open-golang/open"
    )
    
    func init() {
        // 起動したらブラウザで開く
        open.Run(`http://localhost:3000/data`)
    }
    
    func main() {
        http.Handle("/", http.FileServer(Assets)) ★
        http.ListenAndServe(":3000", nil)
    }
    

    4-2. go-assets-builder로 만든 GO 소스 (bindata.go)를 살펴보십시오.


    var Assets = assets.NewFileSystem 로 정의된 Assets 는, 상기의 ★부분으로 불려 가고 있다.

    bindata.go
    package main
    
    import (
        "time"
    
        "github.com/jessevdk/go-assets"
    )
    
    var _Assets3b4e08d4c718d774efe29935a4a6842efab4f09b = "hello world !"
    
    // Assets returns go-assets FileSystem
    var Assets = assets.NewFileSystem(map[string][]string{"/": []string{"data"}, "/data": []string{"index.html"}}, map[string]*assets.File{
        "/": &assets.File{
            Path:     "/",
            FileMode: 0x800001ff,
            Mtime:    time.Unix(1513003236, 1513003236763661900),
            Data:     nil,
        }, "/data": &assets.File{
            Path:     "/data",
            FileMode: 0x800001ff,
            Mtime:    time.Unix(1513003195, 1513003195337290400),
            Data:     nil,
        }, "/data/index.html": &assets.File{
            Path:     "/data/index.html",
            FileMode: 0x1b6,
            Mtime:    time.Unix(1513003195, 1513003195337290400),
            Data:     []byte(_Assets3b4e08d4c718d774efe29935a4a6842efab4f09b),
        }}, "")
    

    4. 실행 결과





    요약



    go-asset-builder를 사용하면 jpeg, html 등을 포함한 자산을 간단히 One 바이너리로 작성할 수 있었다. 이번에는 "hello world!"를 표시할 뿐이지만, 브라우저에서 표시한 입력 필드와 버튼을 준비해, 접수한 리퀘스트를 처리(API로 외부 서비스를 호출하는 등)도 할 수 있을 것 같기 때문에 시험해 보고 싶다.

    그리고, 소스의 코멘트에 // go:generate go-asset-builder xxx 라고 기술해 두면, go generate 커멘드로 “go-asset-builder xxx”가 실행되는 구조가 GO 언어에 있다. 그러나 이것이 잘 작동하지 않았습니다 (작성 된 소스 코드가 컴파일 오류가됩니다). 어째서?

    참고 URL


  • 모두의 Go 언어 [현장에서 사용할 수 있는 실천 테크닉]
    h tp // 기효. jp/보오 k/2016/978ー4ー7741ー8392ー3
  • 좋은 웹페이지 즐겨찾기