- 1. 今からサービスを考えるなら、SE向けが堅い。少なくとも、男性向けにしよう。
- 2. Goでサーバーとクライアントを実装してみた。
- 3. WSL2+VSCode+Docker Desktop
- 4. GO言語 複数のマップをマージ する
- 5. goland 設定go ModulesのEnable Vendoring Support automaticllyを外さないと
- 6. Jenkinsのビルドが突然java.net.MalformedURLExceptionで落ちるようになった
- 7. 無料で1日でサービスを開始できる時代。ただ、ユーザーをどう増やすか。
- 8. goの構造体のJSONのtagでめちゃくちゃ時間を溶かした
- 9. Goにおけるnewと宣言のみの違い
- 10. gin gormでテーブル操作(少し改良版)
- 11. CircleCIからCloudRunへ自動的にデプロイする
- 12. CloudRunでRedis(Memorystore)を利用する
- 13. Rust は流行りそうもないので、Go を使う。
- 14. Goの実行環境をDockerで構築しようと際に発生した「no Go files in /go/src/github.com/go-playground/localesエラー」を解決
- 15. MacにGo言語開発環境をインストールする
- 16. WindowsにGo言語開発環境をインストールする
- 17. Ionic & golangでリアルタイム大喜利アプリを作りました
- 18. go修行14日目 ユニットテストとか
- 19. Goのはじめかた
- 20. cobra-cmder で Go の CLI を簡単に作る
今からサービスを考えるなら、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 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
無料で1日でサービスを開始できる時代。ただ、ユーザーをどう増やすか。
最近、暇で以下のサービスを作った。
https://deau-project.herokuapp.com/3日でサービスを開始した。
こんな感じ。1日目: 何を作るのか。環境はどうするか。
=> メールで出会うサービスで、Heroku, React, Go Gin に決定してデプロイした。
https://devcenter.heroku.com/articles/getting-started-with-go2日目: 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 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コン
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.funnyappios
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 mylibfunc 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 mainimport “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