Author Archives: yoheimiyamoto

angular gae go 開発環境 自動ビルド

設定ファイル変更

angular-gae-app/.angular-cli.json

// 変更前
"outDir": "dist",

// 変更後
"outDir": "../backend/dist",

自動ビルド

angularを更新すると自動で再度ビルドされ、gae backendにdistをコピーしてくれる

ng build --prod --watch

// サブディレクトリにビルドする場合は以下
ng build --prod --deploy-url=/{ディレクトリ名}/ --watch

参考

http://apoc.jp/angular-cli-subdir/

Angular sampleメモ

アクション

src/app/app.component.ts

import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title = 'yohei';
  sayHello() {
    // alert("hello")
    this.title = 'hello!';
  }
}

src/app/app.component.html

<button type="button" name="button" (click)="sayHello()">sayHello

angular 環境構築とデプロイ

インストール

  • Angular
npm install angular
  • クライアント
    https://github.com/angular/angular-cli#installation
npm install -g @angular/cli@1.4.9

アプリケーション構成

$GOPATH/src/github.com/YoheiMiyamoto/angular-gae
├── angular-gae-app
├── gae
├── dist (angular-gae-appから生成する)
├── app.yaml
└── main.go

開発環境で確認

npm install // ライブラリダウンロード
ng serve

リリース

// ビルド
ng build --prod

// gaeにコピー
cp -r  dist ../gae/ 

// goapp deploy

参考

https://qiita.com/nirasan/items/68ccb9808f3739a9c999

zendesk 認証

  • ID
    {メールアドレス}/token
  • PASS
    {APIトークン}

faradayでの実装パターン

@client = Faraday.new(:url => CONFIG_ZENDESK_URL) do |conn|
  conn.request :json
  conn.adapter Faraday.default_adapter
  conn.response :json, :content_type => /\bjson$/
  conn.basic_auth("#{メールアドレス}/token", api_token) // IDとPASSでBasic認証
end

float64 to string

func main() {
    f := 1000000.2
    log.Print(strconv.FormatFloat(f, 'e', -1, 64)) // 1000000.2
    log.Print(strconv.FormatFloat(e, 'e', -1, 64)) // 1.0000002e+06 省略された形
}

小数点 json unmarshal

func main() {
    data := []byte(`{"value":1.000002}`)
    f := struct {
        Value float32 `json:"value"`
    }{}
    json.Unmarshal(data, &f)
    log.Print(f)
}

func test(input string) (output string) {
    output = input + "!" + "\n"
    return
}

gin func 共通化

package app

import (
    "net/http"

    "github.com/gin-gonic/gin"
)

func init() {
    r := gin.Default()
    baseFunc := BaseFunc(baseFunc)
    r.GET("/new", baseFunc.new)
    http.Handle("/", r)
}

// BaseFunc ...
type BaseFunc func(*gin.Context) string

// 共通メソッド
func baseFunc(*gin.Context) string {
    return "hello"
}

func (f BaseFunc) new(c *gin.Context) {
    s := f(c)
    c.String(200, s)
}

gae go パッケージ構成 dotenvについて

フォルダ構成

(project root)
├── app
│   ├── app.yaml
│   ├── key.env
│   └── main.go (userパッケージ呼び出し)
├── models [サービス共通で使うパッケージ]
│   ├── model.go(dotenv初期化)
│   └── user.go
└── vendor

app/main.go

func init() {
    os.Setenv("GO_ENV", "dev")
    err := godotenv.Load("key.env")
    if err != nil {
        log.Fatal("Error loading .env file")
    }
}

models/model.go

func init() {
        // modelsパッケージ単体テストの時のみ、app/key.envを参照する
    if os.Getenv("GO_ENV") != "dev" {
        err := godotenv.Load("../app/key.env")
        if err != nil {
            log.Fatal("Error loading .env file")
        }
    }
}