- 1. Golang における配列とスライスのコピー時の違い
- 2. Laravel eloquentのtoArrayのソースを読む(goのdatabase/sqlと比較してみる)
- 3. [GCP]CloudBuild + CloudKMS + GitHubでタグプッシュデプロイを実現する(ほぼハンズオン)
- 4. DynamoDB+Goでmapのデータを取得する
- 5. 【Go言語初心者】EC2インスタンス作成〜Vscodeで「hello go」するまで
- 6. リアルタイムOSコントローラ e-RT3 (Goから制御編)
- 7. GO 小数第N切り捨て
- 8. Goの演習「Exercise: Loops and Functions」をやってみた
- 9. Golang + Docker + RDB ユニットテスト実行時のローカルのホスト名の問題
- 10. Cloud Run Admin APIでサービスを取得する時の注意点
- 11. Go Gin爆速入門 (REST API)
- 12. カフェでプログラミングしてる風(でも何もやってない)Goコード版
- 13. DockerのTTYって何?
- 14. kongのカスタムプラグイン(Go)の作り方
- 15. [エラー] Golang-migrationを使っていて 「Dirty database version 2. Fix and force version.」が出た時の対処法
- 16. DynamoDBのテーブル設計&Goでの実装プラクティス〜GSI Overloading編
- 17. raspiにスマートリモコン&メディアプレイヤーをのせてみた⑧
- 18. raspiにスマートリモコン&メディアプレイヤーをのせてみた⑦
- 19. raspiにスマートリモコン&メディアプレイヤーをのせてみた⑥
- 20. raspiにスマートリモコン&メディアプレイヤーをのせてみた⑤
Golang における配列とスライスのコピー時の違い
# Golang における配列とスライスのコピー時の違い
今回、私が配列とスライスを使用した時、そもそも配列とスライスの違いを意識せず使っていたため挙動を理解できていなかった経験からメモとして残しておく。
### では、仮にこういう問題を考えてみましょう
例えば、複数人で使うツール開発をしているとき、それぞれのユーザがそれぞれのデータを保持するために配列もしくはスライスを使う必要性があるとします。
ここで、それぞれのデータを共有して使いたいと考え、配列もしくはスライスを別の配列もしくはスライスにコピーして使用したいと考えました。
コピーしたデータを書き換えた際に、コピー元である他人のデータが勝手に書き変わったりそうでなかったりと不規則に影響が出てしまいました。果たしてそれは何故でしょうか。# 実験
先程のシチュエーションを再現して考察してみましょう。
要素にする構造体
今回の説明で使用する構造体は以下の通りに定義されています。 配列(array)とスライス(slice),TestData型です。配列とスライスで比較しやすいように構造体にします。“`Go:struct
Laravel eloquentのtoArrayのソースを読む(goのdatabase/sqlと比較してみる)
# Laravelのeloquentに悩まされる
業務でLaravelを触っています。
個人では最近はGoやNextjs(Typescript)、少し前まではDjangoをよく触っていました。
LaravelはDjangoと比べてもコードの自動生成が圧倒的に充実しており便利である反面、型がゆるゆる過ぎて変なところでつまづき時折腹が立ちます。あと、フレームワークとして大きすぎるかななんて思ったりもしてます。Laravel歴3ヶ月弱の自分がeloquentを使ってDBからデータを引っ張ってきてtoArrayした際に予期せぬ型で返すことがありました。
**なんだコイツ**と思いつつ謎を放置したままいるのも嫌だったのでソースコードを見てみようと思いました。ということでEloquentのtoArrayのソースコードを読み解いていこうと思います。
### toArrayの定義はこちらです
https://github.com/illuminate/database/blob/master/Eloquent/Model.php#L1345“`php
/**
* C
[GCP]CloudBuild + CloudKMS + GitHubでタグプッシュデプロイを実現する(ほぼハンズオン)
## やりたいこと
– `GoogleCloudBuild`を利用
– ソースコードは`GitHub`で管理
– `GitHub`のリポジトリにタグ`Push`→`GoogleAppEngine`にデプロイ
– `CloudBuild⇆GitHub`のSSH鍵は`GoogleKeyManagementService`を利用
![GAE+CB+KMS+GitHub.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309580/31fef7b7-4a39-b416-66f4-7746c8be2cdb.jpeg “ToBe-Architecture”)## 前提
– GCP(Google Cloud Platform)のアカウントを所持している
– GCPにプロジェクトを作成できる
– GitHubのアカウントを所持している
– サンプルで利用する言語はGo言語
– 投稿者の環境はMacOS(intel, Catalina)## サンプルのディレクトリ構成
“`terminal:cloudbuild-
DynamoDB+Goでmapのデータを取得する
# はじめに
GoでDynamoDBのmapのデータを取りたいときのメモ。
単純な構成は結構ググったら出てくるが、複雑な構成はググっても出てこず、試行錯誤した。## TL;DR
* DBの要素にmapが入っている場合 -> [パターン1](#パターン1)
* mapがネストしている場合 -> [パターン2](#パターン2)
* リストの中にmapがある場合 -> [パターン3](#パターン3)
* mapを表現する構造体を定義する。
* mapを表現した構造体は、struct tagにキー名をつける。
* 各構造体のフィールドはエクスポートする。## DBの構成
こんな構成。mapがネストしていたり、リストの中にmapが入っていたり。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423952/d910f3c9-5d8b-e7a8-b6cb-820c0ba1cd72.png)
aws cliでget-itemするとこんな感じ。
“`shell
22:14:30 d
【Go言語初心者】EC2インスタンス作成〜Vscodeで「hello go」するまで
Go言語の勉強をするなら、
いっそのこと、インスタンス上で勉強をしたいと思いhello goを出すまでできたので、
備忘録として記録しております。## 環境
・MacOS
・Visual Studio Code
・Amazon linux2
・Go[1.インスタンスの作成](#1-はじめに)
[2.EC2にSSH接続する](#2-EC2にSSH接続する)
[3.golangインストール](#3-golangインストール)
[4.vscodeでリモート接続する](#4-vscodeでリモート接続する)
[5.参考](#5-参考)##1. EC2インスタンスの作成
AWSの画面は日々変わっていきますが、操作自体はそんなに変わらないと思います。
![スクリーンショット 2021-05-29 20.13.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700627/1ca4c898-8e53-4e74-c301-8a584b7c27c6.png)まず、オレンジボタンの**「インスタンス
リアルタイムOSコントローラ e-RT3 (Goから制御編)
#1.はじめに
横河電機の「[リアルタイムOSコントローラ(e-RT3)](https://www.yokogawa.co.jp/solutions/products-platforms/control-system/real-time-os-controller/)」における入出力モジュールの制御を、Go言語から制御する方法をまとめてみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145581/2f2932c0-83b7-f87f-73c9-e1a9696e09c9.png)目標としては、[前回記事](https://qiita.com/myasu/items/97ac50e968430487d5b5)のように、Rustから出力リレーの操作、入力の検知ができることとしています。
**リアルタイムOSコントローラ e-RT3 関連記事**
|||
|:–|:–|
|[第1回](https://qiita.com/myasu/items/057ce9ec2fa391
GO 小数第N切り捨て
## 小数第3切り捨て
“`go
hoge := 87.689
fmt.Println(math.Floor(hoge*100)/100)
“`## 小数第2切り捨て
“`go
hoge := 87.689
fmt.Println(math.Floor(hoge*10)/10)
“`https://play.golang.org/p/HrGrlzDpUMa
参照
https://yourbasic.org/golang/round-float-2-decimal-places/
Goの演習「Exercise: Loops and Functions」をやってみた
## 課題との出会い
GOのチュートリアルを進めていたら突如として課題が出てきました。
それがこちら
![スクリーンショット 2021-05-27 23.15.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/282722/0699c634-d173-a293-2f79-1ea8cb81cf7e.png)URL:https://go-tour-jp.appspot.com/flowcontrol/8
どうやら引数にある数値の平方根に近づけてみよ!とのこと
ニュートン法に関してはよくわからないのでスルーします。## 実際にやってみた
“`
package mainimport (
“fmt”
“math”
)// 引数の平方根に近づける
func Sqrt(x float64) float64 {
z := 1.0// 10回繰り返すことが要件となっている
for i:=1; i<=10; i++ { // 記載通りの計算式 z -= (z*z - x) /
Golang + Docker + RDB ユニットテスト実行時のローカルのホスト名の問題
# Golang + Docker + RDB ユニットテスト実行時のローカルのホスト名の問題
最近 Golang が楽しくなってきた、今回は、Golang + Docker + RDB で Golangのユニットテストで RDB 等にレコードを挿入したいときに、実行時のローカルのホスト名を読みかえなければならない問題に関して、自動化を図る方法があったので、そのメモ。
# 何がしたいのか
Golang の test コードから config.ReadConfig() を呼び出すことで設定の読みかえが可能になります。
Docker 等を活用している際にローカルと仮想環境内で接続先を切り替えたいときに使用します。# 各種ステップ
書き換えたいファイル
“`yaml:config.yml
db:
host: host.docker.internal #ここをlocalhostに書き換えたい
name: title
password: password
user: user
“`今までは手動でいちいち切り替えていたが、あまりにも効率が悪すぎるので、test
Cloud Run Admin APIでサービスを取得する時の注意点
特定のCloud Runサービスの情報を取得しようとした時に思いっきり嵌ったので備忘録を残しておきます。
まず始めにCloud Runを操作するAPIは以下に用意されています。
https://github.com/googleapis/google-api-go-client
上記ライブラリを読むと以下メソッドでCloud Runのサービス情報を取得できることが分かります。
“`go
// Get: Get information about a service.
//
// – name: The name of the service to retrieve. For Cloud Run (fully
// managed), replace {namespace_id} with the project ID or number.
func (r *NamespacesServicesService) Get(name string) *NamespacesServicesGetCall {
c := &NamespacesServicesGetCall{s:
Go Gin爆速入門 (REST API)
## はじめに
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407956/098fbaef-c096-599e-c163-aced79706c75.png)
Goで圧倒的人気を誇るWebフレームワークのGinを使ってREST APIを爆速で構築するための入門です。
コードはginのREADMEドキュメントを元にしています。https://github.com/gin-gonic/gin
### Ginの導入方法
“`bash
mkdir test-app && cd test-app
go mod init test-app
go get -u github.com/gin-gonic/gin
“`## Quick Start
`/pin`というエンドポイントにアクセスすると`pon`と表示する簡単な例“`main.go
package mainimport “github.com/gin-gonic/gin”
func main() {
r :=
カフェでプログラミングしてる風(でも何もやってない)Goコード版
[カフェでプログラミングしてる風(でも何もやってない)Java(クソ)コード](https://qiita.com/3S_Laboo/items/660883a0184dabaea65b) からインスパイアされたGo版です。
詳細は [ソースコード](https://github.com/e10ulen/sandbox/blob/master/fakeStatusChange/main.go) です。
## なんで作った?
習作(Goを書くのが久々)のため、なんか面白そうなのないかなって思って書きました。## カフェでッターンはかっこいい
かっこいい## ソースコードはこうなってる
(もっといい書き方があるはず)“`go:fakeStatusChange.go
package mainimport (
“fmt”
“math/rand”
“time”
)func main() {
fakeStatusChange()
}func fakeStatusChange() {
sentence := 50
countup := 0
var dela
DockerのTTYって何?
## 概要
docker-composeでよくコンテナ永続させるためにttyをtrueに設定してコンテナが正常終了しないようにしている記事があるが、ttyってそもそもなんなの、なんでコンテナが正常終了しないの?というところを忘備録として残しておきます。## コンテナが正常終了する例としてGoコンテナをみてみる
“`yml
version: “3.8”
services:
go-app:
build:
context: .
dockerfile: ./docker/go/Dockerfile
volumes:
– ./src/sample-go-fluentd:/go/src
ports:
– 10881:8080
working_dir: /go/src# ここをfalseに
tty: false
“`
“`bash
$ docker-compose up
# …省略
go-app_1 exited with code 0
“`
こんな感じログが吐かれてコンテナが停
kongのカスタムプラグイン(Go)の作り方
## はじめに
kongのカスタムプラグインについて、色々ハマったので、メモ。
情報自体はそれなりにあるのだが、kongバージョンが古いときの情報が多く、最新(2.4.1)ではちゃんと動作しなかったので、まとめておく。## TL;DR
* コンパイルするコンテナイメージ(kong/go-plugin-tool)のバージョンは新しいものにしておく。そうしないとコンパイルが通らなかった。
* kong自体はdockerで構築したので、Dockerfile内で`/usr/local/bin`に生成したバイナリをコピーしておく。
* 起動時の環境変数は以下を設定する。今回はプラグインを`key-checker`とした。|変数名|値|
|—|—|
|KONG_PLUGINSERVER_NAMES|key-checker|
|KONG_PLUGINSERVER_KEY_CHECKER_QUERY_CMD|/usr/local/bin/key-checker -dump
|KONG_PLUGINS|bundled, key-checker|## 作業の流れ
最初はバージョンと
[エラー] Golang-migrationを使っていて 「Dirty database version 2. Fix and force version.」が出た時の対処法
# この記事で説明すること
`golang-migrate`ライブラリを使っていてデータベースのマイグレーションをしたときに“`
error: Dirty database version 1. Fix and force version.
“`
というエラーが出た時の対処法# 環境
– golang 1.15
– MySQL# 解決法
`migrate force` コマンドを使う“`
$ migrate -database ‘mysql://root:golang@tcp(mysql:3306)/golang_db?charset=utf8&parseTime=true&loc=Asia%2FTokyo’ -path migrations/ ${VERSION}
“`-database以降はDBのURLを指定
-pathでマイグレーションファイルの場所指定
${VERSION}の部分はエラーで出ているVERSIONを数字で指定。# エラーが起きた原因
テーブルを構成を編集したくて、`migrate down`コマンドを使った後に、マイグレーションフ
DynamoDBのテーブル設計&Goでの実装プラクティス〜GSI Overloading編
業務ではRDBを使うことが多く、DynamoDBにマッチしたテーブル設計・実装をこれまであまり考えてこなかったため、記事としてアウトプットしながら勉強していきたいと思います。
GSI Overloading、隣接関係のリスト設計、転置インデックス、Composite Key、Sparse Indexesあたりに触れていければと思います。今回は、GSI Overloading編。なお、DynamoDBの基本的な用語については理解されている前提とします。## GSI Overloadingとは?
直訳すると「GSIの多重定義で」、**一つのGSIに複数の検索条件を持たせる**ための手法です。
これだけ聞いても、**どのような場面で使うのか**、**どのようなメリットがあるのか**がわかりにくいと思うので、それぞれ説明します。### どのような場面で使うのか
**テーブルが持つ複数のカラムに対して検索をかけたい時**に使用します。全く特殊なケースではなく、むしろかなり多くのケースで当てはまります。
例えば以下のようなイベントテーブルがあったときに、IDだけでなく、他のカラム(イベント
raspiにスマートリモコン&メディアプレイヤーをのせてみた⑧
# はじめに
こちらのブラウザ側の解説です。# 概要
### 以下の機能を提供
– ウェブサーバとwebSocketで接続してリアルタイム通信
– vueLoaderでコンパイルなしでvueコンポーネントを提供# ファイル構成
***vue.jsなどの外部js,cssについてオフラインでも使えるようにcdnではなくlocalから取得するようにしています***| No | ファイル名 | 概要 |
| — | —————— | —- |
| 1 | index.html | トップページ |
| 2 | js/index.js | メインjs |
| 3 | home.vue | ルートコンポーネント。4のXXX.vueを切り替え |
| 4 | vue/room/XXX.vue | 部屋コンポーネント。5のYYY.vueを切り替え|
| 5 | vue/device/YYY.vue | 家電コンポ
raspiにスマートリモコン&メディアプレイヤーをのせてみた⑦
# はじめに
こちらのデバイスサーバの解説です。# 概要
### デバイスサーバで以下の機能を提供
– 受信した家電操作情報(エアコンの気温など)をIR送信サーバに転送
– 共有設定されている家電情報をウェブサーバに送信# サーバ内の各層の機能概要
### infrastructure
– grpc
– 他の機能との共通コンテンツの受信や送信
– device
– 家電操作情報と赤外線データの関連付け
– 赤外線データを追加・修正する場合はここのマップ変数に対して行う### adapter
共通設計参照### useCase
共通設計参照### do
raspiにスマートリモコン&メディアプレイヤーをのせてみた⑥
# はじめに
こちらのメディアサーバの解説です。# 概要
### メディアサーバで以下の機能を提供
– ウェブサーバからのメディア操作をvlcに反映
– vlcからの再生位置をウェブサーバに転送
– ファイルサーバからのファイル管理情報をvlcに反映# サーバ内の各層の機能概要
### infrastructure
– grpc
– 他の機能との共通コンテンツの受信や送信
– media
– vlcとgoのvlcラッパーで構成
– grpcから受信したメディア操作の送信はチャンネルを使う### adapter
共通設計参照### useCase
共通設計参
raspiにスマートリモコン&メディアプレイヤーをのせてみた⑤
# はじめに
こちらのファイルサーバの解説です。# 概要
### ファイルサーバで以下の機能を提供
– ウェブサーバからのバイナリ(ビデオファイル)を受信しファイル保存
– ビデオファイル一覧をウェブサーバ・メディアサーバに送信# サーバ内の各層の機能概要
### infrastructure
– grpc
– 他の機能との共通コンテンツの受信や送信
– バイナリ(wsでpostされたファイル)をstreamで受信
– file
– 起動時にjsonファイルからファイル一覧を読み込みインメモリ化
– インメモリで管理しているファイル一覧をjsonに保存
– バイナリをmp4形式保存
– mp4からanimeGIFを作成### adapter
共通設計参照### useCase
<