- 1. Go言語*(ポインタ)を使う必要性の簡単な例
- 2. 日本語のオノマトペを3000個あつめてGAE/GoとFirebaseでサービスを作る
- 3. [Golang]strings.Join関数の中身を、初学者向けに解説してみた
- 4. Go言語のインストール方法(Mac)
- 5. 【Go】Qiita 週間ストック数ランキング【自動更新】
- 6. GKE上にwebアプリケーションを構築する方法
- 7. 【Go】AWS SSMパラメータストアの値を取得する
- 8. GCP – Google App Engine(GAE)入門
- 9. 【GitHub Actions】Go言語の自動テストからリリースまでを作ってみた
- 10. Golang – Custom Zap Log
- 11. Golang – How to Get Local Mac and IP Address?
- 12. 【golang】ネストしたstructに値を入れる方法
- 13. gitコマンドのTypoをGopherくんが教えてくれるコマンドを作ってみた
- 14. 初見でGo言語Webアプリケーションをやってみる(POST JSON編)
- 15. [Golang][xorm]カラム指定は、Select関数+スライスが使いやすい件
- 16. [Golang]Uint64をstringに変換するにはstrconv.FormatUint関数が便利な件
- 17. Goにおける最適なディレクトリ構成はもはやこれだと思う
- 18. go langで超簡単な本の感想投稿機能を作成した
- 19. slice のメモリ容量比較サンプル
- 20. AtCoder Beginner Contest 145 参戦記
Go言語*(ポインタ)を使う必要性の簡単な例
##背景
– Go言語のプロジェクトでよく*(ポインタ)を見かける。
例1
“`golang
func setName(user *User,name string){
user.username = name
}
“`例2
“`golang
type (
Users []*User
)
“`– ではなぜそうなるでしょうか?
##結論
*(ポインタ)を使わないと構造体(struct)の値が編集できない ***###例1 *(ポインタ)を使わず、structを編集する
“`golang
type User struct {
username string
password string
}type (
Users []User
)func setName(user User,name string){
user.username = name
}func (user User) setName(name string){
user.username = name
}func main(){
changeTheValu
日本語のオノマトペを3000個あつめてGAE/GoとFirebaseでサービスを作る
[![logo_full_fill.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532297/fb144390-ea94-0370-423b-6c4cfb47b3f2.png)](https://matopee.com)
https://matopee.comFirebaseを管理画面側に、GAEを公開側に使って、日本語のオノマトペを集めて辞典などとして公開するサービスを作っています。まだまだ不足だらけですが、まずは3200件ちょっと集めた[オノマトペの五十音別全一覧](https://matopee.com/indexes/kana)を中心に公開しています。
[![“五十音全一覧のスクリーンショット。「あ」から「お」までのオノマトペの一部を抜粋している。”](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532297/152a0876-a217-3284-5a55-b5da602beba5.jpeg “オノマトペの五十音
[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/パッケージファイルを実行し、ウィザードに従ってインストールします。
[続ける]をクリックします。
【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月15日 –
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 mainimport (
“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 mainimport (
“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 = 10s := 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 slicesfunc AllocationSlice(from []string, to []string) {
for _, item := range from {
to = append(to, item)
}
}
“`**ベンチマークコード**
“`go:main_test.go
package slicesimport “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 exitN = 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 sqrtN = int(input