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

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

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

元記事を表示

高校生が2ヶ月で教育用プログラミング言語を作ってU22プロコンで賞をとった話

#前置き
2020/11/29に開催された U22プログラミングコンテスト2020 において経済産業省政務局長賞プロダクト賞及びOBC賞を頂きましたので、開発経緯をまとめてみたいと思います。拙い文章だとは思いますが、U22プログラミングコンテストに応募してみようと考えている方や自作言語に興味がある方への参考になれば幸いです。
##自己紹介
最初にちょっとした自己紹介を…
プログラミングが趣味な一般高校二年生(4月から3年生)です。
プログラミングはScratchを小学生4年生から、JavaScriptを中学1年生からはじめました。高校に入ってからプログラミング学習を本格的に初め、C, C++, Swift, PHP, (SQL), Go などを学習しました。(まだマスターには程遠いですが..)
一番なれている分野はサーバーサイドで、文化祭の物品管理データベースの作成やスーパー混雑共有サービスなどを今までに作りました。
#応募作品について
今回のU22プログラミングコンテスト(以下U22プロコン)で提出した作品は

元記事を表示

【HTTPヘッダー】CORSの仕組みとGo+GinによるCors設定の実践

#はじめに
`localhost:80`で立てたWebサーバー(nginx)から
`localhost:8080`に立てたAPIサーバー(golang)にリクエストを送った時に、
CORSエラーが発生し、APIが叩けないところでハマったので、
学びとしてまとめます。

#そもそもHTTPとは?
>HTTP は、 HTML 文書などのリソースを取り出すことを可能にするプロトコルです。これはウェブにおけるデータ交換の基礎をなし、クライアントサーバープロトコルであり、リクエストは受け取り者 (一般にはウェブブラウザー) が生成します。文書全体は、テキスト、レイアウトの定義、画像、動画、スクリプトなど、取り込まれたさまざまなサブ文書から再構成されます。
参考元:[HTTP の概要](https://developer.mozilla.org/ja/docs/Web/HTTP/Overview)

– プロトコルの一種
– ウェブにおけるデータ交換の基礎
– シンプルで人間が読めるように設計されている
– HTTPヘッダーで、プロトコルの拡張や検証が簡単
– ステートレスだけど、HTTP Co

元記事を表示

【Go】「binary.Write: invalid type 」が発生してバイナリ書き込みができない

# 問題

以下のような構造体をバッファに書き込もうとしてエラーが発生した。

“`go:main.go
type T1 struct {
A int8
B int8
}

type T2 struct {
T1
C string
D int8
}
var (
t1 T1
t2 T2
)

t2.T1 = t1
t2.C = “hoge”
t2.D = 1234

buf := new(bytes.Buffer)

// ここで該当のエラーが発生
//
// binary.Write: invalid type *main.T2
err := binary.Write(buf, binary.LittleEndian, &t2)

“`

# 原因
埋め込みがまずいと予想していたが、どうやら**string**を書きこもうとして出力されるエラーだとわかった。

ドキュメントによると、[^1]
>Write は data のバイナリ表現を w に書き込みます。 data は,固定サイズ値または固定サイズ値のスライス,あるいはそのようなデータへのポイン

元記事を表示

【並列・並行解説付き】goroutineでマルチスレッド処理を試してみた

#はじめに
タイトルをあえて、**”マルチスレッド”**とだけ書き、`並行・並列`という言葉を使うのを避けました。
理由としては、

– `goroutine`は`runtime.NumCPU()`の値(論理コア数)が複数だった場合、並列処理となる。
– 論理コアごとに`gorotine`と紐づくカーネルスレッドが実行される**`M:Nモデル`**を採用しているので、同時に複数の処理が走る。(並行処理)

ただ、**並行は並列**を包含するので、
強いて言えば、goroutineは、並行処理というのがいいのかもしれませんね。

すでに「並」でゲシュタルト崩壊発生( ;´Д`)

#マルチスレッドとは

すでに、並列処理・並行処理ってなんやねん!!って状態だと思いますが、
図をご覧下さい。
![スクリーンショット 2021-03-25 11.48.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1075243/466c42e6-c416-e1bd-70be-57d4de34a8c4.png)

##

元記事を表示

Dockerコンテナ内で面倒なgo buildを実行する

https://qiita.com/kishibashi3/items/2b1e342d1ce3957b3dc8

の続き。
# 概要

今回作成したサービスがopencvなどの環境を作成するのが面倒で、buildするのも一苦労するため、buildについてもdockerの中でやってしまおう、ということで試してみた。

### topic

* opencvやgstreamerなど多くのライブラリが必要
* 開発環境用docker imageがそのまま使用できそう
* goライブラリの中に、privateなライブラリが含まれている
* 上記にアクセスするために、SSH鍵が必要
* 前段のgo build処理 、通常のdocker buildのマルチステージビルド

# Dockerfile

今回作成したDockerfileは以下。

ベースイメージである`ghcr.io/my_organization/devcontainer-go1.15-opencv4.5:latest`については、

https://qiita.com/kishibashi3/items/e20a

元記事を表示

RTPで受け取った動画をgolangで画像処理したい

https://qiita.com/kishibashi3/items/e20aecef45ed8341e739

の続き。
# 概要

動画を受け取り、動画から受け取ったフレームをある間隔で画像処理するようなアプリケーションをgolangで書きたい。

画像処理ライブラリとしてopencvを利用する必要があり、ラッパーとしてgocvを利用した。
試行錯誤した結果 opencv.OpenVideoCaptureという関数のバックエンドとしてgstreamerが使用できるという記事があり、試してみた。

# 構造

実際にはRTPの前にはWebRTCがあり、今回はSkyway WebRTC Gatewayを用いてWebRTC->RTPに変換している。

https://github.com/skyway/skyway-webrtc-gateway

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

元記事を表示

初心者向けGo問題集~演算子編~

Goの”基礎文法”を勉強中の方に向けた問題集です!

書籍や動画を使用したインプット中心の勉強になっていると感じたので、問題を作成してアプトプットすることにしました。(自身も初心者なので、問題集で間違っている箇所があれば教えてください。)
*********

###演算子編###
####=問題=
Q1. 3 + 1 の答えを表示
Q2. 3 – 1 の答えを表示
Q3. 3 × 1 の答えを表示
Q4. 3 / 1 の答えを表示
Q5. 30 / 4 の余りを表示

Q6. +演算子を用いて、「Hello Go」を表示

プラスα. 「Hello Go」2番目の文字「e」を表示
プラスα. 「Hello Go」を「Hello go」に変更
プラスα. sの文字列に「Hello」が含まれているか?

下記の実行結果をtrue/falseで答えてください。
Q7.fmt.Println(true && false == true)
Q8.fmt.Println(true && true == true)
Q9.fmt.Println(true || false == true)
10

元記事を表示

OTHERカテゴリの最新記事