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

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

今からサービスを考えるなら、SE向けが堅い。少なくとも、男性向けにしよう。

最近、暇で以下のサービスを作った。
https://deau-project.herokuapp.com/

このサービスは、Heroku, React, Go Gin で開発した。

サービスを開始してから、Qiita でブログを始めた。
ブログを始めた次の日のPV, UUが、500弱だった。
9割は、Qiita からである。

以前の記事で書いたが、無料でサービスを開始できる。
ただ、利用者を増やすにはどうしようか考えていた。

無料で広告するなら、Qiita で記事を書くといい。
ちなみに、note でも同じく記事を書いているが、
note からは数人しか来てなかった。

Qiita からのアクセスは、広告に匹敵する。
もし、サービスを考える時に、この事実を知っていたら、SE向け、男性向けにしていただろう。
残念。

作ったサービスはメール送信するサービス。
SEの性かもしれないが、送信までしてくれる人が多い。

もし、あなたがサービスを考えている途中なら、是非、考慮してもらいたい。

元記事を表示

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

元記事を表示

無料で1日でサービスを開始できる時代。ただ、ユーザーをどう増やすか。

最近、暇で以下のサービスを作った。
https://deau-project.herokuapp.com/

3日でサービスを開始した。
こんな感じ。

1日目: 何を作るのか。環境はどうするか。
=> メールで出会うサービスで、Heroku, React, Go Gin に決定してデプロイした。
https://devcenter.heroku.com/articles/getting-started-with-go

2日目: React でデザインから実装。
=> 以下のテンプレートを組み合わせてフォームを実装した。
https://github.com/mui-org/material-ui/tree/master/docs/src/pages/getting-started/templates/album
https://github.com/mui-org/material-ui/tree/master/docs/src/pages/getting-started/templates/sign-in
https://react-hook-form.com/jp/

元記事を表示

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コン

元記事を表示

Rust は流行りそうもないので、Go を使う。

最近、暇で以下のサービスを作った。
https://deau-project.herokuapp.com/

バックエンドには仕事で使ったことがない、Go にした。
勉強してたのは、Rust で、仕事のCSVを分析するシステムを Rust で作ったけど、
この先、使うことがないのでは? と思っている。

以前、Haskell が流行りそうで、だいぶ勉強したけど、今では話題にすらならない。
関数型も、いまいち浸透していない。

流行る言語は、何かしらの手間を無くす。
Ruby が流行ったのは、Rails がフレームワーク使用時の共通作業を無くしたから。
PHP が未だに廃れないのは、WordPress が共通作業を無くしてるから。

Go は流行る。もう流行っている?
理由は学習コストを減らしたから。

今回、Go Gin を使用した、そして、簡単に実装できた。
情報も充分にあった。

Rust でも、情報に関しては充分にある。
ただ、実装時に面倒だなと感じることが多い。
私のように趣味で実装するなら、尚更、面倒に感じる。

Rust が流行るには、組込み系にターゲットを絞るか、
当時の

元記事を表示

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.funnyapp

ios
https://apps.apple.com/jp/app/funny-one/id1515018792

## アプリ側

### ionic

アプリのベースはIonic Frameworkで作成しました。

https://ionicframework.com/

ざっくりいうと、
webview + Angular
にネイティブっぽいリッチな見た目

元記事を表示

go修行14日目 ユニットテストとか

## testing

“`
└── mylib
├── human.go
├── math.go
├── math_test.go
“`

### testされるファイル

“`golang
package mylib

func Average(s []int) int {
total := 0
for _, i := range s {
total += i
}
return int(total / len(s))
}

“`

### testするファイル

– `3`が期待される

“`golang

package mylib

import “testing”

func TestAverage(t *testing.T) {
v := Average([]int{1, 2, 3, 4, 5})
if v != 3 {
t.Error(“Expected 3, got”, v)
}
}
“`

### run test

– vscodeから

![image.png](https://qiita-image-s

元記事を表示

Goのはじめかた

# はじめに
この記事ではローカルにGoの環境を構築しHello Worldを表示するまでのメモを記載してます。
数年サーバサイドはPHPを触っていて、静的言語には無縁でしたがそろそろPHP以外の言語にチャレンジしてみたいというところと、あまり趣味がないの始めてみることにしました。

# 環境
MacOS 10.15
Go1.14.4
Homebrew 2.4.2

# Go Install
インストールはHomebrewを使えば非常にシンプルです。

“`
$ brew update
$ brew install go
“`
インストールされているかversionを表示させ確認しましょう。

“`
$ go version
“`
# コード実行
コード実行も非常に簡単です。
まずgoファイルを作成します。

“`
$ touch main.go
“`

その後以下を`main.go`に記載します。

“`go
package main

import “fmt”

func main() {
fmt.Println(“HelloWorld”)
}
“`

こちらで

元記事を表示

cobra-cmder で Go の CLI を簡単に作る

## 概要

Go 言語における CLI アプリ作成で一番使われる定番のライブラリといえば [spf13/cobra](https://github.com/spf13/cobra) でしょう。 Hugo や Kubernetes といった著名なプロジェクトでも cobra を使っているそうです。

しかしながら自分の場合、フラグの値を格納するのにグローバル変数を使ったり、初期化で `init()` を使ったりという cobra の流儀が気に入らず、これまで利用を敬遠してきました。一番問題だと考えているのはユニットテストの記述が困難であることです。

もちろん cobra でもグローバル変数や `init()` を一切使わず構造体のフィールドやメソッドだけで構成することは可能ですが、その場合 [cobra コマンド (コードジェネレータ)](https://github.com/spf13/cobra/blob/master/cobra/README.md) の支援はなく、すべて手で書く必要があります。

先日より、上記の問題点を解消しようと取り組んだところ、簡単かつエレガントな co

元記事を表示

OTHERカテゴリの最新記事