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

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

A Tour of GoのExercise: Mapsを解く

# 考えたこと

https://go-tour-jp.appspot.com/moretypes/23

まず設問を理解します。

> string s で渡される文章の、各単語の出現回数のmapを返す必要があります。

ふむふむ、どうやら単語の出現回数を数えるのがこの問題の趣旨らしい。

> Note: このテストスイートで何を入力とし、何を期待しているかについては、golang.org/x/tour/wcを見てみてください。

とあるので、[golang.org/x/tour/wc](https://github.com/golang/tour/blob/master/wc/wc.go)をみてみると、テストケースがわかります。

“`
{“I am learning Go!”, map[string]int{
“I”: 1, “am”: 1, “learning”: 1, “Go!”: 1,
}},
“`

ここまでくると全容が見えてきます。
“I am learning Go!”のような形式で入力が与えられるので、スペースで区切って、I とか am とかが何回出現す

元記事を表示

Goでapiを叩く

# はじめに
最近Nvimを使ってみたんですが、Nvimの設定ファイルであるinit.vimを編集するのに使い慣れているvsCodeVimを使いました。いつかNvimを使いこなしたいですまる
さて、バックエンドの勉強をしたくて最近Go言語に入門してみました。購入したGOの[書籍](https://www.amazon.co.jp/dp/4295000965?tag=maftracking247988-22&linkCode=ure&creative=6339)を読み終えて何か書きたくなったところで、JavascriptでやってたことをGoではどうやっているのか確かめてみようと思いました。
ということでGoで簡単なApiを叩いてみました。

# 書いてあること

– Unmarshalでjsonを解析する方法
– encoderで解析する方法

# 叩くApi
定番の[Open Weather Map](https://openweathermap.org/api) です。
まず、どんなJsonが返ってくるか確認します。

“`
curl http://api.openweatherm

元記事を表示

【よくある間違いを避ける】For-range ループで意図した値を Goroutine に渡す

## 参考

こちらの動画 ([Concurrency Made Easy (Practical Tips For Effective Concurrency In Go)](https://youtu.be/DqHb5KBe7qI?t=955) を参考にしています。
* コードを少し変えています。

## 問題

下記コードで出力される結果は何でしょうか?

“`golang
package main

import (
“fmt”
“sync”
)

func main() {
repos := []string{“aaa”, “bbb”, “ccc”, “ddd”}

sem := make(chan int, 4)

var wg sync.WaitGroup
wg.Add(len(repos))

for _, repo := range repos {
go func() {
defer wg.Done()
sem <- 1 fmt.Println(repo) <-sem }() } wg.Wait() close(s

元記事を表示

golangで、RedisのSorted Sets型のmemberに複数の値を保持したい

##初めに

普段はインターン先でフロントエンドでの開発を行なっているのですが、この度短期インターンでGoでのバックエンド開発を行うことになりました。
ゲームクライアントがすでに用意されていて、そのゲームのバックエンドを開発するというものです。
その中で、ランキング機能をRedisを用いて実装しようと思い、その時に軽く詰まったことを
備忘録として書いておこうと思います。

##Sorted Sort型について
今回初めてRedisを触り、Redisが持つ各データ型を調べている際に、Sorted Sorts型というまさにランキングに適した型を知りました。
この記事を読む方はすでにご存知かもしれませんが、簡単にRedisのSorted Sorts型について説明したいと思います。
ご存知の方は飛ばしていただけたらと思います。

RedisのSorted Sets型は、key単位で集合を定義することができ、それぞれのデータはMemberとScoreというフィールドを持ちます。
以下の図のイメージですね。
![image.png](https://qiita-image-store.s3.ap-

元記事を表示

【初心者向け】Go 言語の勉強法を具体的に教えるよ!(英語の参考情報が多め)

何かを学ぶとき、自分の

* 現状のスキル
* 目指すゴール

を明確にすることはとても重要です。

Go 言語の勉強に関しては、[Go Developer Roadmap](https://github.com/Alikhll/golang-developer-roadmap) を使って、何をどのタイミングで勉強するかの指針になると思います。

本記事では、もう少し具体的にどうしたら良いかを書いてみましたので、ぜひ参考にしてください!!

## 具体的なロードマップ

![GoStudyRoadmap.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/157574/f7ab73f2-f350-5aa5-1a02-7d61a969e8d3.jpeg)

## リンク集

### ウェブ

* [Cheat Sheet](https://github.com/a8m/golang-cheat-sheet): ダウンロードして手元に置いておく
* [A Tour of Go](https://tour.gola

元記事を表示

Go言語に入門する -MacOS * VSCode で開発環境を構築して”Hello World”を出力する-

# 目標

本記事の目標は下記です。

– MacOSにGo言語の開発環境を構築する。
– “Hello World” を出力する。

# 環境情報

“`
$ sw_vers
ProductName: macOS
ProductVersion: 11.2.2
BuildVersion: 20D80
“`

# 開発環境構築

# 1. GOをインストールする

“`
$ brew install go
“`

## 1.1. インストールできたことを確認する

“`
$ go version
go version go1.16 darwin/amd64
“`

# 2 VSCodeに拡張機能をいれる

## 2.1 MarketPlaceでgoと検索して、一番上に出てくる拡張機をインストールする

![スクリーンショット 2021-02-27 17.49.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487075/dd984e92-c980-aa56-1607-ae748c4b1d

元記事を表示

AtCoder Beginner Contest 193のメモ

# 前置き

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

# 問題

https://atcoder.jp/contests/abc193

# A

“`Q_A.go
package main

import (
“fmt”
)

func main() {
var A, B float32
fmt.Scanf(“%f %f”, &A, &B)

wariai := (A-B)/A *100

fmt.Printf(“%f\n”, wariai)
}
“`

# B
“`Q_B.go
package main

import (
“bufio”
“fmt”
“os”
“strconv”
)

var sc = bufio.NewScanner(os.Stdin)

func nextInt() int {
sc.Scan()
i, e := strconv.ParseInt(sc.Text(),10,32)
if e != nil {

元記事を表示

go get で “module declares its path as” のようなエラー

## エラー

“`bash
$ go get github.com/motemen/ghq
go get: github.com/motemen/ghq@v1.0.3 updating to
github.com/motemen/ghq@v1.1.6: parsing go.mod:
module declares its path as: github.com/x-motemen/ghq
but was required as: github.com/motemen/ghq
“`

## 解決策

“`bash
$ go get github.com/x-motemen/ghq
“`

## なぜ

motemen さんが x-motemen さんに改名した?

元記事を表示

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

#Visual Studio Code(ビジュアル スタジオ コード)略してvscodeをインストールしてプログラムを実行してみる。
![vs.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1134006/89bdcdaf-8d84-46f2-5c6f-ed2a419d51b0.png)
まず、**Japanese Language Pack for Visual Studio Code**(日本語翻訳)と**Go言語**の拡張機能を
vscode内で**インストール**しましょう。
![vs2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1134006/3a33b115-7546-679f-e5b9-e555c7792832.png)
新規フォルダからファイルを作成し、**run.go**という名前でコードを書いてみましょう。名前の**run**は実行を意味し、( **.** )ピリオドの後に拡張子の**go**

元記事を表示

取り出したデータを条件分岐してGoの多次元スライスに入れる方法

# はじめに

DBから取り出したデータを多次元構造にしてから処理する必要があったので実装を考えてみました。
例えば教科・科目を持つ学生のテーブルがあるとして、同じ教科・科目の組み合わせを持つ学生を同じ配列のなかに入れたいとします。

# プログラム

“`go
package main

import (
“fmt”
“sort”
)

type student struct {
studentID uint64
subjectAreaCode string
subjectCode string
}

func main() {
// テストデータ
students := []student{
{1, “001”, “002”},
{2, “002”, “003”},
{3, “003”, “004”},
{4, “004”, “005”},
{5, “001”, “005”},
{6, “003”, “004”},
{7, “004”, “005”},
}

// あとで隣り合うものを比較するため一旦並び替える

元記事を表示

【Go】環境構築と勉強方法

# Goでプログラミングの基礎を学ぶ #0
Goでコードを書く準備回です。
環境構築と、Goを勉強する入り口になるツールの紹介をします。

# はじめまして
昨年、未経験からエンジニア転職をしました。
転職にあたり、約2ヶ月、プログラミングスクールでHTMLやらCSSやらを学び、Ruby on Railsでアプリ開発をしましたが、即戦力!というわけにはいかず、勉強しながら、教えてもらいながら、なんとか業務を進めていました。

入社から4ヶ月くらい経ったある日、メンターの先輩から、
「プログラミングの基礎を勉強した方がいい。というか、絶対にして。」と言われ、
「配列とかは勉強しましたよ!」と返したら、
「じゃあ、Linked ListとかBinary Treeはわかる?」と聞かれ、
「…ナンデスカソレ:skull:」となったので、基礎の勉強をスタートさせました。

これから数ヶ月にわたり、プログラミングの基礎である、データ構造とアルゴリズム(Data structures & Algorithms)をシリーズ化して投稿したいと思います。
題して、**Goでプログラミングの基礎を学ぶ*

元記事を表示

Go言語+gRPCを初めから丁寧に解説してみた[ハンズオン]

## はじめに

この記事は、海外サイトhttps://tutorialedge.net/golang/go-grpc-beginners-tutorial/
の内容をベースに一部修正を加えたものです。この記事を読み進めることでGoでシンプルなgRPCクライアントとサーバーを構築することができるようになります。

![スクリーンショット 2019-05-24 7.53.10.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F221948%2F8bb0f734-4855-7c54-d318-3b4474aa7311.png?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&s=685b5ae9b714b2f9c812c398a9151436)

※[gRPC公式](https://www.grpc.io/docs/what-is-grpc/introduction/)より抜粋(また、

元記事を表示

Go Template、最高のプログラミング言語

# はじめに

[template](https://golang.org/pkg/text/template/) はGo言語標準のDSLですが、その構文は **`Brainf*ck`インタープリターを実装できる**ほど強力です。

[go-templateはチューリング完全?brainf*ck処理系を作ってみた – Qiita](https://qiita.com/Syuparn/items/2072207ec0565a80d2b2)

さらに、 [Masterminds/sprig](https://github.com/Masterminds/sprig) の関数を使うことでより高度な処理が可能[^1]になります。

これはもう**プログラミング言語としても遜色ない**のでは?
…**というわけで、プログラミング言語にしてみました**。

[GitHub – Syuparn/tmplscript: executable go-template command (like awk and jq!)](https://github.com/Syuparn/tmplscript)

G

元記事を表示

【初学者】Go言語 Lesson.1

##はじめに

今後面談予定の企業ではGo言語を使用中。
JavaやPHPやC言語等はよく見かけるが、私の応募する業界ではあまり拝見することがなかったため、学習をすることとした。
![column_main13619.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/780845/1385beed-3fa0-d6b7-e915-9fdfe65b0e72.png)

##Go言語とは
“`
  2009年に 「Google」 が 「プログラミングの環境改善」 を目的とし開発したプログラミング言語
“`
※ 正式名称は「Go」だが、これだけだと違う意味にとらえられるので、「Go言語」「Golang」と呼ばれている。

![スクリーンショット 2021-02-23 14.25.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/780845/ce66f579-1823-2daa-2681-ee76714280f2.png)

元記事を表示

【Go】メソッドを理解する〜メソッド・ポインタレシーバ・インターフェース〜

Goを学んでいてメソッドが出てきたんですが、関数とメソッドの違いとかポインタレシーバとかembeddedとか、なんか整理できなくなってきたのでこちらでまとめたいと思います。

また、この記事ではメソッドと関数と言う言葉は明確に使い分けしています。
## メソッドと関数の違い
とりあえず、下のサンプルコードを見たあとで説明をしていきます。
**関数**

“`go:関数
package main

import (
“fmt”
)

type Vertex struct {
X, Y int
}

func Calc(v Vertex) int {
return v.X * v.Y
}

func main() {
v := Vertex{10, 5}
fmt.Println(Calc(v)) // => 50
}
“`
**メソッド**

“`go:メソッドのsyntax
func(レシーバ引数 型) 関数名(引数: option) 返り値: option {
// コード
}
“`

“`go:メソッド
package main

import (

元記事を表示

【Go】構造体(struct)の基本を簡単に理解する

## 構造体(struct)とは
Goにはクラスは存在しないらしく、その代わりに構造体を使用します。
名前(フィールド名)と型(int型やstring型など)を持つ**フィールドの集まり**です。
メソッドや埋め込み(embedded)などといった機能も存在します。これらを含めると長くなってしまうので別の記事で紹介します。

### なぜ使うのか
例えば、ユーザーのデータがあるとします。
この各ユーザーには共通して「名前」「性別」「年齢」のデータが必要です。
もしも構造体を使わなければ、以下の様に1つ1つ宣言する必要があります。

“`go
var name string
var sex string
var age int
“`
しかし、これだとそれぞれ共通したユーザーデータなのに関連性が分かりません。(まとまりがない)
なので1つの**関連性のあるデータ**なのだと分かりやすくする為に構造体を使用します。

“`go:struct
type User struct {
Name string
Sex string
Age int
}
“`
上記の様に構造体を使う

元記事を表示

GitHubのTUIツールを作った

## 始めに
以前に [VimでGitHubを操作するプラグインgh.vimの紹介](https://qiita.com/gorilla0513/items/480d454ca74868eb07bd) という記事を書きました。
こちらの記事で紹介した`gh.vim`はVim上でGitHubの機能を使えるようにしたVimプラグインです。仕事でがっつりGitHubを使うならとても便利なプラグインと思っています。

しかしVimを使っていない人もたくさんいるので、そういった人向けのツールあったほうが良いかなと思い、GitHubのTUIツール [github-tui](https://github.com/skanehira/github-tui) を作りました。
CLIと比べ、TUIはインタラクティブに、そして直感的に操作できるというメリットがあるので便利なのではないかなと思っています。
余談ですが過去にDockerのTUIツール [docui](https://github.com/skanehira/docui) を作ったりもしました。

[github-tui](https://git

元記事を表示

UART を使ってマイコンボード – PC (Go のプログラム) 間で通信する

## ゴール

* UART がどんなものか何となくわかるようになる
* UART を使ってマイコンと PC で送受信ができるようになる
* UART を Go で使用して Windows から扱えるようになる

## 背景

マイコンボードで遊ぶにあたって、センサなど周辺モジュールは SPI や I2C のインターフェースとなっている事が多いです。
なので、今まで UART は知っていても使ったことがありませんでした。
今回は簡単な試作品を作成して、UART をマイコンで扱えるようにしてみようと思います。

## UART とは

UART は、自分の認識では一般的に Serial 通信を行うための I/F としてよく用いられると思っています。
Wikipedia による概要は以下です。

UART (Universal Asynchronous Receiver/Transmitter, ユーアート) は、
調歩同期方式によるシリアル信号をパラレル信号に変換したり、その逆方向の変換を行うための集積回路である。
本機能のみがパッケージングされたICで供給されるものと、マ

元記事を表示

AtCoder Regular Contest 113のメモ

# 前置き

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

# 問題

https://atcoder.jp/contests/arc113

# A

“`Q_A.go
package main

import (
“fmt”
)

func enum_dividors(AB int) int{

var num int = 0
var d int
for i:=1; i*i<=AB; i++{ if AB%i == 0{ num ++ d = i } } if (AB % d == 0) && (AB / d == d){ num = num * 2 - 1 } else { num = num * 2 } return num } func main() { var K int fmt.Scanf("%d", &K) va

元記事を表示

Sqlboilerの設定ファイルがうまく読み込まれない

# Sqlboilerの設定が正しいはずなのに読み込まれない。。
Go言語で[Sqlboiler](https://github.com/volatiletech/sqlboiler)を採用したのですが、設定周りで結構ハマってしまってしまったので、備忘録として記載します。
TOMLの設定正しいのに、なぜか読んでくれない。このエラー出る。。って人は参考にしてください。

“`
found key user in config, but it was not a string ()
“`

## SQLBoiler?
Go言語のORMです。
GORMと、SQLBoilerが大体有名どころみたいです。
GORMは、モデルファーストなフレームワークで評判も良さそうですが、すでにテーブル定義があったので、スキーマファーストらしいSQLBoilerをORMに使うことにしました。

## 使ってみる
sqlboiler.toml(yamlでもいいらしい)をルートに配置して、DBの接続設定を書くと、DBに接続してスキーマからモデルを生成してくれるツールです。
やりかたは[公式のReadm

元記事を表示

OTHERカテゴリの最新記事