知識のリンク集

技術系アウトプット

Go

GolangでGraphQLのクエリに添付したファイルをS3にアップロードする

GraphQLでファイルデータをアップロード GraphQLサーバーには gqlgen を利用。 gqlgenが提供する型の1つである `Upload` を使う。scalar Upload https://gqlgen.com/reference/scalars/ @graphql.schema type Mutation { uploadFile(file: Upload): String …

Gophercises vol.2 url redirect (YAML / middleware / http-headers)

Go

つくったもの Webリクエストのパスを見て、URL短縮名のようにユーザーを新しいページにリダイレクトするかどうかを判断するhttp.Handlergithub.com 使用したパッケージ "gopkg.in/yaml.v2" yaml.v2 - gopkg.in/yaml.v2YAML: 構造化されたデータを表現するの…

Gophercises vol.1 console quiz (csv / flag / Scanf)

Go

つくったもの CSVファイルから読み取ったクイズの問題データを整形して出力し、 コマンド上からユーザーの入力を受け取り正解数をカウントする。 github.com 使用したパッケージ "encoding/csv" csv - The Go Programming Language"flag" flag - The Go Prog…

A Tour of Go vol.8 (Goroutines)

Go

Goroutines ・軽量なスレッド ・goキーワードに続く関数を新しいスレッド(=goroutine)で実行する ・goroutineが実行されていてもmain()が終了するとプロセスが終了する点は注意 ・Message-passing communication(各プロセスはメッセージを送り合い、内容は書…

A Tour of Go vol.7(Interfaces/Type assertions)

Go

Interfaces ・メソッドの型だけを定義した型 ・オブジェクトの振る舞いを定義する下記の例では Abserをインターフェースとする変数aに対し、Abserで定義しているメソッドAbs()を実装していない型の変数を代入しようとしてエラーになる。 // インターフェース…

A Tour of Go vol.6 (Methods/Receiver)

Go

Methods Goはクラスの仕組みを持たないが型にメソッドを持つことができる。 メソッドは引数を type Vertex struct { X, Y float64 } func (v Vertex) Abs() float64 { return math.Sqrt(v.X+v.X + v.Y*v.Y) } func main() { v := Vertex{3, 4} fmt.Println(v…

A Tour of Go vol.5 (Range / Map)

Go

Range スライスやマップの要素についてindexとあわせて1つずつ返す。 var pow = []int{1, 2, 4, 8, 16, 32, 64, 128} for i, v := range pow { fmt.Printf("index:%d value:%d\n", i, v) }第一引数のindexについては"_"を使うことで破棄することもできる。 …

A Tour of Go vol.4 (Pointer / Array / Slice)

Go

ここから本格的な学び Pointer 値のメモリのアドレスのこと。 ポインターの型 変数variableのポインタは *variable型 ゼロ値はnil &オペレータ オペレータ(=演算子) オペランド(=被演算子) Goでは&オペレーターがあり、オペランドへのポインタを引き出す。 i…

A Tour of Go vol.3

Go

For Continued 初期化と後処理ステートメントは省略可能。 for ; sum < 1000; { sum += sum } whileはないので繰り返し処理は全てforで記述が統一される。 if func pow(x, n, lim float64) float64 { if v := math.Pow(x, n); v < lim { return v } return l…

martiniからnegroniが生まれた背景とリフレクション

Go

弊社ではGoのWebフレームワークの中でnegroniを採用している。 negroni net/httpと直接結びついて動作する、ミドルウェアにフォーカスされたライブラリ。 セッション管理したりユーザ認証の際に利用されることが多い。negorniでは `gin`というコマンドを使う…

A Tour of Go vol.2

Go

variable goの変数宣言のステートメントは "var"またはvarを省略して下記のような書き方もできる k := 3 types 論理値型(ゼロ値:false) ・bool文字列型(ゼロ値:"") ・string数値型(ゼロ値:0) ・unit ・uint8 符号なし 8-ビット 整数 (0 to 255) ・uint16 符…

SQLインジェクションとplaceholder機能を使った対応処理

Go

SQLインジェクション r.GET("/1/users/:Id"上記のAPIをWebで叩くとき、WebではURLがブラウザの上部に表示され、下記のようにURLが表示される。 "https://domain.jp/users/id"パラメーター部分(id)はURLを直接書き換えることで別の値に置き換えることができる…

A Tour of Go vol.1

Go

Packages goのプログラムはパッケージで構成され、mainパッケージから開始される。 ソースコードの冒頭で自身を表すパッケージを記載し、 続いてインポートするパッケージを記述する。 package main import { "fmt" "net/http" "tmhub/helpers" } 自社のソー…

GoのMVC

Go

最近業務でGoの修正を行う機会があり、クライアント側しか触ってこなかった自分には未知のことがたくさんあった。 まずは大枠としてMVCから学ぶ。 MVCはレイヤーアーキテクチャという設計手法に基づいている。 レイヤーアーキテクチャ アプリケーションを責…