カテゴリー : Go言語

Go言語習得中
ブログ内検索
 

Go言語でSearch Consoleの値を取得してみる

表題にある通り、 Go言語でGoogle Search Consoleの値を取得してみる。 https://search.google.com/search-console/about Google Search Consoleというのは、 運営しているサイトがどのような検索ワードで訪問してくるか? を調べることが出来るWebサービス。 早速、Search Consoleの値をGo言語で取得する為の手続きを見てみる。 https://console.clou...

Read More…

 

Go言語でKVSのRedisを使ってみる

Go言語で構築したサーバで複数台の構成にして、 ロードバランサで負荷分散しなければならない状況になりそうだ。 複数台にした時に問題になるのが、 複数サーバ間でセッションのような値を共有したいという問題が発生する。 どうにかできないかと検討してみたところ、 https://redis.io/ KVS(Key-Valueストア)のRedisであればできそうだ ということを思い出し、 NoSQL - Wikipedia Go言語でRedisの使い方を調べること...

Read More…

 

Go言語を使ってJSONから複数のデータを取得してみる

Go言語でJSON 前回JSONから、秘密鍵などが入ったデータファイルをmain.goで読み込んだ。 今回は、複数のデータの場合、どう呼び出すか試してみる。 まず、sample.jsonに下記のコードを入力する。 [ { "id" : 1, "name" : "usako", "reading" : "usano" }, { "id" : 2, "name" : "kumata", "reading" : "k...

Read More…

 

Go言語でJSON

JSONとは、JavaScript Object Notationの略で、テキストベースのデータフォーマットだ。 ***.jsonという形でデータファイルになる。秘密鍵などのデータを保存しておきたい時の設定ファイルとして使うことが多い。 今回は、~/workspace/json/sample.jsonを作成し、下記の情報を入力する。 { "id":1, "name":"usako", "reading":"usano" } lsonファイルは、{ “項目”:値.....

Read More…

 

Go言語でGoogle Analyticsのデータをチャットワークに送ってみる

「植物のミカタ」のGoogle Analytics(以後GAと略す)から取得したpageviewsをチャットワークに送ってみる。 今回は、前日のpageviewsと日付けを取得してみる。 ※pageviewsとは、閲覧されたページの合計数として定義される指標 実際のコードを書く前に今回のコードで必要なライブラリを取得しておく。 $ go get golang.org/x/oauth2 $ go get google.golang.org/api/analytics/v3 pa...

Read More…

 

妻がプログラミングをはじめてGo言語とQtでアプリを公開するまで

Go言語とQtで給与明細の計算機を作ってみたで記載した通り、 今年の四月からプログラミングの勉強をはじめ、 ちょうど半年が経過したところで、 Go言語とQtでGUIアプリケーションの税金計算のアプリを公開した。 実際に書いたコードはGitHubで管理して、 下記のURLから開発したコードを確認することができる。 https://github.com/ryoko-saito/payslip_on_restaurant_biz https://github.com/ryok...

Read More…

 

Go言語とQtで給与明細の計算機を作ってみた

パン屋を営んでいる友人が、給与明細を手で計算していて大変だわ~と嘆いていた。 なんとか彼女の悩みを解決したいと思い、旦那に話してみた。 「Go言語とQtで給与明細を作れるんじゃない?」 Qtカテゴリ まずは、給与明細にはどんな項目が必要なのか調べてみる。 必要な項目をノートに書きだしてみる。 とりあえず所得税はどうやって計算されているのか調べてみる。 給与所得の源泉徴収税額表は、7ページもあり甲と乙、扶養家族、扶養申請書を提出しているかどうかで所得税の計算方法が変わる。 ...

Read More…

 

Go言語でsyncパッケージを使ってみる

O'Reilly Japan - Go言語による並行処理 Go言語で並行処理についての本が出版されたので購入して読んでいる。 この本よりも前に Lambda Note Goならわかるシステムプログラミング Goでシステムプログラミングに触れる本でも並行処理について記載されていて、 syncパッケージのWaitGroupやMutexが大事だという記載があり、 説明文からもこれらが大事だということはわかるんだけれども、 普段並行処理を書かない私にとってしっくりこなかった...

Read More…

 

Go言語で関数の練習問題③

r := generate()とする数字をランダムに出力するgenerate関数を作成する。 package main import ( "fmt" ) func main() { r:=generate() fmt.Println(r) } func generate() int { rand.Seed(time.Now().UnixNano()) r := rand.Intn(10) return r } 今回は、お題にr := gen...

Read More…

 

Go言語で関数の練習問題②

今回は、greet(name) にname := "うさこさん"と入力すれば、こんにちはうさこさんと出力する関数を作成してみる。 package main import "fmt" func main() { name:="うさこさん” greet(name) } func greet(a string) { fmt.Println("こんにちはうさこさん”) } ここで作成する関数は、greet関数で、今回は、name := "うさこさん"と...

Read More…

 

Go言語で関数の練習問題①

関数を自分で作成する際、引数や返り値をどう設定すればよいのかわからなかったので、例題でどう書けばよいのか考えることにした。 Go言語で関数 Go言語でf(x) = x 2という関数を作ってみる。そこにx=3を代入して結果を表示してみる。 package main import "fmt" func main() { x := 3 y := f(x) fmt.Println(y) } // f(x) = x + 2という式を意味する関数 func f(...

Read More…

 

Go言語でQtのQComboBoxを使ってみる

Go言語でQtのQComboBoxを作ってみる。 QComboBox Class | Qt Widgets 5.11 package main import ( "os" "github.com/therecipe/qt/widgets" ) func main() { app := widgets.NewQApplication(len(os.Args), os.Args) window := widgets.NewQMainWindow(nil,...

Read More…

 

Go言語とQtで計算フォームを作成してみる

Go言語とQtを使って、下記のような計算フォームを作成してみる。 package main import ( "os" "strconv" "github.com/therecipe/qt/widgets" ) //packageスコープ内に変数を定義しておくと、mainの中、外でも変数を使うことができる var jikyuuInput *widgets.QLineEdit var jikanInput *widgets.QLineEdit var ...

Read More…

 

Go言語でQTのQLabelとQLineEditを組み合わせてみる

QLabelとQLineEditを組み合わせてみる。 下記のコードを入力する。 package main import ( "os" "github.com/therecipe/qt/widgets" ) func main() { app := widgets.NewQApplication(len(os.Args), os.Args) window := widgets.NewQMainWindow(nil, 0) window.SetMin...

Read More…

 

Go言語でQtのQGroupBoxとQGridLayoutを組み合わせたサンプル

QtのQGroupBoxとQtのQGridLayoutを使って、下記のような画面を作成してみる。 Go言語でQtのQGroupBoxを使ってみる Go言語でQtでQGridLayoutを使ってみる package main import ( "os" "github.com/therecipe/qt/widgets" ) func main() { app := widgets.NewQApplication(len(os.Args), os.Ar...

Read More…

 

Go言語でQtのQLineEditを使ってみる

Go言語でQtのQLabelを使ってみるに引き続き、 QtのQLineEditを使って、入力フォームを作成してみる。 QLineEdit Class | Qt Widgets 5.11 package main import ( "os" "github.com/therecipe/qt/widgets" ) func main() { app := widgets.NewQApplication(len(os.Args), os.Args) wi...

Read More…

 

Go言語でQtのQLabelを使ってみる

QLabelを使って、時間という言葉を表示してみる。 Go言語でQtのQBoxLayoutを使ってみる QLabel Class | Qt Widgets 5.11 下記のコードを入力する。 package main import ( "os" "github.com/therecipe/qt/widgets" ) func main() { app := widgets.NewQApplication(len(os.Args), os.Args) ...

Read More…

 

Go言語の構造体2

前回のパッケージの関数とメソッド周りに引き続き、Go言語の構造体周りを見ていく。 Go言語のパッケージの関数とメソッドについて Qtのコードを見ていると、NewQMAinWIndowやらSetLayoutといったNew~、Set~という記述をよく見かける。これを理解するためには、構造体の仕組みをおさらいした方がよさそうなので、もう一度構造体について詳しくみていくことにする。 Go言語でQtのQGroupBoxを使ってみる 構造体は、一つの変数にどのような値のセットをもつか厳格に決...

Read More…

 

Go言語のパッケージの関数とメソッドについて

Go言語のパッケージについてもう一度みていく。 Go言語でpackage Go言語で構造体のメソッド dir ├── main.go └── pac └── pac.go 上記のようにpacパッケージを作成し、nameとreadingフィールドを持ったPerson構造体を作成する。 この構造体に関連した関数を作成してみる。 pac/pac.go package pac//Person構造体を定義する type Person struct { name...

Read More…

 

Go言語でQtのQGroupBoxを使ってみる

Go言語でQtのQGroupBoxを使って、QFormLayoutとQGridLayoutを組み合わせた下記のような図を作ってみる。 QFormLayoutについては下記の記事に記載している。 Go言語でQtのQFormLayoutを使ってみる QGridLayoutについては下記の記事に記載している。 Go言語でQtでQGridLayoutを使ってみる QGroupBoxというのは、各レイアウトをグループ化出来るようになり、 一つのWindow内で複数のレイアウトを配置...

Read More…

 

Go言語でQtでQGridLayoutを使ってみる

Go言語でQtのQFormLayoutを使ってみるに引き続き、 Go言語で5つのボタンを表示するQGridLayoutを作ってみる。 Qtのレイアウトについては下記の記事に記載してある。 Qtのレイアウトについて package main import ( "os" "github.com/therecipe/qt/widgets" ) func main() { app := widgets.NewQApplication(len(os.Arg...

Read More…

 

Go言語でQtのQFormLayoutを使ってみる

Go言語でQtのQBoxLayoutを使ってみるに引き続き、 Go言語でQtのQFormLayoutを使ってみる。 Qtのレイアウトについては下記の記事に記載してある。 Qtのレイアウトについて QFormLayoutは、下記の図のようにQLabelとQLineEditのようなラベルと入力フォームの関係を簡単に構築出来るレイアウトである。 package main import ( "os" "github.com/therecipe/qt/widgets...

Read More…

 

Go言語でQtのQBoxLayoutを使ってみる

Go言語でQtのQMainWindowを使ってみるに引き続き、 今回はGo言語でQtのQBoxLayoutを使ってみる。 QBoxLayout Class | Qt Widgets 5.11 Qtのレイアウトについては下記の記事に記載してある。 Qtのレイアウトについて package main import ( "os" "github.com/therecipe/qt/widgets" ) func main() { app := widget...

Read More…

 

Qtのレイアウトについて

Qtのレイアウトは、主に3つある。 QBOXLayout、QGridLayout、QFormLayoutである。 QBOXLayoutには、QHBOXLayoutとQVBOXLayoutの2つがある。 QHBOXLayoutは、下記の図のようにウィジェットを水平に整列させる。 Layout Management | Qt Widgets 5.11より抜粋 QVBOXLayoutは、下記の図のようにウィジェットを垂直に整列させる。 QGridLayoutは、グリッド...

Read More…

 

Go言語でQtのQMainWindowを使ってみる

Qtには、様々なクラス(部品のようなイメージ)がある。 今回はメインウィンドウ(QMainWindow)のフレームワークを作成してみる。 Qtのメインウィンドウのフレームワークは、下記のような構造になっている。 QMainWindow Class | Qt Widgets 5.11より抜粋 今回は、赤枠の部分(枠の内側は空)を作成してみる。 実際のコードを書く前にGo言語で開発環境の構築の記事を載せておく。 Go言語でQtを扱ってみる on Ubuntu Go言語で...

Read More…

 

Go言語でQtを扱ってみる on Windows

Go言語でQtを扱ってみる on UbuntuでUbuntuでGo言語とQtの開発環境を用意した。 続いて、Windows10でもGo言語とQtの開発環境を用意してみる。 環境 ASUS TransBook T304U OS : Windows10 64bit Go言語:1.11 linux/amd64 Qt:5.11.1 端末はgit bashを利用しているので、新規でMSYS2をインストールせず、git bashを使用する方向で話を進めます。 git bashは下記の記事...

Read More…

 

Go言語でQtを扱ってみる on Ubuntu

Go言語はC言語のようなコンパイルとPython等のLL言語の両方の実行方法を持ちつつ、 言語の仕様を削ぎ落として学習コストを下げつつ実行の高速化を保ち、 更にはクロスコンパイルで一つのコードで様々なOSをサポートする。 シンプルな故に開発の支援ツールも充実している という特徴を持つ言語だが、 デスクトップアプリ(GUI)の開発に弱いというイメージがある。 敢えて弱くしているように見えるので以後は弱点とは言わないが、 洗礼された言語を使っっているとやはりGUIアプリのコードを書...

Read More…

 

Go言語とSQLiteでプリペアドステートメント

Go言語でINSERT文を書く時、直接user_idやpriceなどの変数を構文中に入れるとデータを消去されたり改変される危険性がある。 これをSQLインジェクションと呼ぶ。 SQLインジェクション - Wikipedia SQLインジェクションを阻止するための方法にプリペアドステートメントがある。 例として、下記のようなコードを記載する. package main import ( "database/sql" "log" _ "github.com/m...

Read More…

 

Go言語とSQLiteでトランザクション

Go言語とSQLiteで下記のコードをトランザクションしてみる。 トランザクションとは、分割不可な一連の処理を意味する。 今回は、user_id=1のpriceから1000円を引き、user_id=2のpriceに1000円たすという処理を行うが、この時、途中でエラーが起こった場合は、どの処理もされないようにしたい。この時にトランザクションの仕組みを利用する。 package main import ( "database/sql" "log" "strconv" ...

Read More…

 

Go言語でExcelからデータを取得する。

Go言語でExcelファイルからデータを取得する。 まず、test.xlsxのExcelファイルを作成し、データを入れておく。下記のコードを書いてみる。 package main import ( "fmt" "log" "github.com/tealeg/xlsx" ) func main() { file, err := xlsx.OpenFile("test.xlsx") if err != nil { log.Fatal(err) }...

Read More…

 

Go言語でExcel形式のファイルを作成

Go言語でExcel形式のファイルにデータを打ち込んでみる。 最初に端末にgo get github.com/tealeg/xlsxでExcelをGo言語で作成するためのライブラリを取得しておく。 GitHub - tealeg/xlsx: Google Go (golang) library for reading and writing XLSX files. 次に下記のコードを入力する。 package main import ( "log" "github....

Read More…

 

Go言語とSQLite3でデータを取得する

前回の記事、Go言語とSQLでランダムの顧客10人の注文を10000件登録してみるで作成したtableから10件のデータを取得してみる。 package main import ( "database/sql" "fmt" "log" _ "github.com/mattn/go-sqlite3" ) func main() { db, err := sql.Open("sqlite3", "sample.db") if err != nil { ...

Read More…

 

Go言語とSQLでランダムの顧客10人の注文を10000件登録してみる

Go言語とSQLiteでランダムの顧客10人の注文をランダムの金額1000~10000の範囲で10000件登録してみる。 まず下記のコードを記載する。 package main import ( "database/sql" "fmt" "log" "math/rand" "strconv" "time" _ "github.com/mattn/go-sqlite3"(//自動入力されないので、手打ちで入力する) ) func main() { ...

Read More…

 

Go言語のSQLiteドライバでデータを挿入してみる

はじめにGo言語でSQLiteを使えるようにするためにSQLiteのドライバーを取得しておく必要があるが、 いつも使用しているGit Bashでは取得できないため、 下記のURLからgit-sdkをダウンロードして、インストールしておく。 https://github.com/git-for-windows/build-extra/releases インストール後に デスクトップ上にMSYS2のアイコンが出来ているので、 今回はmsys2から操作を行う。 MSY...

Read More…

 

Go MobileでAndroidアプリの実行までを見てみる

Go言語のGo MobileでAndroidアプリを開発してみるの記事で、 Go言語でAndroidアプリの環境を整え、 UbuntuでAndroid Debug Bridgeを使ってみるまでの記事で、 Go言語で書いたAndroidアプリを実機かエミュレータで確認出来るところまで準備した。 それを踏まえた上で、 実際のコードを書いてみることにする。 今回は開発環境で動作の確認時にgo run main.goでウィンドウが立ち上がるところまで書いてみる。 コードは慣れの意味...

Read More…

 

Go言語のGo MobileでAndroidアプリを開発してみる

Go言語ではAndroidやiOSのアプリの開発用でmobileパッケージが用意されている。 Mobile · golang/go Wiki · GitHub Androidアプリの開発することになったので、 本家のJavaではなくGo言語で開発してみることにする。 今回はサンプルコードをAndroid端末で動かすところまで。 ということで早速開発環境を載せる。 開発機 Lenovo Ideapad 720S プラチナ CPU : AMD Ryzen 5 2500U ...

Read More…

 

Go言語 + kintone + チャットワークでタスクの自動登録アプリを作ってみる3

前回のGo言語 + kintone + チャットワークでタスクの自動登録アプリを作ってみる2で Go言語でkintone REST APIを利用して任意のアプリからJSON形式で登録データを取得してみた。 今回は取得したデータをチャットワークにタスクとして登録してみる。 今回の話に入る前にざっくりと説明すると kintoneで上のキャプチャのようなフィールドを設けたアプリを作成して、 指定の月日になったら、チャットワークにラベルをタスク名にして投稿する というアプリを...

Read More…

 

Go言語 + kintone + チャットワークでタスクの自動登録アプリを作ってみる2

前回のGo言語 + kintone + チャットワークでタスクの自動登録アプリを作ってみる1の続き ざっくりと説明すると、 kintoneで上のキャプチャのようなフィールドを設けたアプリを作成して、 指定の月日になったら、チャットワークにラベルをタスク名にして投稿する というアプリを作成している。 指定の月日になったらというところだけれども、 kintoneの仕様を調べてみると、Linuxでいうところのcronのような機能を見つけられなかった為、 Go言語でkint...

Read More…

 

Go言語 + kintone + チャットワークでタスクの自動登録アプリを作ってみる1

毎年同じ時期にやらなければならない仕事があって、 その仕事を忘れないようにしておきたい。 できれば、 チャットワーク(ChatWork) | ビジネスが加速するクラウド会議室 チャットワークのタスクとして登録しておきたい。 という相談があった。 PHPでチャットワークAPIを介してメッセージを投稿してみる kintone - サイボウズのビジネスアプリ作成プラットフォーム 相談者は既にcybozeのkintoneを利用していたので、 タスクの登録はk...

Read More…

 

Go言語 + Selenium + Agoutiでテスト自動化

Go言語 + Selenium + AgoutiでSOY CMSにログイン出来なかった時に適切にエラーを表示するかを確認してみる。 package main import ( "log" "strings" "github.com/sclevine/agouti" ) //SOY CMSにログインできなかた時に適切にエラーを表示するか?テスト func main() { driver := agouti.ChromeDriver() err := dri...

Read More…

 

Go言語 + Selenium + Agoutiで自動でGoogle検索

前回の続きで、seleniumでグーグル検索した後、検索フォームにseleniumuと入力してボタンを押してみる。 下記のコードを入力する。 package main import ( "log" "github.com/sclevine/agouti" ) func main() { driver := agouti.ChromeDriver() err := driver.Start() if err != nil { log.Fatal(er...

Read More…

 

Go言語 + Selenium + Agoutiでブラウザ操作の自動化

Selenium - Web Browser Automation https://agouti.org/ Go言語でSeleniumとAgoutiを介してChromeブラウザを自動で操作してみる。 SeleniumはJava上でなければ動作しないため、はじめにJavaをインストールする。 Javaは下記のページからダウンロードして、画面の指示に従ってインストールする。 無料Javaソフトウェアをダウンロード 続いて、seleniumu-serverをhttps:...

Read More…

 

Go言語でスコープ

下記のようなコードを入力してみる。 package main import "fmt" func main() { var str string var i int // if文を使うためのダミーの変数 if i == 0 { var str string str = "hello" fmt.Println(str) } fmt.Println(str) } 実行すると、helloと表示される。 ここで、注目したいのは、func ma...

Read More…

 

Go言語でクライアントのレスポンスを見る

workspace/go/web/clientでclient.goファイルを作成する。 package main import ( "fmt" "log" "net/http" "net/http/httputil" ) func main() { resp, err := http.Get("http://localhost:8889") defer resp.Body.Close() if err != nil { log.Fatal(err...

Read More…

 

Go言語でサーバを立ち上げる

workspace/go/web下にserverディレクトリを作成する。 package main import ( "fmt" "io" "log" "net/http" "net/http/httputil" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) { dump, err := httputil.DumpRequest(...

Read More…

 

Go言語で並行処理(ゴルーチン)

helloという言葉とworldという言葉をprint関数を作成して、同時に表示してみる。 package main import ( "fmt" "time" ) func main() { print("hello") print("world") } func print(s string) { for i := 0; i 5; i++ { time.Sleep(100 * time.Millisecond) fmt.Print...

Read More…

 

Go言語で無名関数

関数内で作成された関数で、関数名を持たないものを無名関数と呼ぶ。 package main import "fmt" func main() { f := func() { fmt.Println("hello") } f() } f := func() { fmt.Println("hello")で実行したい関数をそのまま変数fに代入する。f()で変数fに入った関数を実行する意味になる。 即時実行の際は、下記のようにコードを入力する。 package...

Read More…

 

Go言語で関数型の値を扱う

helloを表示するgreet関数を変数fに代入して実行してみる。 package main import "fmt" func main() { var f func() f = greet f() } func greet() { fmt.Println("hello") } ここで、f = greetは、関数greetを値として変数に代入している。この場合、f()で、変数fの値が関数型だったら実行される。 fmt.Printlnすると、hel...

Read More…

 

Go言語で内部コマンドを作成する③

~/workspase/go/flagを作業ディレクトリとし、main.goファイルを作成し、その中に下記のコードを入力する。 package main import ( "flag" "fmt" ) var IntOpt = flag.Int("i", 1111, "please input interger value") var StrOpt = flag.String("s", "default", "please input string value") ...

Read More…

 

Go言語で内部コマンドを作成する②

~/workspase/go/cmdを作業ディレクトリとし、main.goファイルを作成し、その中に下記のコードを入力する。 今回は、os.Argsの機能を調べてみる。 package main import ( "fmt" "os" ) func main() { fmt.Println(os.Args) if len(os.Args) 1 { fmt.Println(os.Args[1]) } } 次に下記のコマンドを入力する。 cd ~/...

Read More…