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

Go関連のことを調べてみた2021年01月06日
目次

2021年Go言語フレームワークスター数比較

Go言語のフレームワーク(マイクロもフルスタックも含む)についてGithubの星比較です。(2021/01/05集計)
2021年版が見つからなかったので。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285581/8c78aa78-c058-ed45-3712-600cf7d338ba.png)

ginが強いですねー

参考

Go言語Webフレームワークランキング
https://qiita.com/loftkun/items/1a9951d1864bebdc51e1

Golang フレームワーク比較
https://qiita.com/yumin/items/5de33b068ead564ebcbf

元記事を表示

Go言語インストール後の実行環境テスト

# 最終確認
インストール、Version確認後
VSCordでフォルダを作成し、期待する結果が出力されるまでテストする
[Go言語の環境構築はこちら](https://qiita.com/coxcoa/items/39782fe00be03de2dcf7)

# 実行環境テスト

“`
# テスト用ディレクトリを作成
$ mkdir -p ~/go/src/test

# ディレクトリへ移動
$ cd ~/go/src/test

# テスト用のファイルを作成
$ touch test.go

# テスト用のファイルを編集
$ vi test.go
“`

“`go

//test.go

package main

import “fmt”

func main() {
fmt.Printf(“test, go\n”)
}
“`

“`
# 作成したディレクトリへ移動
$ cd ~/go/src/hello

# ビルドしてバイナリファイルを生成
$ go build

“`
:wqで保存し、ビルドしてバイナリファイルを生成

#### 実行する

“`
$

元記事を表示

Golangで自作Logger中でzapライブラリを使う際、CallerにLoggerより上の階層を出す方法

[この記事](https://qiita.com/emonuh/items/28dbee9bf2fe51d28153)を参考に、[zap](https://github.com/uber-go/zap)というログライブラリを使ってみました。
その時にログ出力されるCallerの情報についてハマったことをメモとして残します。

# おさらい

* よく見かけるmainに記載するコーディング例で実行した場合を記載します。
* 出力例からわかる通り`main/main.go:30` という内容が出力されます。
* これはzapのログを出力したファイルのディレクトリ、ファイル、行が出力されており、トレースしやすい内容となっています。

“`go
package main

import (
“go.uber.org/zap”
“go.uber.org/zap/zapcore”
“time”
)

func main() {
conf := zap.Config{
Level: zap.NewAtomicLevelAt(zap.DebugLevel),

元記事を表示

LeetCodeに毎日挑戦してみた 168. Excel Sheet Column Title(Python、Go)

#### Leetcodeとは

[leetcode.com](https://leetcode.com/)
ソフトウェア開発職のコーディング面接の練習といえばこれらしいです。
合計1500問以上のコーデイング問題が投稿されていて、実際の面接でも同じ問題が出されることは多いらしいとのことです。

golang入門+アルゴリズム脳の強化のためにgoとPythonで解いていこうと思います。

#### 38問目(問題168)

#### 168. Excel Sheet Column Title

#### 問題内容

> Given a positive integer, return its corresponding column title as appear in an Excel sheet.
>
> For example:
>
> “`
> 1 -> A
> 2 -> B
> 3 -> C
> …
> 26 -> Z
> 27 -> AA
> 28 -> AB
> …
> “`
>
> **Exa

元記事を表示

Go言語の環境構築

# 環境構築に必要なもの
Go、VisualStudioCode、Goの拡張機能の3つをインストール

### ❶Goのインストール
Goは、homebrewを使ってインストール

“`
ターミナルを開く
spotlightからターミナルを検索して起動
$ brew update
$ brew install go
“`

まず、homebrewを最新バージョンにしておく
### ❷確認
“`
$ go version
“`

次のコードを実行して、goがインストールされているか確認
バージョンが返ってくれば、インストールされていることが確認できる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/958284/1a1ad428-6cc3-7fd1-2b15-e4d8cc57b3ab.png)

### インストールページから
[Goインストールページ](https://golang.org/doc/install)

インストール後にちゃんとできているか❷と同様に確認

“`

元記事を表示

Go言語について触れてみる

# Go言語とは

“`
2009年にGoogleが開発したプログラミング言語
“`

Androidアプリの開発、iOSアプリの開発も可能

ちなみにGo言語の正式名称は「Go」
それだけだと別の意味にとらえられてしまうので、GolangやGo言語と呼ばれることが多い

# C言語の生みの親が開発した言語

Go言語はUNIXの開発に携わったロブ・パイク氏と
UNIXの開発とC言語を開発したケン・トンプソン氏が設計

Go言語はC言語を意識しながら設計されている言語で、C言語並みに処理が高速で、C言語以上にシンプルに記述することができる
時代に合わせ、より便利に使えるようにした新しいC言語。それがGo言語だと言える

# コンパイラ言語

“`
Go言語は、コンパイラ言語
“`

### コンパイラ言語とは
機械語に一括して変換してから実行するプログラミング言語のことで
処理が高速という特徴がある

その高速に処理できるコンパイラ言語の中でも、Go言語はより高速に処理ができる
JavaやC#は、仮想マシンを介して実行されるのに対して、Go言語は仮想マシンを介さずに実行される

元記事を表示

キカガク流アルゴリズム論をGoで書く 素数判定

## やったこと
半年以上前に受講したudemyの講座をGo言語でやってみる。

【キカガク流】プログラミング力向上のためのPythonで学ぶアルゴリズム論(前編)
https://www.udemy.com/course/algorithm1/

## この講座の学び

– いきなり書き始めないで、言葉で処理を組み立てる。
– はじめは最小の範囲で組み立てる。
– とりあえず動くコードを書く。
– そこからリファクタリングし、より品質を上げる。(今回はスピードの向上)

## お題:素数判定

– 受け取った値までのすべての素数を表示するプログラムを作成する。
– 以下のような結果を期待する。

“`
> go build main.go
> ./main
100 <-入力 1 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 <-出力 ``` ## 1回目 とりあえず動くところまで作ってみる。 #### 処理の順序 i = 判定される数字 s = 判定するために割る数字 1. 2

元記事を表示

Go 言語スプレッドシートライブラリ:Excelize 2.3.2 がリリースされました

![Excelize.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144042/dcae5ad8-91ba-38ab-2d64-6d0d6c3c3260.png)

[Excelize](https://github.com/xuri/excelize) は、純粋な Go で記述されたライブラリで、XLSX / XLSM / XLTM ファイルの読み書きを可能にする一連の関数を提供します。Microsoft Excel™ 2007 以降で生成されたスプレッドシートドキュメントの読み取りと書き込みをサポートします。 高い互換性により複雑なコンポーネントをサポートし、大量のデータを含むワークシートからデータを生成または読み取るためのストリーミング API を提供します。

場合によっては、既存の Excel ドキュメントコンテンツの読み込み、新しい Excel ドキュメントの作成、既存のドキュメント(テンプレート)に基づく新しい Excel ドキュメントの生成、Excel ドキュメントへのイ

元記事を表示

文系卒がSlerからWeb系自社開発(Go/AWS/機械学習)に転職した話

##はじめに

はじめまして。ソラと申します。
最初に簡単に私の自己紹介をさせてください。

##自己紹介

・大学の専攻は経済系
・Slerに入るまでパソコンについては何もわからない状態(ブラインドタッチもできない)
・Sler3年弱 (大きな開発経験はなし。業務用にエラー解析ツール等はNode.jsでスクラッチから個人で開発していた)

といった状態で転職活動を始めました。

私が今回の転職で大事にしていた軸は__「これ開発したい!と思えるくらい好きになれるプロダクトがあり、今後も新たなプロダクト/サービスを開発しようとしてる(する気がある)自社開発企業」__でした!

エンジニアとして今後力をつけるためにも、今後新規サービスの開発、新規サービスのテックリード、などを経験できる可能性がある企業がいいなと思ったので、上記の軸を設定しました!
そして私は自社開発企業で働きたかったので、受託の要素がある会社は見ない・受けないようにしました!達成したい目標以外のものを全て捨てて、達成したい目標のみにフォーカスするのが大切だと私は思ったので、受託は受けなかったです。※自社開発+受託の企業も受

元記事を表示

QiitaAPIでインフラエンジニアyutaさんのストック記事を取得する

インフラエンジニアyutaさんが主催のオンラインサロンで実施したもくもく会の時間で作ったプログラムになります。
GoでAPIを利用して情報を取得するための勉強をしていた時に作りました。

ソースコード

“`go:main.go
package main

import (
“encoding/json”
“fmt”
“io/ioutil”
“log”
“net/http”
)

type Item struct {
Title string `json:”title”`
User Users
}
type Users struct {
Name string `json:”name”`
}

func main() {
targetName := “yuta_vamdemic”
getUrl := “http://qiita.com/api/v2/users/” + targetName + “/stocks?page=1&per_page=5”

resp, err := http.Get(getUrl)
if err != nil {

元記事を表示

AWS AmplifyでLambdaを使うwith Go

Amplifyはちょくちょく使う機会があるのですが、Amplifyを介したLambdaってほぼ使った事ないぞ、と思ったので使ってみようと思い立ちました。
そしてLambdaでGoが使えるけど、ちゃんと使った事なかった気がするので使ってみたいなとついでに。

# Functionが使えるらしい
FUNCTIONS – Overview
https://docs.amplify.aws/cli/function

## 環境

– win10 Home(surface go) + WSL2 + ubuntu18.04
– node v14.1.0
– npm 6.14.5
– go version go1.10.4 linux/amd64

# 使ってみる

## 前置き

vueを使う設定にてamplifyをsetupしておきます。
詳しくはこのあたりから。
https://docs.amplify.aws/start/getting-started/installation/q/integration/vue

“` bash
$ vue create myamplifyprojec

元記事を表示

vim学習ゲーム「PacVim」をGoで作ってみた

## 前置き
パックマンをvimコマンドで操作するゲーム「[PacVim](https://github.com/TurtleBuild/pacvim)」をGoで作ってみました。

Goなので、バイナリをダウンロードしていただければ簡単に実行できます。
https://github.com/TurtleBuild/pacvim/tree/master/bin

興味があれば遊んでみてください。
趣味で作った程度のものなので期待しないでください。。。

## ゲーム仕様
![objects.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7342/c3aed761-439a-738f-9cf7-5d0c948b0a66.png)

### オブジェクト
| char | what it does |
|:-:|:-:|
| o | 餌 |
| X | 毒 |
| G | ゴースト |

### ゲーム状態
| state | conditions |
|:-:|:-:|
| ゲームクリア |

元記事を表示

AtCoder Beginner Contest 187のメモ

# 前置き

Atcoderをやってみたので、自分用のメモです。
あとから加筆・修正する予定です。

# 問題

https://atcoder.jp/contests/abc187

# A

“`Q_A.go
package main

import (
“fmt”
“strconv”
“strings”
)

func main() {
var A, B string
fmt.Scanf(“%s %s”, &A, &B)
A_ := strings.Split(A, “”)
B_ := strings.Split(B, “”)

a_1, _ := strconv.Atoi(A_[0])
a_2, _ := strconv.Atoi(A_[1])
a_3, _ := strconv.Atoi(A_[2])
a := a_1 + a_2 + a_3

b_1, _ := strconv.Atoi(B_[0])
b_2, _ := strconv.Atoi(B_[1])

元記事を表示

Goでオウム返しするLINEBOTを作ってみた

以下のサンプルプログラムを参考にしてオウム返しするLINEBOTを作ってみました。
https://github.com/line/line-bot-sdk-go/blob/master/examples/echo_bot/server.go

AWSやHerokuにデプロイするのは面倒なので、ngrokを利用してローカル端末からサービスを外部に公開しました。
あとは、GitHubでプログラムを公開するときにチャネルトークンなどを公開するのは好ましくないので、iniファイルから取得するようにしました。

プログラム

“`go:main.go
package main

import (
“fmt”
“log”
“net/http”
“os”

“github.com/line/line-bot-sdk-go/linebot”
“gopkg.in/ini.v1”
)

type Config struct {
channelSecrt string
channelToken string
}

var Cnf Config

func init()

元記事を表示

GoのRDBアクセスライブラリ(go-pg/pg)の紹介

# はじめに
GoのRDBアクセスライブラリ、皆さんは何を利用していますでしょうか。
今回見つけた[go-pg/pg](https://pg.uptrace.dev/)が、自分的にめちゃくちゃイケてたので紹介します。

go-pg/pgの日本語記事の第一号です!!(自分調べ)

# [go-pg/pg](https://pg.uptrace.dev/)とは
名前からもお察しの通り、PostgreSQLに特化したDBアクセスライブラリです。
次項に記載しますが、私が調べた中でもっとも機能が充実していました。

Document: https://pg.uptrace.dev/
Pkg: https://pkg.go.dev/github.com/go-pg/pg/v10
Git: https://github.com/go-pg/pg

# 機能

## その前に

以下のような機能をもつDBライブラリってあるのかなと調査したのが、そもそもの発端でした。

1. SELECTはRawSQLで書きたい(ORMは読みにくい)
1. RawSQLでは変数名でバインドしたい
1. Insert

元記事を表示

Go言語によるWebアプリケーション開発_ハンズオン1日目

この参考書の内容をハンズオンしながら理解不足な箇所をまとめました。
https://www.oreilly.co.jp/books/9784873117522/
サンプルプログラムはGitHubで提供されています。
https://github.com/oreilly-japan/go-programming-blueprints/tree/master/chapter1/chat

チャットアプリケーションを作るアウトライン

・HTMLを提供するWebサーバを作成する
・チャットメッセージのやり取りをする機能を追加する

利用パッケージまとめ

パッケージ名 詳細
net/http HTTPクライアントおよびサーバーの実装を提供
text/template テキスト出力を生成するためのデータ駆動型テンプレートを実装
html/template<

【Go言語】OpenWeatherMapとTwitterAPIを使ってお天気情報をラズパイから定期的にツイートさせる

#やったこと
Go言語で特定の地域の天気と気温をツイートするアプリを作り、Raspberry Pi 4上からcronで自動実行させるようにしました。
OpenWeatherMapとTwitterAPIを利用しています。

#環境
・macOS Catalina 10.15.7(開発と動作確認時)
・Raspbian 10.6(Raspberry Pi 4B)
・go 1.15.2

#流れ
1.TwitterのAPIアカウント申請 & App作成
2.TwitterアプリのApp Permissons設定をReadからRead & Writeに変更
3.OpenWeatherMapのアカウント作成 & APIキーの取得
4.Go言語でツイートアプリ作成
5.作ったアプリをラズパイ向けにビルド & 配置
6.cronを使ってラズパイから自動実行させる

#1.TwitterのAPIアカウント申請 & App作成
[Developerページ](https://developer.twitter.com/en/apps/)から開発者申請とTwitterアプリケーション作成を行い、API

2020年から始めた個人開発で作ったWEBアプリとスマホアプリを振り返る

# 前置き

いつかやるぞーと思って先延ばしにしまくっていた個人開発を2020年の初めごろにえいやでやり始めました。
1,2本のWEBアプリが作れたらいいなと思っていましたが、勢い余って2本のWEBアプリと1本のスマホアプリを作りました。
宣伝もかねて投稿します。何かしら深堀りしたい内容がありましたらコメントよろしくお願いいたします。

# Band Summary(β)
[https://bandsummary.com/](https://bandsummary.com/)

![bandsummary.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/662111/e6a8fee7-b20e-50fe-05d4-87b0ec93c71e.png)

## どういうものか

ライブ情報を投稿管理でき、リンクを追加したらいい感じにまとめてくれるサービス
リンクツリー+バンドのライブ情報を投稿、管理なイメージ

## 開発経緯

(周りの)インディーズバンドでホームページがないバンドが多くて、どこを調べたら

【OSS】api_gen 公開

# はじめに
– 決められたフォーマットで記述したGoの構造体からを自動生成するジェネレータがv1.0.0迎えたからアウトプットする回(12/31時点でv1.6.1)
– コントローラーを生成するserver_generator、API疎通するためのTypeScriptを生成するclient_generatorの2種類がある
– 基本的には構造体を書くだけ
– (beta) 生成後のコントローラーにある程度swaggoに対応したgodocも挿入されている為、調整すればSwaggerコードも自動生成できる
– [リポジトリ(go-generalize/api_gen)](https://github.com/go-generalize/api_gen)

# こんな方向け
– **Goコード正義**でAPIコントローラー/クライアントを自動生成したい
– エンジニア間でバックエンドとフロントエンドのI/Fを合わせるのがめんどくさい
– バックエンドでルーティング、フロントエンドでAPIリクエストを実装ごとに書くのが辛い

こんな人達に向いている

# とりあえず試す

Raspberry Pi 4でUbuntuデスクトップを動かして遊ぶ

# はじめに

Raspberry Piはこれまでにも少し触ったことがありましたが,Raspberry Pi 4になってRAMが4GBになり,さらに秋ころにUbuntuデスクトップが正式対応されたと聞いたので,単純に動かして遊んでみたときのメモです.

# やってみたこと

基本はRaspberry Pi 4上でUbuntuデスクトップ(GNOME 3)を動かしてみただけです.あとはリモート操作できるようにや,ちょっとしたプログラミング環境を作ってみました.

* Ubuntu Desktop 20.10をインストールして動かす
* ChromiumをインストールしてYouTubeを見てみる
* リモート接続環境のセットアップ(SSH,VNC)
* Visual Studio Codeをインストールして動かす
* PythonでHello world
* GoでHello world(Windowsでクロスコンパイルしてラズパイで動かす)

# 準備したもの

* Raspberry Pi 4 4GB(スターターキット)
* タッチディスプレイ 7インチ
* キーボード・マウス
* ス