- 1. BaggageをREST/gRPC/SQSで伝播できるようにした話
- 2. docker compose 初心者によるハンズオン形式備忘録
- 3. 【Terraform】VPCエンドポイントの設定で service_name が取得できなかった場合、service から組み立てられる件
- 4. goで画像の色調変換の処理を行う
- 5. 【Go】リリース直後の自作モジュールをgo getしてくれない問題について
- 6. [Go] 構造体の変換と比較
- 7. DockerでGoのAPIサーバーを立てる
- 8. Go言語を始めたい方へ ~ Hello World から ゴルーチン まで ~
- 9. Oracleを使うGoアプリのコンテナ化メモ(最終回)
- 10. Oracleを使うGoアプリのコンテナ化メモ(挫折編)
- 11. Raspberry pi で BME280 を使用する (Golang)
- 12. Go言語 : キュー(Queue)
- 13. 【Golang】数値をコンマ区切りで出力する【1000桁単位のカンマ区切りフォーマット出力】
- 14. 【Golang】文字間の複数ホワイトスペースを削除して1つのスペースに置き換える関数
- 15. プログラミング言語Go アウトプット(4章)
- 16. Go強化月間~開発する上で知っておくべき知見を共有しよう~ 結果発表?
- 17. Go Moduleって何
- 18. Goで2つのスライスから共通要素を取得したいときはgolang-setをつかおう
- 19. Ory Kratosをセルフデプロイ&SSO設定(GitHub)
- 20. PostGISベクトルタイルサーバーの比較: tegola/martin/pg_tileserv
BaggageをREST/gRPC/SQSで伝播できるようにした話
## はじめに
[Kyash](https://www.kyash.co/)でサーバサイドのエンジニアをしているhirobeです。Kyashでは30ほどのマイクロサービスを運用しており、マイクロサービス間ではREST/gRPCでの同期通信やSQSを介した非同期通信をしています。
マイクロサービスを運用していると[Context Propagation](https://opentelemetry.io/docs/concepts/signals/traces/#context-propagation)という単語を聞く機会があると思います。
Context Propagationとは、マイクロサービスをまたがって情報を紐付けすることを可能にする仕組みを指します。[^1]
Context Propagationによって実現できることとしてまず挙げるべきは[Tracing](https://opentelemetry.io/docs/concepts/observability-primer/#distributed-traces)でしょう。
Datadog、New Relicなど
docker compose 初心者によるハンズオン形式備忘録
## この記事について
シンプルな構成のコンテナネットワークを作りながら学ぶ`docker compose`のハンズオンです。
現場で自チームが担当している複数のマイクロサービス(MS)が他のMSに依存していて、手元で気軽に業務シナリオをテスト出来ないのはよくある状況だと思います。
そこで、複数コンテナをポートフォワードで他のMSに接続しつつ手元で動作させる`docker-compose.yml`を用意しよう、と言う動機で調べたことをハンズオン形式でまとめました。以下のような人(つまり自分)が対象です
– docker を触ったことがある
– `docker compose`の存在は知っている
– Dockerfile, docker-compose.yml を書く度に一日中ググってる
– dockerのネットワークについて何も知らない
– docker関連はリファレンスを読んでもイマイチ頭に入らない
– 手元にgolangが入っている (サーバのモックをGoで書くため。他言語でも構わない)## そもそも Docker とは?
勉強したのでせっかくなので備忘
【Terraform】VPCエンドポイントの設定で service_name が取得できなかった場合、service から組み立てられる件
# はじめに
こちらのモジュールをつかって、VPCエンドポイントを作成する際、`service_name`を渡さなくても、自動で設定されます
https://github.com/terraform-aws-modules/terraform-aws-vpc/tree/master/modules/vpc-endpoints
“`tf
module “endpoints” {
source = “terraform-aws-modules/vpc/aws//modules/vpc-endpoints”vpc_id = “vpc-12345678”
security_group_ids = [“sg-12345678”]endpoints = {
s3 = {
# interface endpoint
service = “s3”
tags = { Name = “s3-vpc-endpoint” }
},
}tag
goで画像の色調変換の処理を行う
# はじめに
こんにちは、icemint0828です。
今回は自作パッケージの紹介も兼ねて、goでの画像の色調変換の処理の方法を紹介します。## 動作環境
go 1.18.3## 使用パッケージ
* icemint0828/imgedit
画像の色調変換の処理に使用しています。
画像ファイルの拡張子の変換にも使用しています。https://github.com/icemint0828/imgedit
## インストール
“`shell
$ go get github.com/icemint0828/imgedit@v1.6.0
“`# 画像の色調変換の処理
“`main.go
package mainimport (
“github.com/icemint0828/imgedit”
)func main() {
// FileConverter
fc, _, err := imgedit.NewFileConverter(“srcImage.png”)
if err != nil {
panic(err)
}
/
【Go】リリース直後の自作モジュールをgo getしてくれない問題について
# 経緯
先日Goで開発を行なっていた所、
自作したモジュールのプログラムを修正して更新しようとしました。しかし、
最新のコミットのモジュールを**go get**しようとしても、
一向に**go.mod**のバージョンが書き変わりません。`go env GOPATH`
で本体の場所を確認。
↓
コードを確認
↓
やっぱりプログラム変わっていない。。# 試した事
`go clean -modcache`
でモジュールをクリア
↓
対象のモジュールを**go get**し直し
↓
修正前のモジュールを取得してきているようで、
変化なし。。`@latest`を付けてもダメ❌
`@HEAD`でもダメ❌
`go get -u`でもダメ❌
`go install`でもダメ❌
で暗礁に乗り上げてしまっていました。# 原因
調べていると、
proxyがモジュールの新規リリースを認識していない事が原因だと判明。※明確な公式のソースは未確認です。
※個人ブログのtipsにより確認しました。
(記事下にリンクあり)# 解決する為にやった事
対象のモジュールの最新のバージョンを確
[Go] 構造体の変換と比較
Goの構造体間で変換できる条件と比較できる条件について書きます。
## 構造体の変換について
Goの構造体の変換はフィールドの名・型・順番・数が一致していることが前提で変換することができます。例えば以下の様に, AとBでは構造体間の変換が可能です。
“`go
package mainimport “fmt”
type A struct {
aa int
bb int
}type B struct {
aa int
bb int
}func main() {
a := A{
aa: 1,
bb: 2,
}
var b B
b = B(a) // 変換可能
fmt.Println(b) //=> {1 2}
}
“`逆に以下の様に、フィールド名が異なる・フィールドの型が異なる・フィールドの順番が異なる・フィールドの数が異なる、等の状態だと変換することができないです。
“`go
package maintype A struct {
aa int
bb int
}type DifferentFieldName struct
DockerでGoのAPIサーバーを立てる
# はじめに
DockerでGoのAPIサーバーを立てるDockerFileを作成しました。
調べたこと、DockerFileについて調べたことをまとめます。[入門Docker 学習メモ](https://qiita.com/bear05/items/302de545018948b5c9c7)
後の実践# 基礎知識の補足
### ビルドコンテキスト(build context)
>docker buildコマンドを実行したときの、カレントなワーキングディレクトリのこと[Dockerfile 記述のベストプラクティス](https://matsuand.github.io/docs.docker.jp.onthefly/develop/develop-images/dockerfile_best-practices/)
### Dockerデーモン
Docker Engineの一部。
Docker EngineはDocker CLI、Docker Engine API、 Dockerデーモンで構成されている。
イメージのビルドやコンテナの起動を行ってくれるもの。
> Doc
Go言語を始めたい方へ ~ Hello World から ゴルーチン まで ~
![gopher_fiveyears.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2173896/d6a4258e-a9cb-91f2-b29d-04617034515b.jpeg)
## 概要
本記事は、Go言語を始めたい方に対して、Go言語開発者として抑えておきたい『 1〜10 +α 』をまとめたものである。
初心者はもちろん、中級者の方の基本振り返り用としても活用して頂けることを期待している。## How to Go言語
### HelloWorld
https://qiita.com/GL-Kageyama/items/8b012d078e484100ec85### スライス
https://qiita.com/GL-Kageyama/items/46cd77f71ef6b03e7816### マップ
https://qiita.com/GL-Kageyama/items/f753e3b807d1894e88a4### 構造体
https://qiita.com/GL-Kag
Oracleを使うGoアプリのコンテナ化メモ(最終回)
https://qiita.com/yuuman/items/9f988a9cf4b6dcf4a969
続きます
# 6. mattn/go-oci8 ⇒ sijms/go-ora への変更
結局`mattn/go-oci8`がOracle提供のOracle Instant Clientに依存していることがすべの原因なので、`mattn/go-oci8`からOracle Instant Clientに依存していないGoのみで実装した`sijms/go-ora`に変更することにします。https://github.com/sijms/go-ora
書き直したコードは下記となります。
“`main.go
package mainimport (
“database/sql”
“log”_ “github.com/sijms/go-ora/v2”
)var (
VERSION = “default”
REVISION = “dev”
)func main() {
log.Printf(“Version:%s, Revision:%s”, VER
Oracleを使うGoアプリのコンテナ化メモ(挫折編)
https://qiita.com/yuuman/items/09f6d3e43e96de0a5096
続きます。
# 4. アプリのDockerイメージ化
前回作成したサンプルのGoアプリをコンテナ化して実行できることを確認します。## 4.1 Dockerfileの準備
まずはアプリビルド用のDockerfileをベースイメージ`golang:1.18.5`で作成します。“`dockerfile:Dockerfile
FROM golang:1.18.5WORKDIR /workspace
ENV ORACLE_URL=https://download.oracle.com/otn_software/linux/instantclient/217000/
ENV BASIC_ZIP=instantclient-basic-linux.x64-21.7.0.0.0dbru.zip
ENV SDK_ZIP=instantclient-sdk-linux.x64-21.7.0.0.0dbru.zipENV PKG_CONFIG_PATH=/usr/lib/pkg
Raspberry pi で BME280 を使用する (Golang)
# はじめに
Raspberry pi にて、
温度、湿度、気圧を測定できる環境を構築することを目的とする。
BME280の基本部分のみを使用する。追記:2022/10/10
Appソースの一部を修正# 使用機材
raspi : raspberry pi 4 (4GB)
sensor : bme280 (GYBMEP)“`
$ cat /etc/debian_version
> 10.13$ go version
> go version go1.11.6 linux/arm
“`# i2c 準備
i2c 系ライブラリのインストール
“`
sudo apt install i2c-tools
“`raspberry pi 側の i2c の Enabe
“`
sudo raspi-config
“`
3 Interface Option
P5 I2C
Yes
OK
Finish
の順再起動(不要かも)
“`
sudo reboot
“`
# i2c 確認
“`
sudo i2cdetect -l
>i2c-1 i2c bcm2835 (i2c
Go言語 : キュー(Queue)
## キュー(Queue)
キューとは、入ってきたデータを順番に格納し、先に格納したデータから順に取り出すデータ構造。
先入れ先出し(FIFO:First-In First-Out)方式のデータ構造とも呼ばれる。## ライブラリ
今回使用したライブラリは、 “go-datastructures”.
https://github.com/Workiva/go-datastructures“go-datastructures”ライブラリのキューには、複数の型の値が入れられる。
インストール用コマンド
$ go get -u github.com/Workiva/go-datastructures/…## コード
“`Go
package mainimport (
“fmt”
“strconv”“github.com/Workiva/go-datastructures/queue”
)func main() {
// キューの作成
var queueObj queue.Queue
// 現在のキューの値 : []// キューへ値の追加
q
【Golang】数値をコンマ区切りで出力する【1000桁単位のカンマ区切りフォーマット出力】
> Go 言語(以下 Golang)で `int(1000)` —> `”1,000″` と[コンマ](https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%9E)区切りでフォーマット出力したい。
>
> しかし、`fmt` パッケージには専用の関数がなさげ。どうしよう。**独自実装やサードパーティのパッケージを使わずに、golang.org 管轄下のパッケージでフォーマットできないものか**。
[「golang コンマ区切り カンマ区切り 出力 フォーマット」でググる](https://www.google.com/search?q=golang+%E3%82%B3%E3%83%B3%E3%83%9E%E5%8C%BA%E5%88%87%E3%82%8A+%E3%82%AB%E3%83%B3%E3%83%9E%E5%8C%BA%E5%88%87%E3%82%8A+%E5%87%BA%E5%8A%9B+%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88)も、独自実
【Golang】文字間の複数ホワイトスペースを削除して1つのスペースに置き換える関数
> Go 言語(以下 Golang)で、文字列内の文字間にある複数スペースを 1 つに変換したい。
> つまり、**単語間の空白を詰めたい**のです。
>
> “`bash:こういうことがしたい(before–>after)
> ” Hello, World ! ” –> “Hello, World !”
> “Hello,\tWorld ! ” –> “Hello, World !”
> ” \t\n\t Hello,\tWorld\n!\n\t” –> “Hello, World !”
> “`[「golang 文字間の複数スペースを削除する」でググって](https://www.google.com/search?q=golang+%E6%96%87%E5%AD%97%E9%96%93%E3%81%AE%E8%A4%87%E6%95%B0%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%E3%82%92%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B)も、正規表現や `
プログラミング言語Go アウトプット(4章)
# はじめに
これまでの章のアウトプットやプログラミング言語Goのアウトプットをしようと思ったきっかけなどは[こちら](https://qiita.com/AtomuIshida/items/6e05c02a2bd82f1e133d)でまとめているのでぜひ読んで欲しいです。# 4章 コンポジット型
## 重要・学びになったと思うところ
### 配列について
Go言語において、配列は“`固定長“`のため直接使われることが少ない(らしい)
しかし、よく使われる“`スライス“`を理解するためには、配列の理解は必須!配列の宣言
“`go
var a [3]int // 3個の整数の配列
“`for文を使ったインデックと要素の表示・要素のみの表示
“`go
var a [3]int{1,2,3}for i, v := range a {
fmt.Printf(“%d, %d\n”, i, v) // 0,1 1,2 2,3
}for _, v : = range a {
fmt.Printf(“%d\n”, v) // 1,2,3
}
“`
Go強化月間~開発する上で知っておくべき知見を共有しよう~ 結果発表?
こんにちは、Qiita運営スタッフです。
8月15日(月)〜9月16日(金)の期間に開催いたしました記事投稿キャンペーン「Go強化月間~開発する上で知っておくべき知見を共有しよう~」 へのたくさんのご参加、誠にありがとうございます!
今回のイベントでは、合計123名の方にご参加いただき、59本もの記事が投稿されました!
ご投稿いただき誠にありがとうございます?本テーマでは、Goを用いて開発する上で知っておくべきことについて様々な内容を記事にまとめていただきました。
投稿された多くの知見を日々の開発に活かしてみましょう :muscle:今回はご投稿いただいた記事の紹介といいね数のランキングを発表いたします!
## Qiita運営ピックアップ記事
たくさんのご投稿の中から、Qiita運営がおすすめ記事をピックアップしました!
まだ記事を確認できていない方はご参考にしてみてください!### [Go で Stack と FIFO](https://qiita.com/mattn/items/774280a746c82ee63fc0) by [@mattn](https://q
Go Moduleって何
# はじめに
GoでDockerでGoサーバーを立てるとき、改めてGo Moduleって何となったので調べたことをまとめます。# Go Moduleとは
パッケージ(Package)をまとめたもの。パッケージはコードをまとめるもの。すべてのコードはパッケージに入っている。
モジュールがパッケージの依存関係を管理する。
例えばAパッケージの関数がBパッケージの関数を使用するとする。
つまり、AパッケージはBパッケージがないと動かない、AはBに依存しているということになる。補足:goはmainパッケージのmain関数から処理が始まる。
# go mod でGoモジュールを作成する
goプログラムが入っているフォルダ内で、以下のコマンドを実行することでモジュールが作成できる。
ユニークな名前は、公開する場合はgithubのリポジトリ名、
非公開の場合はローカルでユニークな名前を付ける。
ユニークな名前とは、世界(非公開の場合はローカルで)同じモジュール名がないようにすること。
モジュールを参照するとき、同じ名前のモジュールがあったらどっちのモジュールを参照すべきかわからなくなるため
Goで2つのスライスから共通要素を取得したいときはgolang-setをつかおう
# はじめに
Goで2つのスライスの共通要素を取得する際、愚直にループを回すと以下のようになると思います
“`go
package mainimport (
“fmt”
)func ExampleIntersect() {
hoge := []string{“a”, “b”}
fuga := []string{“a”, “b”, “c”}var intersection []string
for _, h := range hoge {
for _, f := range fuga {
if h == f {
intersection = append(intersection, f)
}
}
}fmt.Printf(“%+v\n”, intersection)
// Output:
// [a b]
}
“`# Intersect(other Set[T]) Set[T]
golang-setをつかいます
https://github.com/deckarep/golang-set
`target.Int
Ory Kratosをセルフデプロイ&SSO設定(GitHub)
# はじめに
はじめまして。あかこうです。
最近Ory Kratosを使っているのですが、
その備忘録をここに書きなぐっておきます。本記事でまとめられているのは、以下の内容です。
1. Ory Kratosをセルフホストする
2. Ory KratosにGithubでSSOする(※本番用のデプロイではないです。)
# 1. Ory Kratosをセルフホストする
以下のコマンドで、Ory Kratosをセルフデプロイできます。。
[参考にした公式サイト](https://www.ory.sh/docs/kratos/quickstart#clone-ory-kratos-and-run-it-in-docker)“`sh
git clone https://github.com/ory/kratos
cd kratos
docker-compose -f quickstart.yml -f quickstart-standalone.yml up –build –force-recreate
“`うまく動けば、http://0.0.0.0:4455/
PostGISベクトルタイルサーバーの比較: tegola/martin/pg_tileserv
## 概要
通常、ベクトルタイルはGeoJSONなどから変換した静的なファイルとして配信されることが多いです(.pbfファイルの配信)。パフォーマンスやサーバーのコストの観点ではベストな方法と言えますが、いくつか典型的な問題があります。
– 変換に大きなコストがかかる(特にplanet級の、タイル数が膨大な場合に問題となる)。
– データの追加・削除や更新が苦手そんなわけで、データベースから動的にタイルを配信出来ることはとても重要です。しかしこのアプローチにもパフォーマンス面などで課題があるため、どの方法をなぜ採用するのか、よく検討する必要があります。
FOSS4Gの世界のデータベースといえばPostGISです。世間では、PostGISのテーブルからベクトルタイルを動的に配信するためのアプリケーションがいくつか実装されています。
– [t-rex(Rust)](https://github.com/t-rex-tileserver/t-rex)
– [tegola(Go)](https://github.com/go-spatial/tegola)
– [martin(Ru