Go関連のことを調べてみた2020年05月07日

Go関連のことを調べてみた2020年05月07日

GoでGoogle Sheets APIを利用する【セルの更新】

今回はGoでGoogle スプレッドシートへの書き込みについてまとめたいと思います。
Google Sheets APIを利用する事前準備、サービスアカウントの認証については[こちら](https://qiita.com/takenoko-gohan/items/2cd6ab9463334e4acfcb)を参照してください。
Go言語、Google Sheets APIは学習途中なので間違った記述、非推奨なコードの書き方があった場合、ご指摘いただければ幸いです。

## 単一の範囲を更新する場合

単一の範囲対して更新を行う際は、`Spreadsheets.Values.Update()`を使用します。
`Spreadsheets.Values.Update()`の引数は、`(スプレッドシートID, 更新範囲, sheets.ValueRange)`となります。

### サンプルコード

“`go
package main

import (
“encoding/json”
“io/ioutil”

“golang.org/x/net/context”
“golan

元記事を表示

Go/Java は Windows の MAX_PATH(260) を超えるファイルにアクセスできるのか

調査した結果、特に何もしなくてもアクセスできるようだった。
Windows の場合 CreateFile API を通じてさらにパスのプリフィクスに \\?\ をつける(「\\?\C:\Windows\test.txt」みたいに)必要があるが、Go/Java だと内部でやってくれる模様。

まずは Go の場合のテスト

“`go:main.go
package main

import (
“fmt”
“io/ioutil”
“os”

“github.com/blono/win” // Fork of lxn/win see https://qiita.com/manymanyuni/items/c41f5bf0fd141e299336
)

func main() {
longPath := `C:\Users\manymanyuni\Desktop\long\loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong\loo

元記事を表示

golang 型switch記法

golang勉強。
型switch記法というのが本に載ってたので、動くように書いてみた。
どの値を入れるとどう返すかをint型だけにして、main の中で直接書いてみた。

“`
package main

import “fmt”

func main() {

var x interface{} = 4 //この値をswitchのcaseで判定
switch x := x.(type) {
case int:
fmt.Printf(“%#v %T\n”, x, x)
}

fmt.Println(“Hello”)
}
“`

reflectを使ってtypeを判定する例

“`
package main

import (
“fmt”
“reflect”
)

func main() {
var x float64 = 3.4
fmt.Println(“type:”, reflect.TypeOf(x))
}
“`

##

元記事を表示

【Go/GORM】構造体の中身がインサートされない場合の対処法(Create())

##【はじめに – 経緯】
Go(Gin)を利用して、簡単なCRUDアプリ(今回はTodoアプリ)を作成しようと思い、ORマッパーにGORMを利用しました。
登録処理の実装時に、行のみが追加され、フロントからのデータが期待通りにインサートされずハマってしまいました。
同様の事象で悩まれている方々への共有の意味も込めて、記事にさせていただきました。
記述的に誤っている部分、ここ直せ!!的な部分がありましたら、ご教示いただけると幸いです。

【参考になった記事】
https://stackoverflow.com/questions/60163323/go-gorm-cannot-insert-value
【日本語版GORMリファレンス】
https://gorm.io/ja_JP/docs/create.html
##【環境】
・MySQL 5.7.30
・Docker-composeでMySQLとGoを起動。GoのフレームワークにGinを利用。

##【原因】
先に結論から言うと、Insert時に送る構造体の定義が、GORMが期待する形になっていなかったでした。
DBのカラム名を小文字

元記事を表示

ExcelのCRUD操作ができるツールを作ってみた #golang

# はじめに
`excelize`という便利なライブラリを見つけたので、`cobra`と組み合わせてコマンドラインツールを作ってみました。
`CRUD`操作したかったので、`kubectl`調のサブコマンド構成にしてみました。

# man
demo.jpg

# このツールでできること
コマンドラインから以下操作が可能です。
* ブック作成、削除
* シート作成、削除、リネーム、ダンプ(全値出力)
* セル値出力、更新

# バイナリ
以下においています。
https://github.com/kuritayu/gotools/releases

# impl

## cobra
コマンドライン部分は、
* `cobra init –pkg-name パッケージ名`
* `cobra add サブコマンド`

元記事を表示

Go言語入門 コンポジット型(配列・スライス・マップ・構造体)

 プログラミング初学者が学習したことを記録するために書いています。間違っている部分があれば指摘していただけると幸いです。

Go言語の特徴と基本構文については[前回の記事](https://qiita.com/IamK/items/400ba10de1b8ad6316f7)でまとめています。

# 目次
– コンポジット型とは
– 配列
– rangeの使い方
– スライス
– マップ

# コンポジット型とは

 ひとことで表すと、**複数のデータ型を1つのデータ型にまとめてもの**である。
Go言語における具体的なコンポジット型を以下にまとめた。

 ※構造体については別でまとめる予定

| 種類 | 説明 |
| — | —- |
| 配列 | 同じ型のデータを並べたデータ型 |
| スライス | 可変長な配列 |
| マップ | キーと値を連結させたデータ型 |
| 構造体 | 異なるデータ型を集めたデータ型 |

# 配列

## 配列の基本

– 要素の型はすべて同じ
– 最初に決めた要素数から変更することができない

## 配列の定義(その1)
宣言と代入を別で

元記事を表示

DockerでサクッとGolangの環境作ってみた

golangの勉強のためにDockerでサクッと開発環境作ってみた。

フォルダ構成
golang_docker_api
-Dockerfile
-main.go

それぞれのファイルの内容は以下参照

Golang+Dockerで環境構築

【Dockerfile】
ローカルのmain.goをコンテナイメージにコピーしてビルド→実行をするDockerfile

“`ruby:Dockerfile
FROM golang:alpine
# フォルダ作成
RUN mkdir /app/
# 作成したフォルダ内にmain.goを配置
COPY . /app/
# 作業場所を/appに設定(main.goがある場所)
WORKDIR /app/
# main.goをbuild
RUN go build -o main .
CMD [“/app/main”]
“`
【main.go】
localhostにアクセスしたときに「golang api access」を出力するmain.go

“`ruby:main.go
package main

import (
“fm

元記事を表示

golangでkubernetes APIにアクセスする

## 事前条件

– 利用できるkubernetesクラスタがある(参考: [GNU/Linuxにkindを使ってkubernetesをセットアップする](https://qiita.com/yendo0206/items/30a81f51cfc37b4b74e1))
– goがインストールされている(参考: [GNU/Linuxにgoenvでgolangをセットアップする](https://qiita.com/yendo0206/items/33689cccd926e0162a2a))
– go modulesが利用できる(go v1.13以降ならデフォルトで利用できる)

## Kubernetes APIにアクセスするコードを用意する

Kubernetes APIにアクセスするには[client-go](https://github.com/kubernetes/client-go)を使います。この場合client-goを使うコードを1から書いてもよいですが、[kyaml2go](https://kyaml2go.prasadg.dev/)を使うと、yamlファイルからc

元記事を表示

GNU/Linuxにgoenvでgolangをセットアップする

## goenvのインストールと設定

git cloneでインストールします。

“` bash
$ git clone https://github.com/syndbg/goenv.git ~/.goenv
“`

環境変数などの設定を行います。ログインシェルやシステムによって[多少異なります](https://github.com/syndbg/goenv/blob/master/INSTALL.md#basic-github-checkout)。以下はDebian系でbashの場合です。

“` bash
$ vi ~/.bashrc
“`

“` bash
# goenv

export GOENV_ROOT=”$HOME/.goenv”
export PATH=”$GOENV_ROOT/bin:$PATH”
eval “$(goenv init -)”
export PATH=”$GOROOT/bin:$PATH”
export PATH=”$PATH:$GOPATH/bin”
“`

編集後、一度ログアウトします。

※面倒なGOPATHの設定はgoenvに

元記事を表示

VSCodeのGo言語拡張から学ぶGOROOT

# はじめに
[A Tour of Go](https://go-tour-jp.appspot.com/list)をやるためにローカルにGoをインストールしたのですが、環境変数設定やPathを通していないのにVSCodeで**デバッグなしで実行**が選べた為、不思議に思い拡張のソースコードを読んで疑問を解決したので一応の共有です。

# 結論
デフォルトインストールディレクトリの`/usr/local/go/bin/go`を直接見ていたので環境変数設定やPathを通してなくても実行できた。

# 調査環境
– Ubuntu 20.04LTS
– go version go1.14.2 linux/amd64

# 調査内容
環境変数設定やPathを通していないのに実行できるということは、どこかでインストールディレクトリを見ているという予想ができるので拡張の中身をそれっぽい文字列で検索してみる

“`bash
jh1ovv@ThinkPad-X1:~$ pwd
/home/jh1ovv
jh1ovv@ThinkPad-X1:~$ cd .vscode/extensions/
jh1o

元記事を表示

XamarinでGomobileを使う

# Xamarinでもgomobileを使いたい!

Visual Studioが好きなのでXamarinでaarを使いたいと思いました
Android Studio重いから好きじゃないの

じゃぁC#で書けよって言われそうですが、最近のC#はC++程ではないにしろ仕様が膨らんできてなんだかしんどいです
F#やIronPythonも試してはみたのですがいまいちしっくりこなかったのでgomobileを試してみることにしました

## 試してみたら意外と動きました
うちの環境だとOreo以上対象にしないと動かないのですが、Android Studioでも同じような状況ですし、
単なる私の知見不足なのだろうと思います

“`
gomobile bind -target android
“`

で普通に生成したaarを使っています
コードのサンプルは下の方にあります

ただ下でも詳しく書きますが、Go単体時のテスト・Java/Kotlin側だと正常に動いていたaarが一部Xamarinでは動きませんでした。

## gomobileで生成したaarをC#側で認識させられるようになるまで

元記事を表示

GitHub CLI のビルド方法

# GitHub CLI のビルド方法

[GitHub CLI](https://cli.github.com/) のビルド方法です。

## 準備

1. [Golang](https://golang.org/) をダウンロードしてインストールします。
2. git をインストールします。
3. git で ソースを取得します。

git の場合

“`
git clone https://github.com/cli/cli.git
“`

GitHub CLI をインストール済みの場合

“`
gh repo clone cli/cli
“`

## ビルド (Windows, Linux 共通)

“`
go mod download
go build -v ./cmd/gh
“`

参考:
https://github.com/cli/cli/blob/master/.github/workflows/go.yml

元記事を表示

go mod プロジェクトを go build したら invalid version: unknown revision ってエラーが出たときのメモ

Same as title. go modプロジェクトのあるブランチを `go build` したら

“`
$ go build
go: @v0.0.0-20200503112449-: invalid version: unknown revision
“`

というエラーになった。SSHもGOPRIVATEも正しく設定できているはずだ。GithubのWeb上で、commit hashが存在することも確認した。なぜunknown refisionなのか。しばらくハマったが、このIssueがヒントになって解決した。

[cmd/go: invalid version: unknown revision when GOPROXY/GOSUMDB disabled · Issue \#36624 · golang/go](https://github.com/golang/go/issues/36624)

GithubのWeb上では確かにcommitがあったが、実はこれはただのキャッシュである。ローカルで `git

元記事を表示

Golang 型確認

“`golang
package main

import (
“fmt”
“reflect”
“strings”
“time”
)

func main() {
// 数値
P(1) // int
P(1.2) // float64

// 文字列
P(“string”) // string

// 配列
P([]int{0,1,2}) // []int
P([2]int{0,1}) // [2]int
P([]string{}) // []string
P(strings.Split(“a b”, ” “)) // []string
P([1]string{“1”}) // [1]str

元記事を表示

Azure SDK for Goでの認証方式

「[Azure SDK for Go documentation](https://docs.microsoft.com/ja-jp/azure/developer/go/)」サイトの「[Authentication methods in the Azure SDK for Go](https://docs.microsoft.com/ja-jp/azure/developer/go/azure-sdk-authorization)」ページを読み進めました。

本セクションでは、[Azure SDK for Go](https://github.com/Azure/azure-sdk-for-go)を使ってAzureで認証するための形式と方式が紹介されています。

ここでは、対象ページの内容をベースに…というか結果的にGoogle翻訳による日本語翻訳状態となり、私なりの言い回しを加えています。ちなみに、”type”は”形式”に、”method”は”方式”に、日本語訳しています。

## 利用可能な認証の形式と方式

Azure SDK for Goは複数の資格情報セットと認証形式を

元記事を表示

goreleaserで簡単にオレオレコマンドをbrew installできちゃう

# はじめに

[gorillang](https://github.com/momotaro98/gorillang)というゴリラ語で遊べるコマンドツールを作りました。

> ウホゥホウホッッホゥ ウホゥホウホ!!ゥゥ ウホゥホウホ!!オホ ウホ?ゥゥオホ!! ウホうほホッウウウッホ ウホウォホホウウウホ ウホホホウォ ウホゥホウホォ!ウウ ウホゥホウホウッホッ! ウホゥホウホッッホッ ウホホッウォウォ?

このとき、[goreleaser](https://goreleaser.com/)を使うことで簡単にGo言語で作ったプログラムを[Homebrew](https://brew.sh/index_ja)化して配布できるとわかったので記事にします。

# バージョン・環境

* Go: go version go1.13.1 darwin/amd64
* goreleaser: version: 0.131.1

# やり方

## GitHubにHomebrewのFormula用のレポジトリを事前に作っておく

事前にHomebrewのFormula用のレポジトリを作る必要があ

元記事を表示

terminal操作メモ

## 近況報告
 勉強ってなんのためにするの?って聞かれたら,どう答えるべきなのかって,教師を目指していた時に考えていたことがあります。当時の自分はどう答えてたんだろう。今の自分はこう答えます。 **その勉強「は」意味がないよ**。

というのも,勉強は手段であって第一の目的になり得ないので,目的がない状態で勉強の意義を問うことを僕はできません。モテるために勉強する,いい大学に進学するために勉強する。。。なんでもいいんです。どんな小さなことでもいいから目的をつくってあげる,きっかけを一緒に見つけてあげるのが,教師。方位磁針,道しるべ、、、教師ってそういうものであるべきなんだろうな。余談ですが,僕の好きな漫画で我が子を叱る父親のシーンでこんなセリフがあるんです。「目的もなしにだらだら手段を行使するのは時間の無駄だし身にならない,そして何よりつまらねぇ」って。鞠山さん大好き。

# 今回のお題
terminal操作を全くわかってなかった件

## 背景
techcanp卒業して1週間。過去の復習したりGoの勉強していたりしていると,いつもディスプレイ上でクリックしたりしていたことをテキスト

元記事を表示

RubyからGo(ジャンル:勉強日記vol.1)

## 近況報告
 テックキャンプを卒業し,ついに就職活動です。前の記事で述べた通り,
  ・個人アプリの修正及び機能付与
  ・カリキュラムのドリル
  ・新しいことへのチャレンジ(dockerとGo言語)
  ・就職活動
を軸に勉強を進めています。個人アプリの大まかな修正は順調に進んでいます。ドリルに関しては,先輩曰く,スクールの料金の半分の価値があるとのことなので,進めています。正規表現など穴がわかるので助かります。dockerは意義を理解してインストールし,起動まで進みました。環境構築はまだ解読が進んでいません。Golangは後述。就活は今週面接があるのですが,ラフな気持ちで行こうと思います。

# 今回のお話
 Golangの勉強を始めた経緯
 いまなにしてる
 気づきメモ(rubyでは出会わなかった話メイン)
## Golangの勉強を始めた経緯
### 勢いのある言語のため
 golangは2009年にオープンソースとして発表された言語であり,機能性,高速という面で脚光を浴びた言語です。最近のエンジニアが学びたい言語としても上位に位置し,近年はアプリケーションの一部をGoに

元記事を表示

Goの代入可能性についてちゃんと理解してみる

# はじめに
今月でGolangに触れてからちょうど一年になりますが、未だにGoについて初めて知ることが多々あります。その一つを紹介したいと思います。

以下のGoでなぜキャストが必要なのでしょうか? 当たり前だろ、GoはCなどとは違って明示的なキャストが必要な言語だろとツッコミが入りそうですが、

“`golang
type INT int
var i1 int
var i2 INT
i1 = 1
i2 = INT(i1) // 明示的なキャストが必要
“`
では、以下はキャスト不要で代入できますが、これはなぜでしょうか? といわれると案外答えられない人もいるのではないでしょうか?
そのあたりを[Goの仕様](https://golang.org/ref/spec)をちゃんと読んで理解しましょうというのが今回のテーマです。

“`golang
type INTSLICE []int
var l1 []int
var l2 INTSLICE
l1 = []int{1,2,3}
l2 = l1 // 明示的なキャストが不要
“`

# 仕様をよんでみる
代入可能性(`Assi

元記事を表示

Golang シェル実行

“`golang
package main

import (
“fmt”
“os”
“os/exec”
“strings”
)

func getstatusoutput(args …string) (status int, output string) {
exec_command := exec.Command(args[0], args[1:]…)
std_out, std_err := exec_command.Output()
status = exec_command.ProcessState.ExitCode()
if std_err != nil {
output = std_err.Error()
} else {
output = string(std_out)
}
return
}

func main() {
// command := []string{“echo”, “-n”, “HelloWorld”}
com

元記事を表示

OTHERカテゴリの最新記事