Go関連のことを調べてみた2019年11月20日

Go関連のことを調べてみた2019年11月20日

[Golang]strings.Join関数の中身を、初学者向けに解説してみた

# はじめに

今日は、標準パッケージでもよく使われる関数、`strings.Join`関数について中身を見てみたいと思います。

# 公式のコード

まずは、コードを貼っておきます。

“`golang
// Join concatenates the elements of a to create a single string. The separator string
// sep is placed between elements in the resulting string.

func Join(a []string, sep string) string { // => A
switch len(a) { // => B
case 0:
return “”
case 1:
return a[0]
}
n := len(sep) * (len(a) – 1) // => C
for i := 0; i < len(a); i++ { n += len(a[i]) } var

元記事を表示

Go言語のインストール方法(Mac)

## はじめに

私の感覚ですが、Vimを使っている人はGo使いが多い気がします。
私もVimを使いたいのでGoを書くことにします。(手段が目的)

## 「Go言語」とは?

Googleが2009年に発表した、オープンソースのプログラミング言語です。

## 環境

– OS:macOS Catalina 10.15
– Go:1.13.4

## セットアップ

### インストール

公式サイトからパッケージファイルをダウンロードします。
https://golang.org/dl/

スクリーンショット_2019-11-19_22_47_36.jpg

パッケージファイルを実行し、ウィザードに従ってインストールします。

[続ける]をクリックします。
スクリ</p></blockquote>
</blockquote>
<aside class='widget widget-post'>
<div class='tag-cloud-link'>Go</div>
<div class='tag-cloud-link'>Mac</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/uhooi/items/f1bca01d76080d82fbef'>元記事を表示</a></div>
<h3 id=【Go】Qiita 週間ストック数ランキング【自動更新】

## 他のタグ

– [【Python】Qiita 週間ストック数ランキング【自動更新】](https://qiita.com/kou_pg_0131/items/01127f188250a2d68dbf)
– [【Ruby】Qiita 週間ストック数ランキング【自動更新】](https://qiita.com/kou_pg_0131/items/6e5603cb6155c1d91f71)
– [【Rails】Qiita 週間ストック数ランキング【自動更新】](https://qiita.com/kou_pg_0131/items/e94bfc7467c96ff2c7f2)
– [【Go】Qiita 週間ストック数ランキング【自動更新】](https://qiita.com/kou_pg_0131/items/269fec563f49f0eb2bcd)
– [【Swift】Qiita 週間ストック数ランキング【自動更新】](https://qiita.com/kou_pg_0131/items/a6dc270783ec6e68e8a8)

## 集計期間

2019年11月14日 –

元記事を表示

GKE上にwebアプリケーションを構築する方法

記事の目的

– GKEについての紹介
– 簡単なwebアプリケーションを構築して、GKEにデプロイする方法の紹介

# A. GKEの概要

Googleを中心に開発されているDockerコンテナの管理ソフトウェアKubernetes(k8s)のクラスタを簡単にデプロイできるサービスです。Dockerコンテナの実行にはGCE(Google Compute Engine)を利用します。

各基本概念

## クラスタ(Cluster)

クラスタは1つの小さいクラウドと考えることができます。なぜかと言うとクラスタの中でVMからネットワーク、アクセス権限など色々なリソースを設定とコントロールできるからです。

クラスタは複数Nodeで構成されて、各Node間に内部ネットワークがあります。
![devsamurai_gcp_gke_kubernetes_001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535698/05332f9d-b053-d2d5-0552-34213172c8dc.png)

元記事を表示

【Go】AWS SSMパラメータストアの値を取得する

## サンプルコード

今回はAWS SSM パラメータストアに以下のようなパラメータが作成してある。

| パラメータ名 | 値 |
| —————- | ———- |
| sample-parameter | HOGEHOGE!! |

“`go
package main

import (
“fmt”

“github.com/aws/aws-sdk-go/aws”
“github.com/aws/aws-sdk-go/aws/session”
“github.com/aws/aws-sdk-go/service/ssm”
)

func main() {
svc := ssm.New(session.New(), &aws.Config{
Region: aws.String(“ap-northeast-1”),
})

res, _ := svc.GetParameter(&ssm.GetParameterInput{
Name: aws.String(“sample-para

元記事を表示

GCP – Google App Engine(GAE)入門

# Google App Engine(GAE)
GAEはGoogleが提供するPaaS(Platform as a Service)サービスです。
PaaSとはアプリケーションが動作するためのハードウェアやOSなどのプラットフォーム一式を、インターネット上のサービスとして提供する形態のことを指します。メンテナンスやスケーラビリティなどを意識する必要がないためインフラ面の作業コストが削減され、アプリ開発に専念できる点が特徴です。

# GAEの種類
GAEには以下の二つの実行環境が用意されています。

– GAE SE(Google App Engine Standard Environment)
– GAE FE(Google App Engine Flexible Environment)

## スタンダード環境(GAE SE)とフレキシブル環境(GAE FE)の違い
スタンダード環境(GAE SE)ではGoogleが管理する専用インスタンスを利用しますが、フレキシブル環境(GAE FE)ではGCE(※)上のDocker コンテナ上でアプリケーションを動作させます。

メンテナン

元記事を表示

【GitHub Actions】Go言語の自動テストからリリースまでを作ってみた

## はじめに

今回作成したのはGo言語リポジトリ用ワークフロー。
GitHubに指定されたタグがPushされた時点でテストを実行し問題が無ければ、クロスコンパイルを実施しリリースまで行う。
以下にアップロードしているので利用したい方はこちらからどうぞ。

– [github-actions-workflows/release_go.yml at master · x-color/github-actions-workflows · GitHub](https://github.com/x-color/github-actions-workflows/blob/master/workflows/release_go.yml)

ワークフローの流れは以下となっている。

1. タグがPushされたことをトリガーにワークフローが起動
1. 依存したモジュールをダウンロード
1. テストを実施
1. テストに合格した場合、リリースプロセスが始動
1. ソースコードをzipにまとめリリース
1. クロスコンパイルを実施し、それぞれ生成物をzipにまとめてリリース

以下が実際のworkfl

元記事を表示

Golang – Custom Zap Log

“`golang

w := zapcore.AddSync(&lumberjack.Logger{
Filename: “app.log”,
MaxSize: 1, // megabytes
MaxBackups: 30,
MaxAge: 30, // days
})

c := zapcore.EncoderConfig{
MessageKey: “msg”,
LevelKey: “level”,
TimeKey: “time”,
NameKey: “logger”,
CallerKey: “file”,
StacktraceKey: “stacktrace”,
LineEnding: zapcore.DefaultLineEnding,
EncodeLevel: zapcore.LowercaseLevelEncoder,
EncodeTime: zapcore.ISO8601TimeEncoder,
EncodeDu

元記事を表示

Golang – How to Get Local Mac and IP Address?

“`golang
//———————-
// Get the local machine IP address
// https://www.socketloop.com/tutorials/golang-get-local-ip-and-mac-address
//———————-

addrs, err := net.InterfaceAddrs()

if err != nil {
fmt.Println(err)
}

var currentIP, currentNetworkHardwareName string

for _, address := range addrs {

// check the address type and if it is not a loopback the display it
// = GET LOCAL IP ADDRESS
if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoop

元記事を表示

【golang】ネストしたstructに値を入れる方法

#概要
ネストしたstructに値を入れる方法と実践での注意点。
#記述方法
基本的には以下のルールで記述が可能。

“`golang:main.go
package main
import “fmt”

type A struct {
AKey1 string
AKey2 string
B
}

type B struct {
BKey1 string
BKey2 string
}

func main() {
// key:valueで記述が可能
var st1 = A{
AKey1: “val1”,
AKey2: “val2”,
B: B{
BKey1: “val3”,
BKey2: “val4”,
},
}

// keyの省略も可能
var st2 = A{
“val1”,
“val2”,
B{
“val3”,
“val4”,
},
}

//宣言してから 変数.key = val でも可能
var st3 = A{}
st3.AKey1 = “val1”
st3.AKey2

元記事を表示

gitコマンドのTypoをGopherくんが教えてくれるコマンドを作ってみた

# 概要

**※この記事を書いている途中に[こちら](https://qiita.com/ramenjuniti/items/fd502b4870f8e4ea87bb)が公開されびっくりしました。(まさかこの内容がピンポイントに被るとは…)**

最近go言語を勉強し始めたので、勉強がてらgitコマンドをgotとTypoしたときに、Gopherくんが教えてくれるコマンドを作成しました。

[https://github.com/aojiru-ts/Got-Gopher-kun](https://github.com/aojiru-ts/Got-Gopher-kun)

こんな感じです↓
![alt](https://github.com/aojiru-ts/Got-Gopher-kun/raw/master/img/ex.gif)

※コマンドプロンプトやPowerShellでは動かないみたいです…

# やったこと

[mattnさんの記事](https://qiita.com/mattn/items/b7889e3c036b408ae8bd)よりGopherくんが

元記事を表示

初見でGo言語Webアプリケーションをやってみる(POST JSON編)

# はじめに
Go初心者が、初見でWebアプリケーションを作るまでの過程をつづっていきます。

[初見でGo言語Webアプリケーションをやってみる(パラメータを受け取る編)](https://qiita.com/yutaka_m03/items/3345977dd0e252a153cd)の続き
今回は、APIでよく使うJson形式のPOSTをやってみます。

# 実装と結果
## 環境
macOS:Catalina
goバージョン:go1.12.9

## サンプルコード
「JSON形式でPOSTをして、同じ値をJSON形式で返す」という実装にしてみます。
JSONと同じ構造を`type xxx struct{ }`で定義してあげれば、変数に入れてくれます。

“`go:post_json.go
package main

import (
“github.com/gin-gonic/gin”
“net/http”
)

func main() {
router := gin.Default()
router.POST(“/post”, PostTest)
router.R

元記事を表示

[Golang][xorm]カラム指定は、Select関数+スライスが使いやすい件

# はじめに

ネット上にxormの情報が少ないので、少しでも共有したいと思います。
何かの参考にして頂けると嬉しいです。

# 結論のコード

“`golang
selectFields := []string{
“column1”,
“column2”,
“column3”,
“column4”,
“column5”,
“column6”,
“column7”,
“column8”,
“column9”,
“column10”,
}
session.Select(strings.Join(selectFields, “,”))
“`
※ `session` の部分には、 エンジンの起動などを行なっているという、都合の良い想定です(笑)

# 解説

あまり解説することもないですが、公式の使い方だと、

“`golang
session.Select(“column1”, “column2″,”column2”)
“`

といった感じになるかと思います。
これは、カラムが3つぐらいまでなら、読みや

元記事を表示

[Golang]Uint64をstringに変換するにはstrconv.FormatUint関数が便利な件

# はじめに

ググっていて、「intをstringにキャストする」…といったパターンはたくさん情報があったのですが、「uint64をstringにキャストする」といった情報が少なかったので、共有したいと思います。

# いきなり結論

“`golang:要所
s = strconv.FormatUint(i,10)
“`

i : `uint64` 型
s : `string` 型
コピペで使える全体のコードは以下の通りです。

“`golang:全体
package main
import(
“strconv”
“fmt”
)

func main(){
var i uint64 = 10

s := strconv.FormatUint(i,10)

fmt.Println(s +”abc”) // => 10abc
“`

# 解説

1行目で `uint64`で指定した変数`i` ですが、 `s := strconv.FormatUint(i,10)` ここで、string型にキャストされ `s` に代入されています。
最後に、 `abc` と足し算す

元記事を表示

Goにおける最適なディレクトリ構成はもはやこれだと思う

## はじめに

さも自分で考え付いたかのようなタイトルですが、『Standard Go Project Layout』と『ヘキサゴナルアーキテクチャ』を取り入れただけです・・・:pray_tone2:

大げさなタイトル1回やってみたかった・・・

簡単に記事の趣旨を説明すると、「Goっぽくて」・「DDDもやりやすくて」・「ヘキサゴナルアーキテクチャなので柔軟」なサンプルプログラム作ってみたよって記事です。

トランザクション周りも取り扱います。

## 『Standard Go Project Layout』とは

↓これです。
[Standard Go Project Layout](https://github.com/golang-standards/project-layout)

上記の内容を日本語で簡潔にまとめてくださってる記事もありました。
[Goにはディレクトリ構成のスタンダードがあるらしい。](https://qiita.com/sueken/items/87093e5941bfbc09bea8)

別の記事になりますが、こちらもとても参考になりました。
[Pra

元記事を表示

go langで超簡単な本の感想投稿機能を作成した

“`
番号を選んでください!
[1]レビューを書く
[2]レビューをみる
[3]アプリ終了

“`

ターミナルでこんな表示が出てきて
1を押すと、本のtitle,genre,revieを書く。
2を押すと、保存した本のtitleなどがみれる仕様。

完成コード

“`go
package main
import (
“fmt”
“bufio”
“os”
“strconv”
“log”
)

func input()(result string) {
//scannerを使う
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
result = scanner.Text()
return result
}

type R1 struct {
title string
genre string
review string
}

func write_review() map[string]string{

fmt.Println(“本のタイトルを入力”)
title := input()
fm

元記事を表示

slice のメモリ容量比較サンプル

## このページについて

go でよく話題に上がるsliceで事前に容量を渡す場合とそうでない場合で
どの程度パフォーマンスに差分があるか簡単に見れるように試してみました。

## 内容

**サンプルコード**

“`go:main.go
package slices

func AllocationSlice(from []string, to []string) {
for _, item := range from {
to = append(to, item)
}
}
“`

**ベンチマークコード**

“`go:main_test.go
package slices

import “testing”

func StrSlice(num int) []string {
re := make([]string, num, num)
for idx, _ := range re {
re[idx] = “a”
}
return re
}

func BenchmarkAllocationSlice(b *testing.B) {
type a

元記事を表示

AtCoder Beginner Contest 145 参戦記

# AtCoder Beginner Contest 145 参戦記

## A – Circle

1分で突破. 書くだけ.

“`python
r = int(input())

print(r * r)
“`

## B – Echo

3分半で突破. 長さが偶数であることを確認することを忘れなければいいだけ.

“`python
from sys import exit

N = int(input())
S = input()

if N % 2 == 1:
print(‘No’)
exit()

if S[:N // 2] == S[N // 2:]:
print(‘Yes’)
else:
print(‘No’)
“`

## C – Average Length

8分で突破. すべての組み合わせの距離の合計を平均を取ればいいのかなって思って書いたら入力例が通ったので提出したら AC 出たけど、解説を読むとまぐれで通っただけかってなった.

“`python
from math import sqrt

N = int(input

元記事を表示

AtCoder 第二回全国統一プログラミング王決定戦予選 参戦記

# AtCoder 第二回全国統一プログラミング王決定戦予選 参戦記

## A – Sum of Two Integers

2分で突破. 書くだけ. ARC の A 問題ってこんなに簡単だっけかと混乱した.

“`python
N = int(input())

print((N – 1) // 2)
“`

## B – Counting of Trees

68分半で突破. WA 6個. WA2個が中々消えずに WA を重ねてしまった. その2個は0が複数あるやつだった…….

“`python
from sys import exit

N = int(input())
D = list(map(int, input().split()))

if D[0] != 0:
print(0)
exit()

c = {}
for i in D:
if i in c:
c[i] += 1
else:
c[i] = 1

if c[0] != 1:
print(0)
exit()

result =

元記事を表示

Goで簡単なWeb APIを作ってみた

# はじめに
Goで簡単なCRUD操作ができるWeb APIを作ってみました。悩んだところとか勉強が足りないなと思ったところを備忘録として。しょうもないコードでも実際に手を動かしてみて気付くことが多々ありますね…

**GoでWeb APIを作製する方法を解説する記事ではなく、個人的な学習の記録なのであしからず。**

# 結論
– 設計、構成、パッケージやファイル名、関数の命名、関数の切り分け等、そのへんの知識・経験が皆無。 → 「行き詰まったら考える」を繰り返したせいで完成したコードがぐちゃぐちゃ。

– GORMが全然使いこなせない。 → DB操作するのに毎度構造体を作り直したり、値を入れ替えたりして無駄が多すぎる。 DB操作用の関数を切り分けようとしたときにどう分ければいいのか全くわからない。 次はもっと薄めのORMも試してみたい。

全てはアウトプットが足りないということ。
[コードはこちら](https://github.com/bschafh/todoapi)

# ディレクトリ構成
“`
todoapi
├── README.md
├── controllers

元記事を表示

OTHERカテゴリの最新記事