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

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

プログラミング超入門(9)〜GO言語〜

#関数
関数とは、色々な処理をまとめたもので「同じものを二度書く必要がない」「同じものを他の場面で使用できる」「他の人とも共有できる」など、とても便利です。関数を作ることを「関数を定義する」といいます。GO言語での関数の定義方法は`func 関数名( ){実行したい処理}`**func**を記述し→関数名→( )`丸括弧に変数名「引数」を入れることで関数に値を渡せますこの引数は関数内で使用することができ、関数内にある数字と引数を(引数*3)のように計算したりできます。`→{ }波括弧の中には実行したい処理を記述する形です。**関数に引数を渡したり、関数が引数を受け取ったりするわけです。**
##引数の定義
(引数01,引数02,引数03…)のように **,** カンマで区切ると引数を何個でも渡すことができます。`(引数名 データ型)もしくは( )で省略することもできます`
##戻り値
関数は引数を受け取る一方、実行したい処理結果を返すことができます。式の結果が値になるのと同じように、関数も結果として値を返すのです。慣例的には、関数は値を「戻す」と呼んでいるので、その値を**戻り値*

元記事を表示

Go言語 strings.ReplaceAllについて(文字列の一斉変更、スペースの削除等)

# Go言語の文字列書き換え
Go言語において文字列内の特定の文字を変更したい、もしくはスペースをなくしたい時などには、strings.ReplaceAllが有効です。

#使い方
まず import “strings” を行う必要があります。
strings.Replace(str, oldString, newString) string という形式になっています。
第一引数において変更を行いたい文字列を指定します。
第二引数では、変更をする文字の指定を行います。
第三引数では、変更後の文字列の指定を行います。
そして、変更された文字列はstring型で返されます。

# 例)文字列内のスペースの全削除
文字列の中に存在しているスペースをすべて削除する方法を例として説明します。

“`
example := “123 23 23″
example = strings.ReplaceAll(example, ” “,””)
fmt.Printf(“example:%s\n”,example)
“`
—-

“`
//出力結果
1232323
“`

まず、文字列としてe

元記事を表示

【Go】似た構造体を変換する関数を自動生成するCLIツールを作った話

## はじめに

サークルにて、DDDライクなレイヤードアーキテクチャでAPIサーバー設計を行っていました。DDDの各層に同じエンティティを示す構造体を定義しましたが、この構造体はものによっては非常に似ていますが、Goの標準で異なる構造体の型を変換する方法はありません。(名前が異なるだけだったり、構造体タグの差の場合はキャスト可能)これに対して、ある一定の変換規約を用意して変換する関数を自動生成しようというのがこのツールの目的です。

生成される関数名は、`Convert{{変換元の型名}}To${変換先の型名}`です。基本的な変換規約はフィールド名一致かつ型一致ですが、複合型に関しては特別な処理をして妥当な変換を目指します。

## 使い方

https://github.com/fuji8/gotypeconverter

“`shell
go install github.com/fuji8/gotypeconverter/cmd/gotypeconverter
“`

“`
> gotypeconverter
got

元記事を表示

ローカル環境にDockerのSwarmモードで13台のDocker Machineを立ち上げElastic Stackクラスタを構築

# はじめに
生産技術部で製品の検査工程を担当しているエンジニアです。Elastic Stackを実際に運用していくために、ローカル環境にElastic Stackのクラスタを構築し検証を行っています。

本記事では、Swarmモードを利用し、Docker Machineでクラスタを構築するための事前準備から、構築手順、動作検証用のログ生成、運用方法についてまとめましたので紹介します。

![portainer-swarm.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/451049/d756ade1-9c6e-0ab2-4574-5af5ed6c1eeb.png)

go言語で記述したログ生成ツールを作成し、生成したログをElastic Stackに取り込み、Kibana上で正しく表示されていることを確認しましたので、合わせてツールも紹介します。

![visualized-log.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.co

元記事を表示

Go言語 環境構築(Emacs)

#背景
最近Go言語をはじめた初心者ですが、勉強の意味も兼ねて記事を書いていきます。

#環境
– Xubuntu 20.04
– Emacs 27.1

#構築手順
##Go言語のインストール
[ubuntu に apt で golang をインストール](https://qiita.com/m-tmatma/items/dff66b3e294293115661)を参考にインストールします。

##LSP(gopls)のインストール
[golang/tools](https://github.com/golang/tools/tree/master/gopls#installation)に記載されている下記のコマンドでインストールします。

“`
GO111MODULE=on go get golang.org/x/tools/gopls@latest
“`

##環境変数の設定
[Golang環境構築手順メモ](https://qiita.com/shiro01/items/5c2bf4313f68aad41a14)を参考に下記のコマンドを実行します。

“`
echo ‘e

元記事を表示

GORMをインストールしてPOSTGRESQLと連携するGOのプロジェクトを作成

# 背景
[前回はGO言語を使って自分のPCでWEBサーバー構築](https://qiita.com/ume-bar/items/5df5f03c116418aa9d61)するという課題でしたが、今回の課題は、データベースを利用してGOから接続したデータを取り出して表示して、WEBサーバーで接続した結果を表示するというものでした。そこで、今回はオブジェクト指向プログラムとリレーショナルデータベースをつなぐ役割をしてくれるGORMを使用して構築していこうと思います。GORMとは、GOのORM(Object-relational mapping)のことをいいます。簡単にいうと、SQL文を書かずにデータベースを使える便利なものと考えてみてください。
#プロジェクトを作成してGOからユーザーテーブルを作成

プロジェクト名のフォルダを作成して、その中に入ります。プロジェクト名を**communicateWithPostgres**とします。

“`
mkdir communicateWithPostgres
cd communicateWithPostgres
“`
まず**go mo

元記事を表示

【メモ】M1MacでGoの環境構築をする

M1 MacでGoの環境構築をする方法のメモです
# goenvインストール
ターミナルでgoenvをクローンします
Homebrewで入れるとM1対応のバージョンが入らないことがあります。

“`terminal
git clone https://github.com/syndbg/goenv.git ~/.goenv
“`

クローンしたら.zshrcに以下を記述してパスを通します

“`.zshrc
export GOENV_ROOT=”$HOME/.goenv”
export PATH=”$GOENV_ROOT/bin:$PATH”
eval “$(goenv init -)”
“`

ターミナルで以下のコマンドで再起動します

“`terminal
exec $SHELL
“`

# Goインストール
以下のコマンドでインストール可能なバージョン一覧が表示されます

“`terminal
goenv install –list
“`

M1に対応しているのは~~1.16.0以降のバージョンみたいなので、1.16.0をインストールします。

“`termi

元記事を表示

Visual Studio Code使ってGo言語をコンパイルうまくいかなくなったのでGoLandに変えたら、使いやすかった件….。

現在、Go言語を学習していますが、途中で詰まりました。
こちらのURLでも開発環境の手順を説明しましたが、コンパイルしていると詰まりました。汗
恐らく設定(Gopath)がうまくいってなかったのだと思う。

https://qiita.com/kushiyama0225/items/169137ca08b719bc78ce

色々調べてもうまくいかないので、別のIDEを使うことにしました!!
調べるとGoLandというIDEがあるみたいですね。
実際に使ってGo言語を動かしてみましたが、最強に使いやすいです。笑
ほとんど詰まることなしです。

なぜだろう、すごく見やすのかな:thinking:

月額性のツール(IDE)になりますので、お金にシビアな人はほかのツールがいいかもしれません。。。

URLはこちらです。

https://www.jetbrains.com/ja-jp/go/

おそらく、GoLand使い始めると他のIDE使えなくなるかもです。笑

![image.png](https://qiita-image-store.s3.ap-northeast-

元記事を表示

HerokuにデプロイしたGoアプリでpostgresに接続する時のgormの設定方法

# はじめに
最近[とうらぶ練度チェッカー]()というwebアプリを開発し、その際にサーバサイドをgoで書いてHerokuにデプロイしたのですが、postgresに接続する時のgormの設定についての情報がなかなか見つからなくて苦労したのでここに書き残しておこうと思います。

# 設定について
公式の[Heroku スターターガイド (Go)]()はすごく丁寧に書いてあります。DB接続についての説明は[ここら辺](https://devcenter.heroku.com/ja/articles/getting-started-with-go?singlepage=true#-12)にあります。しかし今回はgorm使いたいのでここに記載している方法とは別の方法で接続する必要があります。そこでgormの公式ドキュメントを観に行ってみましょう。[これ](https://gorm.io/ja_JP/docs/connecting_to_the_database.html#%E6%97%A2%E5%AD%98%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%83%9

元記事を表示

刀剣乱舞のキャラの経験値を可視化するwebアプリを作った

# はじめに
刀剣乱舞というゲームに登場するキャラクターの累計経験値を可視化するwebアプリ「[とうらぶ練度チェッカー](https://tkrb-exp-checker.piyopanman.com/)」を作りました???
今回はこのことについて振り返ってみようと思います!

![ogp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/671055/f6bdea8c-3f10-2f76-9a35-c59440e5252c.png)

[刀剣乱舞公式HP](https://www.dmm.com/netgame/feature/tohken_html/=/navi=none/?utm_content=200101&utm_source=AdWords&utm_medium=lis&utm_campaign=nml&gclid=Cj0KCQjw9YWDBhDyARIsADt6sGYA7PjVhWR-GjTpVkpSsj3l1dZORoxFQw5byUjnt7D_KiHMa_W4zKoaAtntEALw_w

元記事を表示

プログラミング超入門(8)〜GO言語〜

#switch文
switch文は、変数の値を「case」で始まる文で評価して条件が満たされれば特定の処理を行います。一度でも条件が満たされれば再び評価はしません。条件が満たされなかった場合は何もせずに終わります。複数の「case文」を用いて場合分けをし、値を示させます。switch文の後に変数名を記述し、どの変数の値について「スイッチ」させるか決めます。

“`switch.go
package main

import “fmt”

func main() {

pushs := []string{“S”, “N”, “R”, “C”, “E”}

for i := 0; i < len(pushs); i++ { switch pushs[i] { case "R": fmt.Printf("[%s] 実行します。 \n", pushs[i]) case "S": fmt.Printf("[%s] ファイルを保存します。 \n", pushs[i]) case "N": fmt.Printf("[%s] 次に進みます。 \n", pushs

元記事を表示

Golang 入門 #1

## Golangとは

[公式ドキュメント](https://golang.org/doc/) に書いてあることをまとめると、Golangとは…

* オープンソース
* シンプルな言語仕様
* 並行プログラミングに強い
* コンパイル型言語
* コンパイルや実行が速い

2021年3月の時点でGolangの最新バージョンは [1.16](https://golang.org/doc/go1.16)
Go1.16 は、macOS 10.12 Sierraで実行される最後のリリースになっており、Go1.17 ではmacOS 10.13 HighSierra以降が必要になる。

## Goの需要

まず国内におけるGoの需要はどうだろうか
TECH Street(テックストリート)によるアンケートの調査結果は次の通り
Goは国内における需要は増えているという話は聞きますが、Perlと同じ15位にランクイン
defer内でのエラーを考慮する。

# はじめに
– `defer`句でエラーが起きたらどうするか

# 結論
– ※個人的に良いなと思ったものです。
– `close`時に発生したエラーとオリジナルのエラーの両方をログなどで確認することができる。

“`golang
defer func() {
deferError := c.Close() //c.Closeはエラーを返す可能性があります。
if deferError == nil {
return
}
err = fmt.Errorf(“close: %v, original: %v”, deferError, err)
}()

//よくない例
defer c.Close()
“`

# 参考
[Go 言語(Golang) はまりどころと解決策](https://www.yunabe.jp/docs/golang_pitfall.html#defer-%E3%81%AE%E4%B8%AD%E3%81%A7%E7%99%BA%E7%94%9F%E3%81%97%E3%81%9F-error-%E3%82%92%E5

元記事を表示

【Go】File operations (ファイル操作)

# Goでプログラミングの基礎を学ぶシリーズ
スクールでは教えてくれないプログラミングの基礎、**データ構造とアルゴリズム**をGoで学んでいくシリーズです。
そのデータ構造がどのようなものであるかは、理解を助けてくれるサイトを紹介しつつ、簡単に説明に留めさせていただきます。(ご自身でも調べてみてください!)
筆者自身、Exerciseに取り組みながら理解を深めていったので、コードの解説を中心に記事を書いていきたいと思います。

| | タイトル |
|——|———|
| #0 | [はじめに (環境構築と勉強方法)](https://qiita.com/miyyuk/items/0b959774a2e436f087c0) |
| #1 | [Pointer, Array, String (ポインタと配列と文字列と)](https://qiita.com/miyyuk/items/75fad6c02b76354fa49d) |
| #2 | File operations (ファイル操作) **☜ here** |
| | *~~ coming soon ~

元記事を表示

モスクワの天気に詳しい彼女botが欲しい

# はじめに

モスクワの天気に精通した**彼女風LINE BOT**を作成しました

[![Image from Gyazo](https://i.gyazo.com/c78a840ad1fe0201b3b649766a4e7a04.png)](https://gyazo.com/c78a840ad1fe0201b3b649766a4e7a04)

#### QRコード

[![Image from Gyazo](https://i.gyazo.com/f22a26304e7bc0755cd4f4a95b1d2cd2.png)](https://gyazo.com/f22a26304e7bc0755cd4f4a95b1d2cd2)

#### 使用技術
– Go
– line-bot-sdk
– heroku
– [openWeather API](https://openweathermap.org/)

# 事前準備
LINE BOT 作成手順は、以下記事にまとめましたので、参考にして頂けますと幸いです。
[LINE BOTで彼女botを作りたい](https://qi

元記事を表示

2年かけて個人で全く新しいSNSアプリを作ったお話し

こんにちは。歴10年のアプリエンジニア(Best of AppStore?受賞歴あり)です。

**neeboor?**という位置情報を使った新しいSNSアプリを作りました。
toC向け&コンテンツ系&モバイルアプリというサービスの特性上、**最初からある程度高い完成度のサービスを提供しないとユーザーの手に取ってもらえないな**と思い、UI/UX中心にかなりこだわって開発した結果、**開発に2年以上**かかってしまいました。

今回はサービスの紹介をしつつ、開発で苦労した点や工数をかけた点について記事にしたいと思います。

# サービスの紹介
neeboor?は、「**あなたの生活圏をもっとおもしろくするSNS** (Make your living area hackable)」というコンセプトの位置情報系SNSアプリです。従来のローカル系サービス(=地域情報サイト、半径◯メートルでお店や友達探す系、出会い系、ナビ系、トラッキング系など)とは異なり、**場所を演出要素としてオープンでカジュアルなコミュニティを作れる**ところがユニークな点になっています。

### 機能 / こんな使

元記事を表示

【Go言語】bufioのScanは65536バイトを超えると読み込まない?

# 概要

– bufioのScannerを使ったファイル読み込みはデフォルトでは1行の長さが65536バイトを超えた場合はエラーとなるので1行の最大長を設定しなければならない
– bufioのScannerのエラーハンドリングを忘れない

# やり方

– 初期サイズを与えたbyte配列を生成する
– Buffer関数にbyte配列と1行の最大長のサイズを設定する
– エラーハンドリングを忘れがちなので注意する(これがないとなぜファイルが読めないのか気づけ無い)

“`
scanner := bufio.NewScanner(fp)
buf := make([]byte, 65536) // 初期サイズ
scanner.Buffer(buf, 1048576) // 最大サイズ
for scanner.Scan() {
log.Print(scanner.Text())
}
// エラーハンドリング
if err := scanner.Err(); err != nil {
log.Printf(“scanner. %v”, err)
}
“`

元記事を表示

yukicoder contest 288 参戦記

# yukicoder contest 288 参戦記

## [A 1438 Broken Drawers](https://yukicoder.me/problems/no/1438)

昇順に並んでいない組はどちらかしか開けれないのでその分だけ差し引けばいい.

“`python
N, *A = map(int, open(0).read().split())

c = 0
i = 0
while i < N - 1: if A[i] > A[i + 1]:
c += 1
i += 1
i += 1
print(N – c)
“`

## [B 1439 Let’s Compare!!!!](https://yukicoder.me/problems/no/1439)

不一致の最左点だけ比較すれば大小が分かるので、その位置を押さえる. その位置より右で変更があった場合は大小は変わらない. その位置より左で変更があった場合はそこの位置を見るように変える. 現在見ている場所が一地になった場合はそこから次に不一致の点に移動する. こ

元記事を表示

How to do Benchmarking with Go

I will be talking about benchmarking in Go in this article.

But first, what is benchmarking in general?
**Simply put, it means running a set of programs to assess the relative performance against a set of standards.**

In our case, we want to judge whether Go codes that we wrote are performing well or not.

# How to do benchmarking in Go

Go included a default benchmarking tool inside [testing package](https://golang.org/pkg/testing/).

To differentiate benchmarking from testing, you need to pr

元記事を表示

Linuxでもお名前.com DDNS

# はじめに

お名前.com使ってますか?
僕はお名前.comでドメインを借りてます。ふと、家のマシンをインターネット公開しようとDDNSしようと思ったのですが、クライアントがWindowsしかありませんでした。

調べてみると簡単にできそうだったので、肝となるコードは参考しつつ、Goで書いてみました。

利用の際は自己責任でお願いします。

# 機能紹介
## リポジトリ
https://github.com/miya-masa/onamae-go

## ヘルプ(リリース当初)
“`
❯ onamae-go -h
flag needs an argument: -h
Usage of onamae-go:
-d string
Domain. ex. example.com
-daemon
Launch as daemon
-h string
Hostname. ex. www
-i https://httpbin.org/ip
IP address. If empty, will get it au

元記事を表示

OTHERカテゴリの最新記事