Go関連のことを調べてみた2020年07月04日

Go関連のことを調べてみた2020年07月04日

名古屋で開催されいている技術イベント・勉強会

## はじめに
この度、名古屋を離れ、関東へ引っ越すことになりました。名古屋(東海圏)エンジニアを増やして地元を盛り上げていくという夢が叶わなくなってしまいました。

名古屋でもエンジニアコミュニティを盛り上げようと頑張っている企業さんや、エンジニアさんがたくさんいることを多くの人に共有したくこの記事を書いています。

名古屋へのUターンを考えていたり、リモートができるようになり都心を離れようかなぁと考えている人は、ぜひ次の拠点として名古屋を選択に入れる参考にしてみてください。

*以下イベント情報の概要はリンクページから一部引用させていただいています。

## 定期開催編
以下、定期開催されている勉強会です。
##[Yahoo! JAPAN Nagoya](https://yahoo-nagoya.connpass.com/)
主催:Yahoo! JAPAN
概要:ヤフー株式会社の名古屋オフィスで開催するクリエイター向け勉強会コミュニティ。 多種多様なクリエイター同士が交流できる場所として、開発スキルやノウハウについて学びながら、社内外のクリエイターがアウトプット/インプットできる機

元記事を表示

Golang+Docker+herokuで何か作ろうとした話

#記事概要
Golang+Docker+herokuで何か作ろうとしてハマった事とか色々まとめるだけの記事。

## 筆者について
– Golang初見。
– herokuはPHPとRailsで触った事がある。
– Dockerは便利すぎてハマりだしてる。

## 採用したもの
– gin
– Webサーバライブラリ。
– Realize
– ホットリロード。
– 後述。

## リポジトリ
https://github.com/YanaPIIDXer/QiitaLineBot
試行錯誤の経緯とかはここのコミットログを見れば大体分かる・・・かも。
ちなみに今回ブランチ分岐は無しの方向。

# Golangのホットリロード
「コードを書き換えると自動でビルドが走って、後はブラウザを更新するだけ」と言う機能。

## 導入
[Realizeを使ってGoでホットリロードを実現する](https://qiita.com/godgarden/items/f73e4a717f1a27b9a3b0)
上記記事を参考にRealizeを導入。
・・・が、Realize起動時のビルドは走って

元記事を表示

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問題。

Jenkinsで昨日になって急に起き始めた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(ToolLocationNodeP

元記事を表示

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 main

import (
“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を外したら、正常に戻ります。

スクリーンショット 2020-07-01 16.03.26.png

元記事を表示

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 main

import “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 main

import “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

元記事を表示

OTHERカテゴリの最新記事