カテゴリー : Go言語

SOY

SOY CMSの開発秘話を投稿しました。→SOY CMSの開発秘話
ブログ内検索
 

字句解析器を作る為にデータ構造のスタックを見る

PHPのハッシュテーブルを見るの記事で表題通り、PHPのハッシュテーブルを見て、ハッシュテーブルに関数を登録するところを見ようとしたが、共同体の記述の解釈で断念でした。一旦、ハッシュテーブル周りを見るのは保留にして、バーチャルマシン(VM)を含む機械がコードを解釈して実行する箇所を見ることにする。上記のコードを解釈して実行する過程はコンパイラもしくはインタプリタによって、人が書いたコードを機械が解釈できる形式に翻訳して実行する。コンパイラ - Wikipediaインタプリタ ...

 

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

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

 

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

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

 

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

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

 

Go言語でJSON

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

Go言語の構造体2

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

Qtのレイアウトについて

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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 mainimport ("log""github.com/tealeg/x...

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

Go言語でスコープ

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

 

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

workspace/go/web/clientでclient.goファイルを作成する。package mainimport ("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...

 

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

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

 

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

helloという言葉とworldという言葉をprint関数を作成して、同時に表示してみる。package mainimport ("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...

 

Go言語で無名関数

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

 

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

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

 

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

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


Powered by SOY CMS  ↑トップへ