- 0.0.1. GoとGORMを使った勉強(3)
- 0.0.2. GoとGORMを使った勉強(2)
- 0.0.3. AWS SAM+Lambda+Go+WSLではじめるサーバーレスアプリケーション開発
- 0.0.4. やっぱりzstdのほうがよかった GoでZIP内部のBZIP2を解凍
- 0.0.5. 5分で学ぶ気になるプログラミング言語(Go編)
- 0.0.6. GAE+Go(2nd-Gen)API実装のサンプル
- 0.0.7. GoとGORMを使った勉強(1)
- 0.0.8. Ginでサーバーを立ち上げてJSONのメッセージを表示
- 0.0.9. AWSの強い権限のクレデンシャル管理から転生した件
- 0.0.10. HomebrewでのGoの環境構築(macOS)
- 1. 環境
- 2. Goのインストール
- 3. GOROOTを設定
- 4. GOPATHの設定
- 4.0.1. Go+gRPCでシンプルなEchoサーバ(令和最新版)
- 4.0.2. Dockerを使ってGolangでHello,World!(超初心者向け)
- 4.0.3. [Go] MVCから始めて辿り着いたぼくのレイヤードアーキテクチャ
- 4.0.4. Goのsortパッケージでよく使う関数
- 4.0.5. go: cannot find main module, but found|GolangのテストをGitHub Actionsで回した時のエラー
- 4.0.6. [Go] KeyLogWriter (crypto/tls) を使って TLS 通信を Wireshark で復号化する
- 4.0.7. 【Go】Goのwebフレームワークginを使ってHello World(Part1)
- 4.0.8. Go言語で別ディレクトリにある別モジュールを呼び出す方法
- 4.0.9. golangでpostgresを操作する。
- 4.0.10. GolangでWebアプリケーションを作成する
GoとGORMを使った勉強(3)
#概要
・[GoとGORMを使った勉強(2)](https://qiita.com/yamauchikei/items/cb739cc86d8b0a5d851e)の続き ※さらに[続き]()あります(作成中)
・前回まで:ローカル環境でDBに接続してテーブルの情報を画面に表示
今回 :レンタルサーバーで画面表示するための準備#今回すること
・「.envファイル」に接続情報を書き込む
・「controller.go」を書き換える
・main.goをbuildする#.envファイルを作成し接続情報を書き込む
main.go““:root/.env
DB_USER=fuga
DB_PASS=fugapass
DB_HOST=127.0.0.1
DB_NAME=hoge
““#controller.goのDBとの接続する処理の部分を書き換える
「.envファイル」から接続情報を読み込むように「controller.go」を書き換える。
最終的にはサーバー上にサーバー用の「.envファイル」を置いておくことで、コードを書き換えることなく、サーバーとローカル両方で動作す
GoとGORMを使った勉強(2)
#概要
・[GoとGORMを使った勉強(1)](https://qiita.com/yamauchikei/items/59b731d7f2870c04beac)の続き ※さらに[続き](https://qiita.com/yamauchikei/items/5645f18afc48ac39365c)あります
・機能を追加:logを記録
・改善:機能ごとにファイル分け#機能追加(1):logを記録する
func main()のカッコ{}の中に下記を追記。
app.logファイルが自動で作成されこれにlogが記録される。““
file, _ := os.OpenFile(“app.log”, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
defer file.Close()
gin.DefaultWriter = io.MultiWriter(file)
““““golang:main.go
package mainimport (
“io”
“os”“github.com/gin-go
AWS SAM+Lambda+Go+WSLではじめるサーバーレスアプリケーション開発
# 目的
AWS SAM を使って Go 言語でサーバーレスアプリケーションを開発するための、環境構築の手順をまとめます。個人的な備忘録を兼ねているため、必須ではない細かな設定なども記載しています。Lambda でサーバーレスアプリケーションの開発をはじめようと思っている方の参考になれば幸いです。
# 当記事に含まれる内容
当記事に含まれる内容は下記の通りです。ソフトウェアのインストールなどは既にわかりやすい記事があるので、そのリンクを貼っています。
– Hello World アプリケーションについて
– WSL2 の設定
– Docker の設定
– AWS CLI の設定
– Session Manager プラグインの設定
– SAM と Go のインストール
– Ubuntu の環境変数設定の自動化
– VSCode の設定
– SAM プロジェクトの新規作成
– SAM プロジェクトのデプロイ
– AWS コンソールから各サービスを確認# Hello World アプリケーションについて
Hello World アプリケーションは、SAM プロジェクトを新規作
やっぱりzstdのほうがよかった GoでZIP内部のBZIP2を解凍
[![Github](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1646184/0e201e0c-e21f-a715-4353-142b23059ccd.png)](https://github.com/Soliton-Analytics-Team/Go-ZSTD/) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/Soliton-Analytics-Team/Go-ZSTD/blob/main/ZIP_ZSTD.ipynb)
ご覧いただきありがとうございます。[ソリトンシステムズのセキュリティ分析チーム](https://www.soliton-cyber.com/)です。
Google Colaboratoryにアカウントをお持ちの方は、上の「Open in Colab」という青いボタンを押せば直接notebookを
5分で学ぶ気になるプログラミング言語(Go編)
※前回の記事はこちらになります。あわせてご覧ください
[5分で学ぶ気になるプログラミング言語(Rust編)](https://qiita.com/kansaizine/items/f17c56ce653e8131c9e8)## 5分で学ぶGo
それでは今回はGoを学んでいきます。5分しかないので急ぎましょうwGoの公式サイトのURLは https://golang.org/ です。
「Go」という単語はググラビリティ的に難がありますが、「Golang」という呼称も結構浸透しているかなと思います。
「ゴー」って、言いやすいので好きですねw 発音で悩まないというのは日本人的には重要かと思います。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/157692/03b7f996-7425-6eca-79ac-314f30358037.png)
Rustでは日本語サイトが提供されていましたが、Goは硬派に英語のみです。ひるまずいきましょうw
Rustでもそうでしたが、Goもファーストビ
GAE+Go(2nd-Gen)API実装のサンプル
こんにちは。みなさんは[Google App Engine](https://cloud.google.com/appengine)(GAE)使っていますか?
フルマネージドでオートスケールでお気に入りのプロダクトなのですが、やや情報が少ないような・・・実戦投入しようと思うと、環境変数の設定や、サービス間認証、はたまたcloud_build.yamlどう書くんだ、など結構詰まるポイントが多いかと思います。
そこで、基本的な部分を実装したGAE+goのAPI実装のサンプルを公開します! これからGAE+Goを始める方のご参考になればと。
## サンプル
[GAE-Go-sample](https://github.com/AkihikoOkubo/GAE-Go-sample)
– GAEスタンダード環境です
– GAEのruntimeはgo116です
– ユーザオブジェクトを登録/取得するだけの簡単なAPIのサンプルです
– Firebaseを使うので、Firebaseのセットアップと、GAEサービスアカウントへの「Firebase管理者」ロールの付与が必要です## ポイ
GoとGORMを使った勉強(1)
#概要
・GoとGORMを使ってDBに接続してテーブルの情報を画面に表示させます。
・[続き](https://qiita.com/yamauchikei/items/cb739cc86d8b0a5d851e)あります。#環境
・DockerでGoの環境構築
`docker run -itd -p 8080:80 golang:latest`#準備
““:Docker
#mysqlの用意
root@df86ed89dfdc:/go# apt update
root@df86ed89dfdc:/go# apt install mariadb-server
root@df86ed89dfdc:/go# service mariadb start#初期設定
root@df86ed89dfdc:~# mysql_secure_installation““
##データの用意
““
#mysqlにログイン
root@3ba225e11191:~# mysql -u root -p#DBを作る
MariaDB [(none)]> create databa
Ginでサーバーを立ち上げてJSONのメッセージを表示
#概要
Ginでサーバーを立ち上げてJSONのメッセージを表示させる。
#環境
・Docker
・MacBook#docker run でgolamgが入ったコンテナを作る。
““
~/d/q/gin_server ❯❯❯ docker run -itd –name gin_server -p 8080:80 golang:latest#コンテナにはいる
~/d/q/gin_server ❯❯❯ docker attach gin_server
““““:Docker
root@1cc8cba550f2:~# cd ../root#Vimをインストールする
root@1cc8cba550f2:~# apt update
root@1cc8cba550f2:~# apt install vim#Vimで空のmain.goを作る
root@1cc8cba550f2:~# vim main.go#ginをダウンロードする
root@1cc8cba550f2:~# go get github.com/gin-gonic/gin
go: down
AWSの強い権限のクレデンシャル管理から転生した件
# クレデンシャルをパスワードみたい使ってない?
開発チームには最低限の権限付けたクレデンシャルを払い出し、その点ではセキュリティは確保しているものの、運用系には**強い権限**を持ち、かつトラブル対応時に**期限が切れないように永続的な権限**を払い出してはいないでしょうか。権限が強いので更新などを所有者に移譲しているため、定期更新なんかしないで使い続けてる管理になりがち・・### これではパスワードと何も変わらない!
**このツールはAWSでのクレデンシャル管理の概念を変えるため作られました**
# 作ったわ!
[![yasutakatou/goCred – GitHub](https://gh-card.dev/repos/yasutakatou/goCred.svg)](https://github.com/yasutakatou/goCred)
詳しくはリポジトリで。[バイナリをダウンロードして即使いたいならこっち](https://github.com/yasutakatou/goCred)
# どんなん?
このツールを使うと・・
– **強い権限を持つ
HomebrewでのGoの環境構築(macOS)
環境
・OS:macOS Big Sur
・シェル:zshGoのインストール
まず、ターミナルでこちらのコマンドを打って、Goをインストールします。
“`
% brew install go
“`GOROOTを設定
GOROOTとはGoのインストールパスです。
自分でインストールディレクトリを変更した場合には、環境変数$GOROOTの設定が必要です。
GOROOTは標準では/usr/local/goですが、homebrewでインストールした場合には/usr/local/opt/go/libexecになります。“`
% go env GOROOT
/usr/local/opt/go/libexec
“`GOPATHの設定
GOPATHはとは外部パッケージのリソースなどが保存されるパスです。
GOPATHを設定しておくとコマンドを実行するときにフルパスを入れずに済みます。
GOROOT同様に、GOPATH以下の/bin/にGoの実行バイナリが配置
Go+gRPCでシンプルなEchoサーバ(令和最新版)
# はじめに
GoのインストールからシンプルなEchoサービスをgRPCで実装するまでの手順。# 各ツールのインストール
## Go
“`
$ wget https://golang.org/dl/go1.17.linux-amd64.tar.gz
$ sudo tar xf go1.17.linux-amd64.tar.gz -C /usr/local
$ echo “GOPATH=${HOME}/go” >>.bashrc
$ echo “PATH=${PATH};/usr/local/go/bin” >>.bashrc
$ source .bashrc
“`## protoc
“`
$ wget https://github.com/protocolbuffers/protobuf/releases/download/v3.18.1/protoc-3.18.1-linux-x86_64.zip
$ unzip -d ${HOME}/.local protoc-3.18.1-linux-x86_64.zip
$ echo “PATH=${PATH};${HOME}/
Dockerを使ってGolangでHello,World!(超初心者向け)
Dockerでgolangを動かしてみます。
Dockerを触ったことがない人でもわかるように意識して書きました。#事前準備
・Dockerのインストールが済んでいること
・Vimの基本的な操作(編集、保存、閉じる)ができること#本題
下記のコマンドを実行します。
docker run -it –name=”任意の名前” -p 8080:80 golang:1.15 bash_**コマンドオプションの意味**_
`-i` :ホストの入力をコンテナの標準出力をつなげる
`-t` :コンテナの標準出力とホストの出力をつなげる
>`-i,-t`オプションを付けないとコンテナの中で入力できない
`-i`オプションと合わせて`-it`と記述可能`–name=” ”` :コンテナ名に任意の名前を付ける #付けなくても動きます
`-p 8080:80` :ポートマッピング
> 書き方:`-p [ホスト側のポート番号]:[コンテナのポート番号]`
`-p 8080:80`で localhost:8080 への接続が、コンテナ内のポート 80 へ送られます。`gola
[Go] MVCから始めて辿り着いたぼくのレイヤードアーキテクチャ
## はじめに
### サマリ
– Goを書くようになってからそろそろ1年が経ちます。
– GoでWeb APIを実装する際の個人的パッケージ構成が定まりつつあるので備忘録を書き連ねます。
– 当初はMVCで実装していました。
– 最終的に**レイヤードアーキテクチャ**を用いたパッケージ構成に落ち着きました[^1]。
– 本稿ではDDD等の文脈は切り離して、**パッケージ構成を責務毎に分割するための取り組みとしてのみ**レイヤ系アーキテクチャを取り扱います。### レイヤ系アーキテクチャとは?
レイヤ構造を持ったアーキテクチャ(クリーン/オニオン/レイヤード…)等を指します。
MVCもレイヤ構造を持ちますが、今回はレイヤ系とは区別して説明いたします。### 記事の内容
– (主に)Web APIを実装する際に採用している個人的アーキテクチャについて説明します。
– まず現在のレイヤードアーキテクチャに至る試行錯誤を話し、その後具体的なコードを交えながら解説します。### 対象読者
– レイヤ系アーキテクチャを理解する最初の一歩が欲しい方向けです。
–
Goのsortパッケージでよく使う関数
## はじめに
Go標準のsortパッケージでは、スライスの並び替えなどをサポートしています。
本記事では、sortパッケージで一般的に利用される関数を紹介していきます。## Ints
int型のスライスを昇順で並び替えます。“`go:go
package mainimport (
“fmt”
“sort”
)func main() {
s := []int{5, 2, 3, 1, 4}
sort.Ints(s)
fmt.Println(s) //=> [1 2 3 4 5]
}
“`
一般的なソート(バブルソート)と比較してみます。“`go:go
package mainimport “fmt”
func main() {
s := []int{5, 2, 3, 1, 4}
for i := 0; i < len(s)-1; i++ { for j := 0; j < len(s)-1-i; j++ { if s[j] > s[j+1] {
s[j], s[j+1] = s[j+1], s[j]
}
}
go: cannot find main module, but found|GolangのテストをGitHub Actionsで回した時のエラー
# 状況
ある書籍のサンプルコードを動かしていたところ遭遇したエラーです。
Golangは触ったこともない状態で進めていたのでモジュールやGoPathなども
理解できていない状態でした。# エラーメッセージ
GitHub ActionsでGolangのテストファイルを実行した時に出たエラーです。“`error.go
go: cannot find main module, but found .git/config in /__w/app-name/app-name
to create a module there, run:
go mod init
Error: Process completed with exit code 1.“`
# 原因
go.modファイルがないことでした。
詳しい原因知っている方いましたらコメントいただけたら嬉しいです。# 解決方法
以下のコマンドでgo.modファイルをプロジェクトディレクトリのルートに生成しpushしたらエラーが消えました。“`go.sh
$ go mod init github.com/examp
[Go] KeyLogWriter (crypto/tls) を使って TLS 通信を Wireshark で復号化する
一般にブラウザや curl で同様に TLS のダンプをしたい時は、`SSLKEYLOGFILE` 環境変数に TLS master secrets 情報を書き出すファイルを指定し、Wireshark などの外部アプリケーションにこのファイルを食わせることで capture した暗号化通信データを復号化し、手元で生の HTTP リクエスト情報 (over TLS) を手軽に解析できることが知られています。
https://please-sleep.cou929.nu/decrypting-tls-traffic-packet-capture.html
https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Key_Log_Format
https://everything.curl.dev/usingcurl/tls/sslkeylogfile
## KeyLogWriter (crypto/tls)
Go でも同様に `crypto/tls` package がサポートしている `KeyLogWriter`
【Go】Goのwebフレームワークginを使ってHello World(Part1)
# 自己紹介
Qiita初投稿なので軽く自己紹介です。
新卒から3年ぐらいはDBA周りを経験してだらだら無駄な時間を過ごしてましたが、
2年前ぐらいにjavaをメインにしたweb系の会社に転職してからようやく自己学習を始めた出遅れ感満載のエンジニアです。# Goを勉強しようと思った背景
注目言語だからちょっと挑戦してみたかったというのもありますが、
平行処理がすごい楽と知人から聞いたのでどんなもんなんだと興味本位で勉強したいと思ったからです。
webフレームワークを使おうと思った理由としては、自身がweb系が得意としているので、主にjava(Spring)との違いが感じやすいかと思ったからです。# 環境
- Mac(M1): BigSur 11.5.2
- Go: go1.17.2 darwin/arm64
- エディタ: GoLand
- DB: MySQL 8.0
- パッケージ管理:Go Modules0
# とりあえずのHello World
ginを追加して“`
go
Go言語で別ディレクトリにある別モジュールを呼び出す方法
# 参考記事
[公式のドキュメント](https://golang.org/doc/tutorial/call-module-code)
golangでpostgresを操作する。
golangでormなしにpostgresを操作する機会があり、色々学びがあったのでまとめ見たいと思います。
# 使用ライブラリ
`github.com/lib/pq`
`database/sql`#配列
postgresには配列型があり、柔軟に複数の値を操作できます。
集約関数から、マッチした値を配列に変換してDISTINCTを掛ければ一意な値の配列が得られたりします(速さは保証しません)。golangで書く場合は以下の通りです。
“`golang
targetIds = []int{400,500}
// queryに配列を埋め込む
db.Query(`SELECT * FROM t WHERE id = ANY($1)`, pq.Array(targetIds))// query結果を配列に変換する
var x []sql.NullInt64
db.QueryRow(`SELECT ARRAY[235, 401]`).Scan(pq.Array(&x))
“``pg.Array`関数でgolangの配列 <-> query を簡単に行えます。
#jso
GolangでWebアプリケーションを作成する
新しい言語の勉強をするにはハンズオンが一番ということで、Golangを使ってCRUDから始めてタスク管理のWebアプリケーションを作成する。
随時新しいキーワードを見つけた際には、調べた情報をまとめていきたい。# 目的
Golangの使い方とWebアプリケーションの実装に関する技術習得# 設計
### 概要
個人やチームで使用するタスク管理Webアプリ### Github
https://github.com/blackmax1886/team_task### データ
| Struct | Field |
|:-:|:-:|
| task | Id
Name
Content
Completed
Deadline
Archived |
| user | Id
Password
|
| team | Id
Users |### 実装したい項目
– 各StructのCRUD
– taskのCRUDに関するAPI
– Googleカレンダーとの連携
– taskのCRUDを自動化するインターフェ