SlideShare a Scribd company logo
正月三が日でGolangを触ってみた
1
Golangとは
● プログラミング言語の 1つ
● 以下の特徴がある
○ 静的型付け
○ C言語の伝統に則ったコンパイル言語
○ メモリ安全性
○ ガベージコレクション
○ 構造的型付け
○ CSPスタイルの並行性
● Goのコンパイラ、ツール、およびソースコードは、すべてフリーかつオープンソースである
● 以下の特徴もある
○ 軽量スレッディングのための機能
○ Pythonのような動的型付け言語のようなプログラミングの容易性
● Go処理系としてはコンパイラのみが開発されている
2
出展: https://ja.wikipedia.org/wiki/Golang
Golangとは
● プログラミング言語の 1つ
● 以下の特徴がある
○ 静的型付け
○ C言語の伝統に則ったコンパイル言語
○ メモリ安全性
○ ガベージコレクション
○ 構造的型付け
○ CSPスタイルの並行性
● Goのコンパイラ、ツール、およびソースコードは、すべてフリーかつオープンソースである
● 以下の特徴もある
○ 軽量スレッディングのための機能
○ Pythonのような動的型付け言語のようなプログラミングの容易性
● Go処理系としてはコンパイラのみが開発されている
3
出展: https://ja.wikipedia.org/wiki/Golang
わたしとGolang
● Hello Worldくらいしか出来ない
○ しかも調べながら
● クロスコンパイルって響きがかっこいい(※ 意味分かってません )
● GopherかわいいよGopher
4
きっかけ
● tmuxのステータス画面で、`現在のメモリ・swapの残量を表示(1s更新)`
○ Ubuntu上で作成
5
きっかけ
● tmuxのステータス画面で、`現在のメモリ・swapの残量を表示(1s更新)`
○ Ubuntu上で作成
6
#!/bin/bash
_mem=$(free -h | awk 'NR==2 {print $4}')
_swap=$(free -h | awk 'NR==3 {print $4}')
echo "${_mem}/${_swap}"
きっかけ
● tmuxのステータス画面で、`現在のメモリ・swapの使用量を表示(1s更新)`
○ 同じスクリプトをmacOS上にコピー
○ tmux上で動かすと何も表示されない…
7
きっかけ
● tmuxのステータス画面で、`現在のメモリ・swapの使用量を表示(1s更新)`
○ 同じスクリプトをmacOS上にコピー
○ tmux上で動かすと何も表示されない…
8
きっかけ
● tmuxのステータス画面で、`現在のメモリ・swapの使用量を表示(1s更新)`
○ 同じスクリプトをmacOS上にコピー
○ tmux上で動かすと何も表示されない…
9
macOSにfreeコマンドはありません \(^o^)/
10
基礎知識
● Ubuntu
○ Debian GNU/Linuxをベースとした、LinuxディストリビューションのOS
● MacOS
○ BSD系UNIXをベースに開発されているOS
11
基礎知識
● Ubuntu
○ Debian GNU/Linuxをベースとした、LinuxディストリビューションのOS
● MacOS
○ BSD系UNIXをベースに開発されているOS
12
無くて当たり前...
解決策の模索
● 他のコマンドで代用してみる
○ vmstat
○ top
○ 出力形式は(やっぱり)違ったし、OSの違いを自分で扱うのはつらい※
■ それが目的では無いので
13
解決策の模索
● 他のコマンドで代用してみる
○ vmstat
○ top
○ 出力形式は(やっぱり)違ったし、OSの違いを自分で扱うのはつらい※
■ それが目的では無いので
● Pythonで書く
○ Versionとかライブラリとか面倒くさい …
14
解決策の模索
● 他のコマンドで代用してみる
○ vmstat
○ top
○ 出力形式は(やっぱり)違ったし、OSの違いを自分で扱うのはつらい※
■ それが目的では無いので
● Pythonで書く
○ Versionとかライブラリとか面倒くさい …
● Golangを使ってみる
○ Golangはクロスコンパイルだ! (※ 意味分かってません )
○ やりたいことは明確である
■ そこまで重たい処理・複雑なロジックでは無いはず
○ 興味もかなりある
○ 正月三が日は駅伝見るくらいしかやりたいことが無い※
■ やりたいことが無い != やらなくてはいけないことが無い 15
まずは使ってみる
● 使えそうなライブラリ(パッケージ?)をググって探す
○ gopsutilなるものを見つける
○ https://github.com/shirou/gopsutil
○ http://tdoc.info/blog/2015/12/16/gopsutil.html
16
まずは使ってみる
17
まずは使ってみる
18
まずは使ってみる
19
まずは使ってみる
20
まずは使ってみる
● Alpine LinuxベースのDockerコンテナでソースコードを作る
○ go runで動作確認 ◎
○ go build して出来たバイナリで動作確認 ◎
○ ここまでは順調
21
まずは使ってみる
● Alpine LinuxベースのDockerコンテナでソースコードを作る
○ go runで動作確認 ◎
○ go build して出来たバイナリで動作確認 ◎
○ ここまでは順調
● ホストマシンのUbuntu 18.04で、バイナリを実行してみる
○ 動かない !!!!
22
まずは使ってみる
23
ここで作ったものが…
まずは使ってみる
24
ここで動かない !!
この時の問題(?)点
● エラーを見ているとライブラリが bash 前提っぽい…??
○ Dockerコンテナ(Alpine Linux)はshellで実行している
○ でも、コンテナ内では動作確認出来た
● たぶん、環境変数的な何か…か??
○ go get -u golang.org/x/sys/unix
25
この時の問題(?)点の解決策の模索
● 環境変数を変えていろいろやってみる
○ だめだった
26
この時の問題(?)点の解決策の模索
● 環境変数を変えていろいろやってみる
○ だめだった
● Dockerコンテナに Bash をインストールする
○ コンテナが肥大化するので却下
27
この時の問題(?)点の解決策の模索
● 環境変数を変えていろいろやってみる
○ だめだった
● Dockerコンテナに Bash をインストールする
○ コンテナが肥大化するので却下
● おとなしく、 Bash が入っているDockerコンテナを使う
○ Debianベースのものを使う(golang:1.11.4-stretch)
○ この環境で go build をし、動作確認もした
○ ホストサーバのUbuntu18.04上でも動いた!!!
28
この時の問題(?)点の解決策の模索
29
ここで作ったものが…
この時の問題(?)点の解決策の模索
30
ここでも動いた !!!
本命のmacOSで動かしてみる
● MacOS上に再度コピーをして実行してみる
31
本命のmacOSで動かしてみる
● MacOS上に再度コピーをして実行してみる
○ 結果、動かなかった…
32
本命のmacOSで動かしてみる
● MacOS上に再度コピーをして実行してみる
○ 結果、動かなかった…
○ クロスコンパイルとは…
33
本命のmacOSで動かしてみる
● めげずにググってみる
34
本命のmacOSで動かしてみる
● めげずにググってみる
● まずはクロスコンパイルの環境を作る必要があるらしい
35
本命のmacOSで動かしてみる
● めげずにググってみる
● まずはクロスコンパイルの環境を作る必要があるらしい
○ all.bash とか make.bash とか
36
本命のmacOSで動かしてみる
● めげずにググってみる
● まずはクロスコンパイルの環境を作る必要があるらしい
○ all.bash とか make.bash とか
37
本命のmacOSで動かしてみる
● Dockerfile
38
この部分、追加
本命のmacOSで動かしてみる
● ソースコード
39
本命のmacOSで動かしてみる
40
本命のmacOSで動かしてみる
41
本命のmacOSで動かしてみる
● 無事、macOSでも動作確認が出来ました !!
42
43
ここまでが、正月三が日のお話
44
その後
しばらく使って、気になってきたこと
● 出来ることが少なすぎる
○ 現状はメモリとSwapの残量しか取れない
45
しばらく使って、気になってきたこと
● 出来ることが少なすぎる
○ 現状はメモリとSwapの残量しか取れない
46
しばらく使って、気になってきたこと
● クロスコンパイルの準備に謎が多い
○ make.bash の中で go1.4 を使うとか嘘でしょ…
47
しばらく使って、気になってきたこと
● クロスコンパイルの準備に謎が多い
○ make.bash の中で go1.4 を使うとか嘘でしょ…
48
この中に go1.4 が
ハードコーディングされている
しばらく使って、気になってきたこと
● そもそもOSが違うと挙動(単位)が違う
○ 深刻な問題
49
しばらく使って、気になってきたこと
● そもそもOSが違うと挙動(単位)が違う
○ 深刻な問題
50
今、やっていること
● 引数を用いて、もう少し便利に使う
○ 出来ることを増やす(増やし過ぎない)
● DockerHubを使って環境用意
○ クロスコンパイルの環境を作っておく
● CircleCI辺りを使って、配布用意をする(ex. GitHub)
○ せっかく作ったので、配布までのCI/CDをしたい
● gopsutilにPRをする準備
○ まずはソースコードを読む
51
52
つまり
53
正月三が日でGolangを触ってみた
54
ではなく
55
正月三が日からGolangを頑張ってる
になりました
56
正月三が日からGolangを頑張ってる
になりました
まとめ
● ちゃんとドキュメントを読みましょう
● そもそもちゃんとGolangを学びましょう
● でも、突貫で作ってみるのも楽しいです
57
まとめ
● ちゃんとドキュメントを読みましょう
● そもそもちゃんとGolangを学びましょう
● でも、突貫で作ってみるのも楽しいです
● とは言え、まずはPythonをしっかり修めてから…
58
59
おわり

More Related Content

PDF
Golang入門
PDF
Goets go言語のelastic transcoderライブラリを作ろうとした @ qiita aws tools hackathon
PDF
Rust v1.0 release celebration party
PDF
Golangによるubicの試作
PDF
私なりのGo言語のご紹介
PDF
Androidアプリ開発で活躍必至!? ビルドツールGradle
PDF
すごいCoq入門
PDF
gRPC入門
Golang入門
Goets go言語のelastic transcoderライブラリを作ろうとした @ qiita aws tools hackathon
Rust v1.0 release celebration party
Golangによるubicの試作
私なりのGo言語のご紹介
Androidアプリ開発で活躍必至!? ビルドツールGradle
すごいCoq入門
gRPC入門

What's hot (8)

PPTX
書くネタがCoqしかない
PDF
Perl (OSC2011 Tokyo/Spring, Doc-ja)
PDF
Language toolを使ってみる
PPTX
勉強会 - 1
PDF
ちょっとだけさわってみる Go言語
PDF
Riverpodでテストを書こう
PDF
今日から始めるGopher - スタートGo #0 @GDG名古屋
PDF
Shizuoka go lang csp
書くネタがCoqしかない
Perl (OSC2011 Tokyo/Spring, Doc-ja)
Language toolを使ってみる
勉強会 - 1
ちょっとだけさわってみる Go言語
Riverpodでテストを書こう
今日から始めるGopher - スタートGo #0 @GDG名古屋
Shizuoka go lang csp
Ad

Similar to 2019-01_正月三が日でGolangを触ってみた (20)

PDF
Golang handson
PDF
Goでかんたんソースコードの静的解析
PDF
Go MobileでAndroidアプリ開発
PDF
Go mobileでモバイルアプリを作ろう
PPTX
社内勉強会1 go lang
PDF
GoでMinecraftっぽいの作る
PDF
Pythonでラズパイのgpio制御
PDF
OSC 2016 Hokkaido セミナー資料
PDF
DLR言語によるSilverlightプログラミング
PDF
CodingTips+ 基礎編
PPTX
20130316 プログラミング言語Go
PDF
Go言語によるWebアプリケーション開発
PPTX
Fluentd+MongoDB+Groovy
PDF
Go言語でBot開発やってみた
PDF
2011年10月21日
PDF
OSSで楽に作るGo言語クライアントツール
PPTX
iii_SGMI #5 "OOP & Design Patterns"
PPTX
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PPTX
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Golang handson
Goでかんたんソースコードの静的解析
Go MobileでAndroidアプリ開発
Go mobileでモバイルアプリを作ろう
社内勉強会1 go lang
GoでMinecraftっぽいの作る
Pythonでラズパイのgpio制御
OSC 2016 Hokkaido セミナー資料
DLR言語によるSilverlightプログラミング
CodingTips+ 基礎編
20130316 プログラミング言語Go
Go言語によるWebアプリケーション開発
Fluentd+MongoDB+Groovy
Go言語でBot開発やってみた
2011年10月21日
OSSで楽に作るGo言語クライアントツール
iii_SGMI #5 "OOP & Design Patterns"
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Ad

More from Igarashi Toru (9)

PPTX
システム開発初期時の NoOps について考える
PPTX
GKE で始める Private Cluster
PPTX
Private Azure Kubernetes Service cluster を触ってみよう♪
PDF
今日から始める限定公開クラスタ
PDF
GCP でも Serverless!!
PPTX
NoOps Japanサイトの紹介
PDF
初めての Spanner 移行
PDF
[2019 01-19] AzureDevOps LT
PDF
2018-12-28_献血のすゝめ 2018
システム開発初期時の NoOps について考える
GKE で始める Private Cluster
Private Azure Kubernetes Service cluster を触ってみよう♪
今日から始める限定公開クラスタ
GCP でも Serverless!!
NoOps Japanサイトの紹介
初めての Spanner 移行
[2019 01-19] AzureDevOps LT
2018-12-28_献血のすゝめ 2018

2019-01_正月三が日でGolangを触ってみた