- 投稿日:2020-07-28T22:37:37+09:00
[Go言語] 初心者必見シリーズ: マップ(Map)
マップ(Map)
Golangではハッシュテーブル(hash table)のことを
map
と呼びます。キーと値の組を複数個格納し、キーに対応する値をすばやく参照するためのデータ構造です。
定義方法
方法1
- 構文
変数名 := map[型]型{初期値1, ..., 初期値n}
- 例
languages := map[string]string{ "go":"golang", "rb":"ruby", "js":"javascript", }方法2
- 構文
変数名 := make(map[型]型, 容量)
- 例
languages := make(map[string]string) languages["go"] = "golang" languages["rb"] = "ruby" languages["js"] = "javascript"要素の挿入と更新
- 要素の挿入や更新:
languages := map[string]string{} languages["go"] = "golang" // "go"キーが存在する場合は、valueが "golang" に更新され、 // 存在しない場合は、("go", "golang") という Key-ValueのペアがMapに挿入される。
- 要素の取得:
elem, ok := languages["go"] // "go"キーが存在する場合は、 ok == true // 存在しない場合は、ok == false要素の走査 (iteration)
range
でMapを走査できる。for key, value := range languages{ ... }注意: GoのMapのiterationは、
要素がランダムに取得されるため、実行するたびに異なる結果になります。
要素の衝突
複数の異なるキーが同じバケットに入ることを衝突(collision)と呼びます。
GoのMapは衝突を起こしたキー同士をポインターでつなぎます。(連鎖法)
動画
https://www.youtube.com/watch?v=HQuIjHZqNxI
元記事
- 投稿日:2020-07-28T19:37:30+09:00
Goでの構造体埋め込みと、埋め込んだ構造体に構造体を代入する
- 投稿日:2020-07-28T14:45:38+09:00
vscodeコンテナー環境でgo rename出来ない
- 投稿日:2020-07-28T01:40:10+09:00
Go Gin Docker AWSで完璧なTodoアプリを作る
こんにちは。
今回は最近流行りのGoの勉強ついでにQiitaを書いてみようと思います。普段はReactでのフロント開発やRailsでAPI開発などをしています。
社内でもRailsからGoへの書き換えが始まっている中で、Goってどうやって書くの?インフラわからないんだけどデプロイしてみたい!って軽い気持ちでサンプルアプリを作ってみたいと思います。
意外とローカルで動くものを作って終わりな記事が多いので今回はデプロイまで行うことをゴールとして開発していきます!!使用技術
- go
- gin
- go modules
- mysql
- docker
- gorm
- AWS
参考文献
Go / Gin で超簡単なWebアプリを作る
DockerでGoの開発環境を構築する早速やっていこーう(環境構築)
(ここではgoのインストールは省略しまーす。)
まずやることはディレクトリの作成!mkdir perfect_todo cd perfect_todo
そして今回はgoのライブラリーを管理するためにgo modというものを使っていきます。これはどのライブラリーを入れたかを管理してくれるので、docker化した時や共同開発の時にとても便利らしい。。。
go mod init perfect_todo
これで
go.mod
とgo.sum
というファイルが生成されたかと思います。そしたら次にgoのフレームワークであるginをインストールしていきたいと思います。
go get github.com/gin-gonic/gin
go.mod
をみてみてください。これでgithub.com/gin-gonic/gin
が追加されていたらインストールが完了しています!それが成功したら
touch main.go
でmain.goのファイルを作ります。このファイルが実行されて、ここでインポートされているファイルが読み込まれていくので、アプリケーションの肝となるファイルです。
main.gopackage main import ( "github.cogom/gin-gonic/gin" ) func main() { router := gin.Default() router.LoadHTMLGlob("templates/*.html") router.GET("/", func(ctx *gin.Context){ ctx.HTML(200, "index.html", gin.H{}) }) router.Run() }ここではginを使って、ルーティングを設定しています。/にアクセスが来たらindex.htmlを表示するといった具合に設定をしています。
そしてそのindex.htmlがなくては表示させるファイルがないのでindex.htmlを作成します!
templatesディレクトリーを作ってその下にindex.htmlを作成します
templates/index.html<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Sample App</title> </head> <body> <h1>Hello World!!!</h1> </body> </html>これでお待ちかねのHello Worldの準備が完了です!
go run main.go
これを実行して
localhost:8080
にいくと。。。!?!?ででーーーーーん!!
Hell World!何回みてもこの感動は良いですよねえ。
Docker化
ここではDockerの説明は省きますが、Dockerにしておくと環境の違いで苦しんだりすることがないのでDocker化しておきます。
touch Dockerfile
で
Dockerfile
を作成します。FROM golang:latest RUN mkdir /go/src/app WORKDIR /go/src/app ADD . /go/src/app VOLUME /go/src/app RUN go mod download EXPOSE 8080 CMD "go" "run" "main.go"途中の
go mod download
でさっき作成したgo.mod
から自動でライブラリーを読み込んでくれると!便利ですね。
あとは今までやってきたことをDockerにやってもらっているだけです!では実行していきましょう!
docker build -t perfect_todo . docker run -it -p 8080:8080 perfect_todo
これでさっき実行した時と同じ挙動になったら成功です!!