技術向上

プログラミングの学び、気になるテクノロジーやビジネストレンドを発信

2018-12-01から1ヶ月間の記事一覧

templateキャッシュ【Go】

Go

htmlのtemplate【Go】 - 技術向上で紹介した下記関数ですと、 同じtemplateであっても、処理毎に毎回templateの読み込みが行われてしまいます。 func renderTemplate(w http.ResponseWriter, templ string, p *Page) { t, _ := template.ParseFiles(templ + …

http.Redirect【Go】

Go

概要 文字通りhttpのredirectを行う機能です。 下記の通り、構文はシンプルです。 http.Redirect(w http.ResponseWriter, r *http.Request, url string, code int) 最後のコードはstatus codeです。「http.StatusFound」のように記述します。 今回の例は、vi…

メソッドの移動【リファクタリング】

状況 メソッドが定義されているクラスの特性(変数やフィールド、オブジェクト)よりも、他のクラスの特性の方が利用・被利用回数が多い 例えば、口座種類ごとに手数料が決まっているにも関わらず、 手数料計算のメソッドが、口座種類ではなく口座クラスに紐…

htmlのtemplate【Go】

Go

概要 http.ResponseWriterにセットする内容量が多い場合(複数行に渡るhtml記述)、 template機能を使うべきです。 事前にhtmlファイル(今回はview.html)を同階層に作成し、 後で示すコードを記述したmain.goを実行します。 htmlファイルの記述 まずはtemp…

http.ListenAndServe【Go】

Go

簡易Web Application作成の流れ データベースではなくtxtファイルを使う、ごくごく簡易的なWeb Applicationを作成していきます。 流れと概要は下記の通りです。 .txtファイルを作成 アクセスするURLは上記ファイルのタイトルを含む http.RequestのPathからフ…

sqlite3【Go】

Go

go-sqlite3を使用します。 事前準備は sqlite3を使用する前の準備【Go】 - 技術向上 に記載しています。 CREATE var DbConnection *sql.DB func main() { DbConnection, err := sql.Open("sqlite3", "./example.sql") // 第1引数はDriver、第2引数はデータベ…

sqlite3を使用する前の準備【Go】

Go

go-sqlite3を使用します。 このpackageはC言語のライブラリをimportするため、 ビルドするには、事前に下記3点が必要になります。 sqliteのインストール Xcodeのインストール gcc(Xcodeのコマンドラインツール)のインストール 最初にsqliteをhomebrewにイ…

問い合わせと更新の分離【リファクタリング】

状況 一つのメソッドが値を返すと同時に、オブジェクトの状態を変更している 対処 メソッドを分離する メリット メソッドの役割が明確になる メソッドの再利用がしやすくなる 「問い合わせによる一時変数の置き換え」への障害が、一つ取り除かれる 手順 元の…

一時変数のインライン化【リファクタリング】

状況 簡単な式によって一度だけ代入される一時変数があり、それが他のリファクタリングの障害になっている var a = getAmount() return (a > 100) 対処 一時変数への参照を式に置き換え、一時変数を削除する メリット 他のリファクタリングの障害を取り除く…

問い合わせによる一時変数の置き換え【リファクタリング】

状況 式の結果を保持するために一時変数を使用している var a = b * c if (a > 100){ ...... } 対処 一時変数を問い合わせメソッドに置き換える メリット 処理をメソッドとしてまとめることで、他のメソッドから利用できる 呼び出し元の記述が簡潔になる 手…

一時変数の分離【リファクタリング】

状況 同じ変数に、一時的に値を保持する目的で、複数回異なる値が代入されている ただし、ループ処理内の変数と、一時変数を集めるための変数(i = i + 式)は対象外 対処 代入の箇所ごとに、一時変数を分離させる メリット 各変数がどんな目的を持っている…

メソッドの抽出【リファクタリング】

状況 あるメソッドの処理がとても長い 同じような処理がメソッドをまたがって書かれている 対処 長い処理部分をメソッドとして切り出す メリット 他のメソッドから使える可能性が増える 上位メソッド(抽出されたメソッドを使う元)の記述が読みやすくなる …

リファクタリングとは【リファクタリング】

学習の進め方 本カテゴリの執筆にあたっては、 こちらの本に則って学習をし、アプトプットしていきます。 books.rakuten.co.jp リファクタリングとは 「システムが示す最終的な結果は変更せずに、内部構造を改善する取り組み」です。 結果が変わってはいけま…

WebSocketとJSON-RPCでリアルタイムAPIデータ取得【Go】

Go

外部package、websocket - GoDoc を使います。 下記は、bitflyerのAPIを使用して、BTCとJPYの取引をリアルタイムに取得する例です。 type JsonRPC2 struct { // JSON-RPCのプロトコルをtype定義 Version string `json:"version"` Method string `json:"metho…

talib【Go】

Go

talib(GitHub - markcheno/go-talib: A pure Go port of TA-Lib (http://ta-lib.org))は、 金融商品の分析に使えるpackageです。 talibの使用に合わせて、quoteもインストールします。 GitHub - markcheno/go-quote: Yahoo finance/Google finance/Coinbas…

ini【Go】

Go

GitHub - go-ini/ini: Package ini provides INI file read and write functionality in Go.を使って、iniファイルの読み込みを行います。 下記iniファイルが同階層にある場合の例です。 config.ini [web] port = 8080 [db] name = stock.sql driver = sqlit…

semaphore(同時実行数制限)【Go】

Go

goroutineの同時実行数を制限することができるpackageです。 golang.orgから提供されていますが、goのmainツリーとは別のプロジェクトになります。 そのため、使用するには、下記コマンドを実行してインストールする必要があります。 $ go get golang.org/x/…

hmac【Go】

Go

hmacとはハッシュメッセージ認証コードの略で、API認証に利用される、認証方式のことです。 クライアントからサーバーへ秘密情報を送信せずに認証できるメリットがあります。 クライアントから送られるハッシュ化された情報を、 クライアントから送られてき…

json【Go】

Go

JSON形式から変数に、変数からJSON形式に変換する方法を見ていきます。 JSONから変数 まずは、JSON形式から変数への変換です。 type Person struct { // 各フィールド名の頭文字は、必ず大文字にする Name string Age int Nicknames []string } func main() …

http【Go】

Go

httpに関する処理を紹介します。 まずは簡単に取得をする例です。 resp, err := http.Get("http://example.com") if err != nil { log.Fatalln(err) } defer resp.Body.Close() // 必ずClose()する。怠ると、デフォルトで有効のkeep-alive要求によってTCPコ…

ioutil【Go】

Go

主にネットワーク関係のファイルの読み書きや、受信内容の読み込みに使用されます。 os系でも同じような結果を取得することはできますが、 利用用途によって、使い分けがされています。 ファイルの読み書きの例です。 content, err := ioutil.ReadFile("main…

context【Go】

Go

処理のキャンセル 時間がかかる処理を持つgoroutine関数に対して 時間制限を持たせる場合などに引数として渡します。 func longProcess( ctx context.Context, c chan string) { // 明示的にすべきとの観点から、contextは第1引数に渡すべきである、とgodoc…

iota(const内の連番)【Go】

Go

const内で連番を振る時に使用します。 const ( c1 = iota c2 = iota c3 = iota ) func main() { fmt.Println(c1, c2, c3) // 0 1 2 3 } constの性質を利用できるため、iotaは一度の記述でも問題ありません。 const ( c1 = iota c2 c3 ) func main() { fmt.Pr…

sort【Go】

Go

スライスの並び替えをすることができます。 intやstringなど対象の型によって、記述方法が異なります。 s := []string{"ai", "hy", "bg", "rc"} i := []int{1, 44, 100, 56, 89, 2} type st struct { // 後でstructのスライスに要素を追加しない場合は、[]st…

regex(正規表現)【Go】

Go

regex(正規表現)を扱うpackage、regexpを見ていきます。 match, _ := regexp.MatchString("([a-zA-Z0-9]+)le", "apple") // 第2引数に第1引数の正規表現文字列が含まれるかを、bool値で返す fmt.Println(match) 上記方法と同じ結果を返すのがこちらです。 …

time【Go】

Go

標準package、timeの使い方になります。 t := time.Now() // 現在時刻を取得 fmt.Println(t.Hour(), t.Day(), t.Month(), t.Year()) // 欲しい情報のみを取得 fmt.Println(t.Format(time.RFC3339)) // RFC3339型にフォーマット t.Format(time.RFC3339)は、特…

godocでローカルドキュメント【Go】

Go

godocの起動 ローカル環境のドキュメントを閲覧するページを立ち上げることができます。 godocが未インストールの場合は、下記を実行します。 $ go get golang.org/x/tools/cmd/godoc godocがインストールされている状態で、下記を実行します。 $ godoc -htt…

サードパーティによるpackage【Go】

Go

インストール GoDocから、もしくは直接githubで対象のpackageを確認します。 Installに記載されているコマンドを実行します。 今回のpackageはgo-talibです。 $ go get github.com/markcheno/go-talib インストールされたファイルは、 $GOPATH直下の srcフォ…

ユニット(単体)テスト【Go】

Go

テストファイルの作成 テストしたい対象のファイルと同階層に、テストファイルを作成することが推奨されています。 名称は、「<テスト対象のファイル名>_test.go」とします。 作成したファイルに、次のような内容を記述します。 package <package名> import "testing" f</package名>…

Public、Private【Go】

Go

packageを横断した時の変数について、 頭文字が大文字のものはPublicとなり、外部packageから参照が可能に、 頭文字が小文字のものはPrivateとなり、外部packageから参照が不可能になります。 structの場合、Publicにするには、中身の要素も頭文字を大文字に…