Go関連のことを調べてみた2021年10月16日

Go関連のことを調べてみた2021年10月16日

【Go】mongo-go-driverでコレクションの全件を取得する

## 概要
MongoDBで全件検索したい時、[[Mongo] findメソッドのいろいろな使い方(MySQLと比較)](https://www.yoheim.net/blog.php?q=20150601)の記事にある通り単純にfindメソッドを使えばOKです。では、GolangでMongoDBを使用する際に使う、mongo-go-driverで全件取得するにはどうすれば良いのか。
[[Mongo] findメソッドのいろいろな使い方(MySQLと比較)](https://qiita.com/h6591/items/a1898bddb6819b27d88f#find%E6%9B%B8%E5%BC%8F)の記事を見ると、Findメソッドは`Find(context.Context, 検索条件, Find オプション)`とあり、検索条件の部分はnilを設定すれば良いのかなと思いnilを設定したところ、エラーとなりました。

## 対応
[こちら](https://pkg.go.dev/go.mongodb.org/mongo-driver/mongo#Collection.Find)のド

元記事を表示

GoでWebSocketを使いチャットサーバー構築

### はじめに
使わない日はないくらい仕事でもプライベートでも、チャットサービスが日常的に使われていますが、チャット機能を実装したことがなかったので、
今回はGo(1.17)でWebSocketを使いチャットサーバーを構築していきます。
なぜGoを使うかと言うと、最近仕事で使っていて、私の中でブームなのと、
そして何よりマスコットキャラクターのGopherがかわいいからです(笑)

![Golang.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490184/28bebc6f-96f8-675c-354b-9865764d25ab.png)
The Go gopher was designed by Renée French.

https://golang.org/

余談ですが、2022/2リリース予定のバージョン1.18では`go get`のバイナリインストールの機能が削除されるため、
バージョンアップの際は手順書やスクリプトを修正する必要があります。皆さんお気をつけください。

### システ

元記事を表示

Marshalの本当の意味知ってる?

# 背景
Go言語を触っていると、よく構造体をJSONに変換するために以下のように Marshal という関数を使いますよね。何気なく使っていていましたが、Marshal の意味とは何か知りたくなったので調べてみました。

“`golang:json.Marshal使用例
type Person struct {
Name string `json:”name”`
Age int `json:”age”`
}

func main() {
p := Person{
Name: “hoge”,
Age: 30,
}
s, err := json.Marshal(p)
if err != nil {
panic(err)
}
fmt.Println(string(s))
}
“`

# Marshaling とは

まずはWikipediaからの情報です。

> In computer science, marshalling or marshaling (US spelling) is the process of transforming th

元記事を表示

DockerでGO,Gin環境構築

# 前提条件
Dockerがインストール済み

# 手順

### フォルダ構成の作成

“`
go
– web
– Dockerfile
– main.go
– docker-compose.yml
“`

### Dockerfileの記述

“`Dockerfile:Dockerfile
FROM golang:latest
WORKDIR /go/src
“`

“`yml:docker-compose.yml
version: ‘3’
services:
web:
build: ./web
tty: true
volumes:
– ./web:/go/src
ports:
– “3000:3000”
“`

### Docker起動~サーバーの起動まで

VSCodeのDocker拡張を使ってる場合は1,2番はGUIでもできます。

1.docker起動

“`shell
docker-compose up
“`

2.コンテナに入る(別ターミナルで)

“`shell
dock

元記事を表示

GoとGORMを使った勉強(4)

#概要
・[GoとGORMを使った勉強(3)](https://qiita.com/yamauchikei/items/5645f18afc48ac39365c)の続き ※さらに続きあります(作成中)
・前回まで:ローカル環境でDBに接続してテーブルの情報を画面に表示
 今回  :レンタルサーバーでDBに接続してテーブルの情報を画面に表示

#準備
・レンタルサーバーを借りる
・レンタルサーバーにSSH接続しておく
>よければこちらの記事を参考にしてください
 [さくらのレンタルサーバーに接続する方法(超初心者向け)](https://qiita.com/yamauchikei/items/325444f83a178133da08)

#レンタルサーバーでDBを用意する
最終的にサーバーでファイルを送ってもDBがなければ動かないので、DBを用意します。

さくらインターネット公式のサポート情報に写真付きでわかりやすく手順が書いてあるのでこの通りにデータベースを作ってください。
>[データベースの作成・追加・削除・パスワード再設定](https://help.sakura.ad.jp/

元記事を表示

GoとGORMを使った勉強(3)

#概要
・[GoとGORMを使った勉強(2)](https://qiita.com/yamauchikei/items/cb739cc86d8b0a5d851e)の続き ※さらに[続き](https://qiita.com/yamauchikei/items/a783d6609256c93dc13c)あります
・前回まで:ローカル環境でDBに接続してテーブルの情報を画面に表示
 今回  :レンタルサーバーで画面表示するための準備

#今回すること
・「.envファイル」に接続情報を書き込む
・「controller.go」を書き換える
・main.goをbuildする

#.envファイルを作成し接続情報を書き込む
main.go

““:root/.env
DB_USER=fuga
DB_PASS=fugapass
DB_HOST=127.0.0.1
DB_NAME=hoge
““

#controller.goのDBとの接続する処理の部分を書き換える
「.envファイル」から接続情報を読み込むように「controller.go」を書き換える。
最終的にはサーバー上にサーバー

元記事を表示

GoとGORMを使った勉強(2) 

#概要
・[GoとGORMを使った勉強(1)](https://qiita.com/yamauchikei/items/59b731d7f2870c04beac)の続き ※さらに[続き](https://qiita.com/yamauchikei/items/5645f18afc48ac39365c)あります
・機能を追加:logを記録
・改善:機能ごとにファイル分け

#機能追加(1):logを記録する

func main()のカッコ{}の中に下記を追記。
app.logファイルが自動で作成されこれにlogが記録される。

““
file, _ := os.OpenFile(“app.log”, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
defer file.Close()
gin.DefaultWriter = io.MultiWriter(file)
““

““golang:main.go
package main

import (
“io”
“os”

“github.com/gin-go

元記事を表示

AWS SAM+Lambda+Go+WSLではじめるサーバーレスアプリケーション開発

# 目的

AWS SAM を使って Go 言語でサーバーレスアプリケーションを開発するための、環境構築の手順をまとめます。個人的な備忘録を兼ねているため、必須ではない細かな設定なども記載しています。Lambda でサーバーレスアプリケーションの開発をはじめようと思っている方の参考になれば幸いです。

# 当記事に含まれる内容

当記事に含まれる内容は下記の通りです。ソフトウェアのインストールなどは既にわかりやすい記事があるので、そのリンクを貼っています。

– Hello World アプリケーションについて
– WSL2 の設定
– Docker の設定
– AWS CLI の設定
– Session Manager プラグインの設定
– SAM と Go のインストール
– Ubuntu の環境変数設定の自動化
– VSCode の設定
– SAM プロジェクトの新規作成
– SAM プロジェクトのデプロイ
– AWS コンソールから各サービスを確認

# Hello World アプリケーションについて

Hello World アプリケーションは、SAM プロジェクトを新規作

元記事を表示

やっぱりzstdのほうがよかった GoでZIP内部のBZIP2を解凍

[![Github](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1646184/0e201e0c-e21f-a715-4353-142b23059ccd.png)](https://github.com/Soliton-Analytics-Team/Go-ZSTD/) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/Soliton-Analytics-Team/Go-ZSTD/blob/main/ZIP_ZSTD.ipynb)

ご覧いただきありがとうございます。[ソリトンシステムズのセキュリティ分析チーム](https://www.soliton-cyber.com/)です。

Google Colaboratoryにアカウントをお持ちの方は、上の「Open in Colab」という青いボタンを押せば直接notebookを

元記事を表示

5分で学ぶ気になるプログラミング言語(Go編)

※前回の記事はこちらになります。あわせてご覧ください
[5分で学ぶ気になるプログラミング言語(Rust編)](https://qiita.com/kansaizine/items/f17c56ce653e8131c9e8)

## 5分で学ぶGo
それでは今回はGoを学んでいきます。5分しかないので急ぎましょうw

Goの公式サイトのURLは https://golang.org/ です。
「Go」という単語はググラビリティ的に難がありますが、「Golang」という呼称も結構浸透しているかなと思います。
「ゴー」って、言いやすいので好きですねw 発音で悩まないというのは日本人的には重要かと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/157692/03b7f996-7425-6eca-79ac-314f30358037.png)

Rustでは日本語サイトが提供されていましたが、Goは硬派に英語のみです。ひるまずいきましょうw

Rustでもそうでしたが、Goもファーストビ

元記事を表示

GAE+Go(2nd-Gen)API実装のサンプル

こんにちは。みなさんは[Google App Engine](https://cloud.google.com/appengine)(GAE)使っていますか?
フルマネージドでオートスケールでお気に入りのプロダクトなのですが、やや情報が少ないような・・・

実戦投入しようと思うと、環境変数の設定や、サービス間認証、はたまたcloud_build.yamlどう書くんだ、など結構詰まるポイントが多いかと思います。

そこで、基本的な部分を実装したGAE+goのAPI実装のサンプルを公開します! これからGAE+Goを始める方のご参考になればと。

## サンプル

[GAE-Go-sample](https://github.com/AkihikoOkubo/GAE-Go-sample)

– GAEスタンダード環境です
– GAEのruntimeはgo116です
– ユーザオブジェクトを登録/取得するだけの簡単なAPIのサンプルです
– Firebaseを使うので、Firebaseのセットアップと、GAEサービスアカウントへの「Firebase管理者」ロールの付与が必要です

## ポイ

元記事を表示

GoとGORMを使った勉強(1) 

#概要
・GoとGORMを使ってDBに接続してテーブルの情報を画面に表示させます。
・[続き](https://qiita.com/yamauchikei/items/cb739cc86d8b0a5d851e)あります。

#環境
・DockerでGoの環境構築
 `docker run -itd -p 8080:80 golang:latest`

#準備
““:Docker
#mysqlの用意
root@df86ed89dfdc:/go# apt update
root@df86ed89dfdc:/go# apt install mariadb-server
root@df86ed89dfdc:/go# service mariadb start

#初期設定
root@df86ed89dfdc:~# mysql_secure_installation

““

##データの用意

““
#mysqlにログイン
root@3ba225e11191:~# mysql -u root -p

#DBを作る
MariaDB [(none)]> create databa

元記事を表示

Ginでサーバーを立ち上げてJSONのメッセージを表示

#概要

Ginでサーバーを立ち上げてJSONのメッセージを表示させる。

#環境
・Docker
・MacBook

#docker run でgolamgが入ったコンテナを作る。

““
~/d/q/gin_server ❯❯❯ docker run -itd –name gin_server -p 8080:80 golang:latest

#コンテナにはいる
~/d/q/gin_server ❯❯❯ docker attach gin_server
““

““:Docker
root@1cc8cba550f2:~# cd ../root

#Vimをインストールする
root@1cc8cba550f2:~# apt update
root@1cc8cba550f2:~# apt install vim

#Vimで空のmain.goを作る
root@1cc8cba550f2:~# vim main.go

#ginをダウンロードする
root@1cc8cba550f2:~# go get github.com/gin-gonic/gin
go: down

元記事を表示

AWSの強い権限のクレデンシャル管理から転生した件

# クレデンシャルをパスワードみたい使ってない?
 開発チームには最低限の権限付けたクレデンシャルを払い出し、その点ではセキュリティは確保しているものの、運用系には**強い権限**を持ち、かつトラブル対応時に**期限が切れないように永続的な権限**を払い出してはいないでしょうか。権限が強いので更新などを所有者に移譲しているため、定期更新なんかしないで使い続けてる管理になりがち・・

### これではパスワードと何も変わらない!

**このツールはAWSでのクレデンシャル管理の概念を変えるため作られました**

# 作ったわ!

[![yasutakatou/goCred – GitHub](https://gh-card.dev/repos/yasutakatou/goCred.svg)](https://github.com/yasutakatou/goCred)

詳しくはリポジトリで。[バイナリをダウンロードして即使いたいならこっち](https://github.com/yasutakatou/goCred)

# どんなん?

このツールを使うと・・

– **強い権限を持つ

元記事を表示

HomebrewでのGoの環境構築(macOS)

環境

・OS:macOS Big Sur
・シェル:zsh

Goのインストール

まず、ターミナルでこちらのコマンドを打って、Goをインストールします。

“`
% brew install go
“`

GOROOTを設定

GOROOTとはGoのインストールパスです。
自分でインストールディレクトリを変更した場合には、環境変数$GOROOTの設定が必要です。
GOROOTは標準では/usr/local/goですが、homebrewでインストールした場合には/usr/local/opt/go/libexecになります。

“`
% go env GOROOT
/usr/local/opt/go/libexec
“`

GOPATHの設定

GOPATHはとは外部パッケージのリソースなどが保存されるパスです。
GOPATHを設定しておくとコマンドを実行するときにフルパスを入れずに済みます。
GOROOT同様に、GOPATH以下の/bin/にGoの実行バイナリが配置

元記事を表示

Go+gRPCでシンプルなEchoサーバ(令和最新版)

# はじめに
GoのインストールからシンプルなEchoサービスをgRPCで実装するまでの手順。

# 各ツールのインストール

## Go
“`
$ wget https://golang.org/dl/go1.17.linux-amd64.tar.gz
$ sudo tar xf go1.17.linux-amd64.tar.gz -C /usr/local
$ echo “GOPATH=${HOME}/go” >>.bashrc
$ echo “PATH=${PATH};/usr/local/go/bin” >>.bashrc
$ source .bashrc
“`

## protoc
“`
$ wget https://github.com/protocolbuffers/protobuf/releases/download/v3.18.1/protoc-3.18.1-linux-x86_64.zip
$ unzip -d ${HOME}/.local protoc-3.18.1-linux-x86_64.zip
$ echo “PATH=${PATH};${HOME}/

元記事を表示

Dockerを使ってGolangでHello,World!(超初心者向け)

Dockerでgolangを動かしてみます。
Dockerを触ったことがない人でもわかるように意識して書きました。

#事前準備
・Dockerのインストールが済んでいること
・Vimの基本的な操作(編集、保存、閉じる)ができること

#本題

下記のコマンドを実行します。
docker run -it –name=”任意の名前” -p 8080:80 golang:1.15 bash

_**コマンドオプションの意味**_
`-i` :ホストの入力をコンテナの標準出力をつなげる
`-t` :コンテナの標準出力とホストの出力をつなげる
>`-i,-t`オプションを付けないとコンテナの中で入力できない
`-i`オプションと合わせて`-it`と記述可能

`–name=” ”` :コンテナ名に任意の名前を付ける #付けなくても動きます
`-p 8080:80` :ポートマッピング
> 書き方:`-p [ホスト側のポート番号]:[コンテナのポート番号]`
 `-p 8080:80`で localhost:8080 への接続が、コンテナ内のポート 80 へ送られます。

`gola

元記事を表示

ぼくのレイヤードアーキテクチャ

## はじめに
### サマリ
– Goを書くようになってからそろそろ1年が経ちます。
– GoでWeb APIを実装する際の個人的パッケージ構成が定まりつつあるので備忘録を書き連ねます。
– 当初はMVCで実装していました。
– 最終的に**レイヤードアーキテクチャ**を用いたパッケージ構成に落ち着きました[^1]。
– 本稿ではDDD等の文脈は切り離して、**パッケージ構成を責務毎に分割するための取り組みとしてのみ**レイヤ系アーキテクチャを取り扱います。

### レイヤ系アーキテクチャとは?
レイヤ構造を持ったアーキテクチャ(クリーン/オニオン/レイヤード…)等を指します。
MVCもレイヤ構造を持ちますが、今回はレイヤ系とは区別して説明いたします。

### 記事の内容
– (主に)Web APIを実装する際に採用している個人的アーキテクチャについて説明します。
– まず現在のレイヤードアーキテクチャに至る試行錯誤を話し、その後具体的なコードを交えながら解説します。

### 対象読者
– レイヤ系アーキテクチャを理解する最初の一歩が欲しい方向けです。

元記事を表示

Goのsortパッケージでよく使う関数

## はじめに
Go標準のsortパッケージでは、スライスの並び替えなどをサポートしています。
本記事では、sortパッケージで一般的に利用される関数を紹介していきます。

## Ints
int型のスライスを昇順で並び替えます。

“`go:go
package main

import (
“fmt”
“sort”
)

func main() {
s := []int{5, 2, 3, 1, 4}
sort.Ints(s)
fmt.Println(s) //=> [1 2 3 4 5]
}
“`
一般的なソート(バブルソート)と比較してみます。

“`go:go
package main

import “fmt”

func main() {
s := []int{5, 2, 3, 1, 4}
for i := 0; i < len(s)-1; i++ { for j := 0; j < len(s)-1-i; j++ { if s[j] > s[j+1] {
s[j], s[j+1] = s[j+1], s[j]
}
}

元記事を表示

go: cannot find main module, but found|GolangのテストをGitHub Actionsで回した時のエラー

# 状況
ある書籍のサンプルコードを動かしていたところ遭遇したエラーです。
Golangは触ったこともない状態で進めていたのでモジュールやGoPathなども
理解できていない状態でした。

# エラーメッセージ
GitHub ActionsでGolangのテストファイルを実行した時に出たエラーです。

“`error.go

go: cannot find main module, but found .git/config in /__w/app-name/app-name
to create a module there, run:
go mod init
Error: Process completed with exit code 1.

“`

# 原因
go.modファイルがないことでした。
詳しい原因知っている方いましたらコメントいただけたら嬉しいです。

# 解決方法
以下のコマンドでgo.modファイルをプロジェクトディレクトリのルートに生成しpushしたらエラーが消えました。

“`go.sh

$ go mod init github.com/examp

元記事を表示

OTHERカテゴリの最新記事