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

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

GoLand IDEをUbuntuにインストール

無料バージョンではありますが、GoLandエディタを自分のUbuntu環境にダウンロードしてみました。
参考にしたのは以下のサイトです。
[Install Jetbrains GoLand Go IDE on Ubuntu](https://linuxhint.com/install_jetbrains_goland_ubuntu/)
[在Ubuntu安装JetBrains Goland IDE](https://blog.csdn.net/jianming21/article/details/106409772)

snapdを使ってダウンロードする方法もありますが、今回はサイトからダウンロードする方向でいきました。

## 前提

– 環境がUbuntu
– Goはローカルにすでにダウンロード済み

## ダウンロード

Linux用のバージョンをこちらでダウンロードします。
https://www.jetbrains.com/ja-jp/go/download/#section=linux

ダウンロードしたら展開して `opt`フォルダに移します。
もちろん他のところでもOKら

元記事を表示

GoのHTTP実装を読んだ知見をまとめる~Channel編~

# はじめに
前回に引き続き、GoのHTTP実装と絡めて書く。今日はChannel。
経緯は[こちら](https://qiita.com/behiron/items/78d023be96058224e583#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB)

# Channel
Goにはunbuffered channelとbuffered channelの2種類があります。
unbuffered channelの場合、send/recvどちらかがreadyになっていない場合ブロックされることから可能な限りbuffered channelを使うことが好まれ、GoのHTTP実装でもbuffered channelが多く使われています。

が、buffered channelの場合、send/recvの後に処理を続けても実際に相手側が処理をしているとは限らないため、注意しないといけない場合があります。

それをとても簡単に示した例が以下となります。

以下では、

`resc: make(chan responseAndError)`が利用されており、unbuf

元記事を表示

サイト「Go から Azure 仮想マシンをデプロイする」をやってみた

サイト「[Go 開発者向けの Azure | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/developer/go/)」の「クイックスタート」の「[Go から Azure 仮想マシンをデプロイする | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/developer/go/azure-sdk-qs-vm)」をmacOS上にて実際に動作させてみました。

## 前提条件

本文中にて、IDなど具体的な値や項目は日本語テキストに置き換えたり省略してあります。

## [Azure Cloud Shell を起動する](https://docs.microsoft.com/ja-jp/azure/developer/go/azure-sdk-qs-vm#launch-azure-cloud-shell)

私はAzure Cloud Shellを使用せず、ローカルにAzure CLIをインストールして動作させました。

Azure CLIのインストール手順は、次の

元記事を表示

Go製のtcardgenでHugoで作ったブログのOGPを自動生成してみた

※これは自作ブログに投稿したものと同じ記事です。
[tcardgenでHugoで作ったブログのOGPを自動生成してみた](https://biwashi.github.io/blog/blog/tcardgen-hugo/)

# はじめに

ブログを作成しても読んでもらわないとあまり意味がないわけで、そういう意味でもTwitter CardなどのSNS共有時の目を引く画像は重要なわけです。
と、いうわけで、今回はGo製の`tcardgen`というライブラリを使用して、OGP作成を行ってみました。
[tcardgen](https://github.com/Ladicle/tcardgen)
↑こんな感じのTwittterCardを作ってくれるやつですね。

# 準備
## install

`go get`でインストールする

“`go
$ go get github.com/Ladicle/tcardgen
“`

`README.md`が`kinto`とうフォントを使うように言っているのでダウンロードする

[ookamiinc/kinto: 均等 — Kinto is a

元記事を表示

Azure SDK for Goのセットアップ(macOS編)

サイト「[Go 開発者向けの Azure | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/developer/go/)」の「クイックスタート」を始めるにあたり、コマンドラインツールで実行しようとすると、

– Azure CLI(macOSの場合:要 Homebrew)
– Azure SDK for Go

のインストールが必要となります。本記事では、次のサイト記事を参考にして、これらのセットアップ手順を自分メモとしてまとめました。

– [Azure SDK for Go を使用する開発者向けのツール | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/developer/go/azure-sdk-tools)
– [Azure SDK for Go のインストール | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/developer/go/azure-sdk-install)

## 事前準

元記事を表示

Go言語-ポインタ

# ポインタ
プログラミング基本からGoの理解を文字におこして行こうと思います!

### ポインタとは
アドレスは値
整数や文字列のように操作したり変数に代入することができる
Goではアドレスをポインタと呼んで扱っている
ポインタが代入された変数をポインタ型変数という

### ポインタ型変数の定義
“`go
func main() {
name := “tanabe” //nameの値がstring型なので*string型になる

var namePtr *string = &name
fmt.Println(namePtr)

//コンソール
0xc421100230 //ポインタが出力
“`

ポインタ型変数を定義するには
変数のデータ型に「*(アスタリスク)」をつけて宣言

ポインタ型変数namePtrを定義し、&nameで取得したポインタを代入している

### ポインタからアクセスする
“`go
func main() {
name := “tanabe”

var namePtr *string = &name
fmt.Println(

元記事を表示

Go言語-アドレス

# アドレス
プログラミング基本からGoの理解を文字におこして行こうと思います!

### アドレスとは
コンピュータにはメモリと呼ばれる作業場所のようなものが存在
変数はそのメモリに記録され、その場所をアドレスという

「0xc420010230」のように16進数で表現されることが多い
16進数とは、数字を数えるときに16で繰り上がるようにする数え方

### アドレスの取得
“`go
func main() {
name := “tanabe”
fmt.Println(name) //nameで値を取得
fmt.Println(&name) //&nameでアドレスを取得

//コンソール
tanabe
0xc421100230
“`
変数のアドレスを取得するためには、「&変数名」とする
メモリ上の記録する場所はコンピュータによって変わるため
プログラムを実行する度に違うアドレスを出力する場合もある

元記事を表示

Go言語-関数

# 関数
プログラミング基本からGoの理解を文字におこして行こうと思います!

### 関数とは
“`go
var input string
fmt.Println(“次の単語を入力してください:go”)
fmt.Scan(&input)
fmt.Printf(“%sと入力されました”, input)
“`
関数(かんすう)とは、「いくつかの処理をまとめたもの」
処理を関数にまとめると、何度でも使える

上記のコードをask関数にまとめる

### 関数の定義
“`go
func ask() {
var input string
fmt.Println(“次の単語を入力してください:go”)
fmt.Scan(&input)
fmt.Printf(“%sと入力されました”, input)
}
“`
関数は、「func 関数名()」と書く
「{ }」の中にまとめたい処理を書くことで関数を用意することができる

### 関数の呼び出し
“`go
func main() { //ask関数を呼び出す
ask()
}
func ask() {
var inp

元記事を表示

【環境変数】go getでパッケージがインストールされるディレクトリは$GOPATH/bin。設定していない場合は$HOME/go/binに入る。

どうも、たかふみです。
少し前から会社の同期とGoでLINEBotの開発を行なっています。

開発で使うライブラリをインストールするため、`go get`をした後、コマンドを実行したのですが`wire: not found`と表示されてしまいました。

**「`go get`でインストールしたものってどこにインストールされるんだっけ?」**ということで、今回は`go get`によるインストール先や$GOPATHについて調べた内容をまとめておきたいと思います!

### ■結論
`$GOPATH`を設定していなければ$HOME/binにインストールされる。
`go get`でインストールされたライブラリは$GOPATH/binにインストールされる。

### ■`go get github.com/google/wire/cmd/wire`を実行
DIライブラリ「wire」をインストールするために`go get`を実行。wireコマンドを実行したところ下記のように表示。

“`
/go/src/github.com/go-server-dev # wire
ash: wire: not

元記事を表示

【Golang】 よく使う関数のメモ

#この記事について
完全に自分用に書いているので説明は少なめで簡単な処理のものが多いですが、備忘録的に使うので随時更新します。

##stringからのキャスト
###`string` → `int`

“`go
func atoi(a string) (b int) {
b, _ = strconv.Atoi(a)
return
}
“`

###半角スペース区切りの `string` → `[]string`

“`go
func aToSlice(a string) (b []string) {
b = strings.Fields(strings.TrimSpace(a))
return
}
“`

###半角スペース区切りの `string` → `[]int`

“`go
func aToIntSlice(a string) (b []int) {
c := strings.Fields(strings.TrimSpace(a))
for _, v := range c {
d := atoi(v)

元記事を表示

GoのHTTP実装を読んだ知見をまとめる~Slice編~

# はじめに
業務での調査がきっかけにGoの[HTTP実装](https://github.com/golang/go/tree/master/src/net/http)を最近読み続けていて、やっとhttp実装の流れが大まかに理解できるようになった。

割と勉強になったことが多いのでその知見を複数回に分けて知見をまとめていく。
HTTP実装自体は意外にもかなり複雑なものとなっており、文面で説明づらいので、どちらかというと実装を理解した知見を汎化して書きたい。HTTP実装も紹介しやすい部分は適宜書きたい。

GoのHTTP実装とは、クライアントとサーバ両方含む。
TLS関連の処理やHTTP/2の実装は完全に読み飛ばしているので全く理解していない。HTTP1.0、HTTP1.1を対象とする。

初回はスライスである。

# GoのSlice

GoのSliceはゼロ値がnilなので内部構造としてはポインタであるように思いがちであるが、**構造体**である。以下がその定義である。

[定義](https://github.com/golang/go/blob/59bfc18e3441d9cd

元記事を表示

Go言語(net/http)でWebサーバーを作成(2)

前回の記事からだいぶ時間が経ってしまいました。
前回の記事は[こちらです](https://qiita.com/You-saku/items/ae99e61d551c41f66255)
本記事では golangでのhttp通信でhtmlファイルの表示をしてみます。

非常に説明が多いです。自分でサンプルコードを理解したのでそれを皆さんに共有できたらと思います。よろしくお願い致します。

今回の記事はあまり有益ではありません。執筆者自身もあまり良い記事だと思っていません。あくまで記録として執筆しました。

こちらのソースコードは書籍[「Go言語によるWebアプリケーション開発」](https://www.amazon.co.jp/Go%E8%A8%80%E8%AA%9E%E3%81%AB%E3%82%88%E3%82%8BWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E9%96%8B%E7%99%BA

元記事を表示

Go言語-fmt.Scan

# fmt.Scan
プログラミング基本からGoの理解を文字におこして行こうと思います!

### fmt.Scan
“`go
var input string
fmt.Scan(&input) //❶fmt.scan(&変数名)でコンソールに文字入力
}

//コンソール
Go //❷文字列を入力→❸変数inputに入力された値Goが代入
“`
fmt.Scan(&変数名)を使うとコンソールでの入力ができる
入力された値は変数inputに代入

### 入力の流れ
“`go
func main() {
var input string
fmt.Println(“次の単語を入力してください:go”) //❶
fmt.Scan(&input)              //❷
fmt.Printf(“%sと入力されました”, input)  //❸

//コンソール
//❶次の単語を入力してください:go
//❷go(コンソールで入力)           
//❸goと入力されました
“`
fmt.Scanを使うと入力ができるようになる

元記事を表示

AtCoder Beginner Contest 188のメモ

# 前置き

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

# 問題

https://atcoder.jp/contests/abc188

# A

“`Q_A.go
package main

import (
“fmt”
)

func main() {
var X, Y int
fmt.Scanf(“%d %d”, &X, &Y)

var flag bool = false
if X>Y{
if X-Y < 3{ flag = true } } else { if Y-X < 3{ flag = true } } if flag{ fmt.Printf("Yes\n") } else { fmt.Printf("No\n") } } ``` # B ```Q_B.go package main impo

元記事を表示

Go言語でCircleCIの環境変数の登録を自動化する

CircleCIで環境変数の登録を自動化するプログラムを書いたので、作成した内容を書いていきます。

# 課題
CircleCIの環境変数の設定の際にブラウザからポチポチして登録していたのですが、単純作業で登録が面倒なのと、誤操作により設定ミスが発生することがありました。

# CircleCIの環境変数について
まず環境変数の設定方法のバリエーションについてです。
大きくは、以下の6つのレベルで環境変数を設定することができます。今回の対象は、Project Environment Variablesの設定に関しての記事になります。
登録方法は、Build > Project > Settings で設定します。(もしこれ以外の登録方法をご存知の方がいらっしゃいましたら教えていただきたいです。)

– Global Environment Variables
– Project Environment Variables
– Job Environment Variables
– Container Environment Variables
– Step Environment Va

元記事を表示

【macOS】goenvを使用したGo(Go言語)のインストール

# 概要
**macOS**に**Go**(Go言語)をインストールする手順を記載しています。
GoのインストールにはGoのバージョン管理ツールである**goenv**を使用しました。
また、goenvのインストールには**Homebrew**を使用しています。
PATHを通す部分でつまずいたので、そこの解説も後半に記載しています。

#### [参考] 公式
– [Go](https://golang.org/)
– [goenv](https://github.com/syndbg/goenv)(github)
– [Homebrew](https://brew.sh/index_ja)

# 実行環境
– macOS Big Sur 11.1
– Homebrew 2.7.2

# インストール手順
### 1. Homebrewをアップデートする。
Homebrewをインストールできていない方は、こちらの[公式](https://brew.sh/index_ja)からインストールお願いします。

“`
$ brew update
“`

### 2. goenvのインス

元記事を表示

Go言語-randパッケージ

# randパッケージ
プログラミング基本からGoの理解を文字におこして行こうと思います!

### 処理結果をランダムに表示
“`go
package main
import “main/rand” //「fmt」と同様””で囲む

}
“`
ランダムな数を扱うためのmath/randというパッケージ

### 乱数の生成
“`go
package main
import “fmt”
import “main/rand”

func main() {
fmt.Println(rand.lntn(10)) //0~9の乱数を生成
fmt.Println(rand.lntn(10)) //0~9の乱数を生成
}

//コンソール
1
8
“`
「rand.Intn(10)」と書くことで、0~9までの10個の整数の乱数を生成できる

### 乱数の注意点
“`go
package main
import “fmt”
import “main/rand”

func main() {
for i := 1; i <= 5; i ++ { fmt.Prin

元記事を表示

Goでアルゴリズムを学ぶ@再帰呼び出し

Go基礎構文の理解と、アルゴリズム脳トレが目的です。

アルゴリズムについて

再帰呼び出しとは

処理の中で自分自身を呼び出すことを再帰呼び出しといい、その関数のことを再帰関数といいます。

ユークリッドの互除法とは

2つの整数の最大公約数を求めるアルゴリズムです。手法については引用します。
>入力を m, n (m ≧ n) とする。
n = 0 なら、 m を出力してアルゴリズムを終了する。
m を n で割った余りを新たに n とし、更に 元のnを新たにm とし 2. に戻る。
>>引用:https://ja.wikipedia.org/wiki/%E3%83%A6%E3%83%BC%E3%82%AF%E3%83%AA%E3%83%83%E3%83%89%E3%81%AE%E4%BA%92%E9%99%A4%E6%B3%95

サンプルコードその1

ひとまずコード載せます。

“`go
package main

import “fmt”

func main() {
num

元記事を表示

【Go】io.Writerについて見てみる

Goのio.Writer interfaceについて調べました。

## io.Writerとは
`io.Writer` は以下のようなinterfaceです。

“`
type Writer interface {
    Write(p []byte) (n int, err error)
}
“`

writeメソッドを持ちます。

## 色んなwriteメソッドを見かける

– ファイルの入出力
– connectionへの書き込み
– バッファへの書き込み

など色々なwriteメソッドがあります。

これは上記のwriteメソッドをfileやTCPConn,Bufferで実装しているので
それぞれの`ファイル` に関して書き込みが可能です。

## ファイルという考え方
先ほど、 `ファイル` という言い回しをしましたが、 `ファイルディスクリプター` というものがあります。
これは、 `OSがカーネルのレイヤーで用意している抽象化の仕組み` です。
具体的には、数値の識別子のようなもので

– 0:標準入力
– 1:標準出力
– 2:標準エラー出力

のように数値ごと

元記事を表示

Golang入門1

インストールからHello world!

本文はこちら

元記事を表示

OTHERカテゴリの最新記事