- 1. GO言語学習メモ ~ Embeddedについて~ GOには継承がない
- 2. go修行15日目 サードパーティ製パッケージを使う
- 3. fluentdでdockerコンテナのログをファイルごとに出し分けてみたお話
- 4. [LINE Bot] LIFFとリッチメニューでも管理画面が作りたい! 3 -認証編-
- 5. Jenkinsのgolang crawler問題。
- 6. DockerでGoを試す環境を作った話
- 7. Goでサーバーとクライアントを実装してみた。
- 8. WSL2+VSCode+Docker Desktop
- 9. GO言語 複数のマップをマージ する
- 10. goland 設定go ModulesのEnable Vendoring Support automaticllyを外さないと
- 11. Jenkinsのビルドが突然java.net.MalformedURLExceptionで落ちるようになった
- 12. goの構造体のJSONのtagでめちゃくちゃ時間を溶かした
- 13. Goにおけるnewと宣言のみの違い
- 14. gin gormでテーブル操作(少し改良版)
- 15. CircleCIからCloudRunへ自動的にデプロイする
- 16. CloudRunでRedis(Memorystore)を利用する
- 17. Goの実行環境をDockerで構築しようと際に発生した「no Go files in /go/src/github.com/go-playground/localesエラー」を解決
- 18. MacにGo言語開発環境をインストールする
- 19. WindowsにGo言語開発環境をインストールする
- 20. Ionic & golangでリアルタイム大喜利アプリを作りました
GO言語学習メモ ~ Embeddedについて~ GOには継承がない
# はじめに
完全初心者で、GO言語の学習を進めています。
学んだ事のメモとし記事を投稿します。理解できていない部分が、多くありますが随時編集しますのでお手柔らかにお願いします。
##継承について再確認
あるクラスに定義されたメソッドを、別の新規クラスで利用できるようにした上でクラスを定義することを継承と言う。クラスの継承には、親クラスと子クラスの関係があり、元となるクラスを親クラス、親クラスのメソッドを引き継ぎ新しく作成するクラスを子クラスと呼ぶ。
**簡単なイメージ図**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/622835/50863e3d-4810-d445-ddd5-86de2e23f23d.png)ずっとrubyを使っていので、rubyでイメージ式
“`ruby:ruby
class 子クラス名 < 親クラス名 end ``` #Goで継承みたいな事する GO言語にはクラスがないので、上に書いた様な事ができないって事。 Goで継承で継
go修行15日目 サードパーティ製パッケージを使う
## サードパーティパッケージのインストール
– 株価分析のためのパッケージhttps://github.com/markcheno/go-talib
### インストール
“`
go get github.com/markcheno/go-talib
go get github.com/markcheno/go-quote
“`### インストールされる場所
“`
PS C:\Users\yuta\go\src\github.com> ls .\markcheno\ディレクトリ: C:\Users\yuta\go\src\github.com\markcheno
Mode LastWriteTime Length Name
—- ————- —— —-
d—– 2020/07/03 8:45 go-talib“`
#
fluentdでdockerコンテナのログをファイルごとに出し分けてみたお話
# fluentdとは
fluentdとはログ収集ツールです。
様々な形式のinputからログを収集でき、それを必要に応じて整形・加工してログ出力できます。# 環境
– OS:debian 10.3
– docker:19.03.11
– docker-compose:1.16.1
– fluentd:1.3.2# 今回の目標
今回の目標はサーバーのログを標準出力からファイル出力へ切り替えることです。
さらに、ファイル出力も全てのログを出力するログファイルと、エラーログのみを出力するエラーログファイルの2種類作成していきます。# fluentdの設定ファイルについて
デフォルトでは、 `/fluentd/etc/fluent.conf` が読み込まれます。## tag
fluentdでは**ログをtagというもので管理**していきます。
このtagを使って設定を任意のログのみに適用できたりします。## ディレクティブ
**fluentdの設定はディレクティブと呼ばれるもので設定**していきます。
ディレクティブには下記のようなものがあります。– source:
[LINE Bot] LIFFとリッチメニューでも管理画面が作りたい! 3 -認証編-
この記事はこの記事の続きです
[[LINE Bot] LIFFとリッチメニューでも管理画面が作りたい! 2 -リッチメニュー切替-](https://qiita.com/alivelime/items/2d16441153af9c444619)# ここまでのまとめ
さて、ここまでで「認証用のLINEグループを作る」「グループへの招待・退出」でメニューを切り替える、というところまでできました。
あとはLIFFで作った管理画面に飛ばせばOKですが、当然そのさきのAPIでも認証をかけないといけません。#### 構成図
ちなみに構成は次のようになっています。– LIFF : ユーザ用メニューと管理者メニュー (React)
– bot : linebotのロジック(Go)
– line_api : LIFFからLINEの認証などのLINE固有の処理をするAPI (Go)
– omoinas : アプリケーションのメインロジックやmodel・repository層など (Rust)![image.png](https://qiita-image-store.s3.ap-north
Jenkinsのgolang crawler問題。
昨日になって急に起き始めたMalformedURLException
“`
java.net.MalformedURLException: no protocol: /dl/go1.14.2.linux-amd64.tar.gz
at java.net.URL.(URL.java:593)
at java.net.URL.(URL.java:490)
at java.net.URL.(URL.java:439)
at org.jenkinsci.plugins.golang.GolangInstaller.performInstallation(GolangInstaller.java:57)
at hudson.tools.InstallerTranslator.getToolHome(InstallerTranslator.java:72)
at hudson.tools.ToolLocationNodeProperty.getToolHome(ToolLocationNodeProperty.
DockerでGoを試す環境を作った話
# はじめに
[A Tour of Go](https://go-tour-jp.appspot.com/welcome/1)をやろうと思ったんだけど、手元で試したいということがあったので、Dockerで開発環境を構築# 完成図
“`
.
├── Dockerfile
├── docker-compose.yml
└── src
└── hello.go
“`# 作成
準備するものは以下の通り。
“`
.
├── Dockerfile
└── docker-compose.yml
“`ファイルの中身
“`.Dockerfile:Dockerfile
FROM golang:latest
WORKDIR /go/src/
“`“`docker-compose.yml
version: “3”
services:
go:
build: .
tty: true
volumes:
– ./src:/go/src
“`docker-composeを利用した理由は、マウントしたかったから。
# うごかす
Goでサーバーとクライアントを実装してみた。
こんにちは。そうはぶです。
[「GoでAPIを使ってみたら心が3回くらい折れた話。」](https://qiita.com/souhub/items/0c5efd7fb6f7f3e12372)で書かせていただいたように一度API利用で挫折しました。再挑戦するときにHTTPの基礎を学んで、Goでサーバーとクライアントを実装してリクエストとレスポンスを体感してからだとAPIの理解が非常にスムーズになったので、Goによるサーバーとクライアントの実装をご紹介させてください。##エコーサーバーの実装
とりあえずエコーサーバーを作ります。
これは通信内容をそのままコンソールに表示してくれます。
僕もでしたが、内容がよくわからなくてもとりあえずコピペしていただければ大丈夫です。“`go:server.go
package mainimport (
“fmt”
“log”
“net/http”
“net/http/httputil”
)func handler(w http.ResponseWriter, r *http.Request) {
dump, err := ht
WSL2+VSCode+Docker Desktop
windows10とVSCodeでWindows上のフォルダで作業をしながらDockerを利用したデバッグ開発ができるようになったので設定までの流れを書き留めます。
windowsの環境を開発ツールのインストールで汚すことがなくなりスッキリし、ワークフォルダ毎に開発環境を切り替えることができるようになります。# WSL2を使用するためWindows10 2004にアップグレード (既にWindows10 2004の場合はスキップ)
https://www.microsoft.com/ja-jp/software-download/windows10
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641711/9f6b78a1-d283-6b50-8faa-ddf1bcf8b0cc.png)
# Linuxカーネルを更新する
https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-kernel
# PowerShellを開いて既
GO言語 複数のマップをマージ する
逆引きGolangには2つのマップをマージするやり方が書いてあったが、
今回は2つ以上のマップをマージする可変長引数関数を作ってみた。
これにより、マップを幾つでもマージしてくれる。“`golang
func merge(m …map[string]interface{}) map[string]interface{} {
ans := make(map[string]interface{}, 0)for _, c := range m {
for k, v := range c {
ans[k] = v
}
}
return ans
}
“`## 参考文献
逆引きGolang (https://ashitani.jp/golangtips/tips_map.html#map_Merge)
goland 設定go ModulesのEnable Vendoring Support automaticllyを外さないと
###問題###
JetBrain goland中に
テストコードを実行する時に以下のエラーが発生されました。“`
./somefile.go:3:8: cannot find package “.” in:
/project/vendor/somepackage
“`パッケージ先がgo moduleに指定されたあるはずですが、vendorに指定されて、vendorにパーケージがないから、見つからないエラーが発生されます。
###解決法###
設定
->go
->go Modules
->Enable Vendoring Support automaticllyを外したら、正常に戻ります。
Jenkinsのビルドが突然java.net.MalformedURLExceptionで落ちるようになった
# はじめに
JenkinsでGoで書かれたソースをビルドしているのですが、そのジョブが突然落ちるようになったので解決策を記載します。
この問題は、記載している時点(2020/07/01)で既に修正済み(リリース待ち)の状態です。
リリースまでの一時しのぎとして対応していますのでご注意ください。# エラー内容
昨日(2020/06/30)あたりから、突然Jenkinsが以下の例外を吐いて落ちるようになりました。
“`
java.net.MalformedURLException: no protocol: /dl/go1.11.2.linux-amd64.tar.gz
at java.net.URL.(URL.java:593)
at java.net.URL.(URL.java:490)
at java.net.URL.(URL.java:439)
at org.jenkinsci.plugins.golang.GolangInstaller.performInstallation(GolangInstaller.java:5
goの構造体のJSONのtagでめちゃくちゃ時間を溶かした
# goの構造体のJSONのtagでめちゃくちゃ時間を溶かした
題目の通りです。2時間くらい溶かしました。## なにでそんなに溶かしたのか
jsonのTagでそんなに溶かすことないだろ、と。溶かした原因はこれです“`go:example.go
type JsonValue struct {
foo string `json:”foo”`
bar string `json:”bar, omitempty”`
}
“`お分かり頂けただろうか?この心霊現象。。
わからない人は僕と一緒に2時間溶かすかも知れない恐ろしいものです。。“`go
bar string `json:”bar, omitempty”`
“`
スペースですね。カンマの後ろのスペースです。時間を溶かしたのはこれエラー吐かないからです。
stringなら空文字が入っていたときに `json.Marshal` すると `bar` は省略されるはずなのに空文字が入っちゃっておかしいなぁ〜ってなります。
このスペースは入れてはいけません。正しくはこう“`go
bar string `json:”
Goにおけるnewと宣言のみの違い
# newで初期化することとvarで宣言する違い
## newで初期化
newで初期化すると以下のようなコードになります。“`
var i *int = new(int)
“`これを出力すると
“`
package mainimport “fmt”
func main() {
var i *int = new(int)
//もしくはi := new(int)
fmt.Printf(“%T %v\n”, i, *i) → *int 0
}“`
となってnewでは`ポインタ型`を返します。
構造体だったりはポインタで使用されることが多いのでnewを使うことが多い。
“`
type Vertex struct{
X,Y int
}
….
v := new(Vertex)
//v := &Vertex{}と同じ
“`## varで宣言のみ
varで宣言すると以下のようなコードになります。“`
var i2 *int
“`これを出力すると
“`
package mainimport “fmt”
func mai
gin gormでテーブル操作(少し改良版)
以前[gin gormでテーブル操作](https://qiita.com/ogurasousui/items/dcd84fd96d2e8797a5e8)で一連のテーブル操作をやってみた
しかし、どうもBDのコネクションは保持したままの方が良いようなので、修正してみる
ついでに[こちら](https://qiita.com/ogurasousui/items/b7a49d78615c7c97b911)と同じGo Modules管理に変更している以下雑にコードをのせているだけなので、何が変わったかは↑の記事と見比べてください(すまん
## docker-compose.yml
“`docker-compose.yml
services:
app:
container_name: gin_app
image: golang:1.12.0-alpine
volumes:
– .:/go/src/app
command: >
sh -c “cd /go/src/app &&
apk update &&
CircleCIからCloudRunへ自動的にデプロイする
この記事は、CircleCIを使って、Google Cloud Platform(GCP)のサービスであるCloudRunへシステムをデプロイをする方法をまとめたものです。
CircleCIを使えばgithubにpushしたソースコードを自動的にテスト、ビルド、デプロイすることができます。
なおこの記事内では、githubとCircleCIの連携方法やCircleCIの利用方法については省略しています。# ポイント
・ CircleCIのCloudRun用Orbsを利用する
・ GCPに接続するための接続情報を環境変数に設定する## 構成
全体のイメージはこんな感じ。![名称未設定ファイル.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528040/c4667344-02d5-f253-5364-229ceb038745.png)
GitHubの構成はこんな感じ。
言語はGo1.13です。“`tex:github
/.circleci
|-config.yml
/sampl
CloudRunでRedis(Memorystore)を利用する
この記事は、Google Cloud Platform(GCP)のサービスであるCloudRunでRedisを利用するための方法をまとめたものです。
CloudRundもサーバレスVPCアクセスが利用可能になったので、CloudRunからMemorystore(Redis)を利用することが可能になっています。
CluodRunでできることがどんどん増えていくのは嬉しいですね。## ポイント
– フルマネージドなインメモリサービスであるMemorystore(Redis,Memcached)を利用する
– Memorystoreを利用するにはプライベートアドレスでの接続が必要
– GAEやCloudRunから接続する場合はサーバーレスVPCアクセスを利用する
※GAEやCloudRunはマネージドサービスなのでプライベートアドレスが付与されない## 手順
1. サーバーレスVPCを作成
2. MemoryStoreを作成
3. CloudRunを作成### 1. サーバーレスVPCを作成
CloudRunからアクセスするためのネットワークを作成します。GCPコン
Goの実行環境をDockerで構築しようと際に発生した「no Go files in /go/src/github.com/go-playground/localesエラー」を解決
## はじめに
“`
root@xxxxxxxxxxxx:/go# go get github.com/go-playground/locales
“`
いつものようにパッケージをインストールしていたら次のエラーが発生。“`
can’t load package: package github.com/go-playground/locales: no Go files in /go/src/github.com/go-playground/locales
“`![スクリーンショット 2020-06-30 14.49.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581607/3c3660a1-e5ac-796c-1dce-0a0d56316ff4.png)
ここのlocalesフォルダの中に何もファイルなんてねーよ!って言われてるんですね。そんなこと言われても。。。
## 解決方法
go getをしても同じエラーが吐かれるだけだったので、試しにlocalesフォルダを削
MacにGo言語開発環境をインストールする
# 最終更新日
2020年6月30日
検証を行ったmacOSのバージョンは下記です。
– macOS Catalina 10.15.5
インストールするもののバージョンは下記です。
– Go SDK 1.14.4
– Visual Studio CodeのGo Extension(Visual Studio Code自体のインストールは別記事にて → [MacにVisual Studio Code(VSCode)をインストールする](https://qiita.com/suke_masa/items/9579eb7fab7b42dea673))
– Git(別記事にて → [MacにGitをインストールする](https://qiita.com/suke_masa/items/4bed855628f7414293f8))> この記事が古くなった場合、下記の手順は最新のインストール手順とは異なっている可能性があります。
# Go SDK
## インストール
(1) https://golang.org/dl/ にアクセスしてください。(2) go1.14.4.darw
WindowsにGo言語開発環境をインストールする
# 最終更新日
2020年6月30日
検証を行ったWindows 10のバージョンは下記です。
– Windows 10 Home 2004 19041.329インストールするもののバージョンは下記です。
– Go SDK 1.14.4
– Visual Studio CodeのGo Extension(Visual Studio Code自体のインストールは別記事にて → [WindowsにVisual Studio Codeをインストールする](https://qiita.com/suke_masa/items/91fddf0728a290b72fc4))
– Git(別記事にて → [WindowsにGit Bashをインストールする](https://qiita.com/suke_masa/items/404f06309bb32ca6c9c5))> この記事が古くなった場合、下記の手順は最新のインストール手順とは異なっている可能性があります。
# Go SDK
## インストール
(1) https://golang.org/dl/ にアクセスしてください。(
Ionic & golangでリアルタイム大喜利アプリを作りました
アプリのリリースまでなんとか漕ぎ着けたので、宣伝も兼ねて使ったフレームワークについて紹介します。
### どんなアプリか
写真で一言アプリです。
特徴的なのはリアルタイムで集まった人たちが、お互いに投稿し合ったボケを評価し合う部分です。マッチングした最大10名が、制限時間内に一つのお題写真に対してボケを投稿します。
投稿はお互いに評価することができ、一定数イイネを集めると一本獲得になります。こちらからダウンロード可能です。
よかったら遊んでみてください。android
https://play.google.com/store/apps/details?id=jp.co.popbits.funnyappios
https://apps.apple.com/jp/app/funny-one/id1515018792## アプリ側
### ionic
アプリのベースはIonic Frameworkで作成しました。
https://ionicframework.com/
ざっくりいうと、
webview + Angular
にネイティブっぽいリッチな見た目