SlideShare a Scribd company logo
1 of 22
Goはじめました
masanori_msl@ Umeda.go 2022 Spring
About me
 Name:Masui Masanori
 Work:無茶ぶり処理班
 Twitter:https://twitter.com/masanori_msl
 Blog:https://dev.to/masanori_msl
あらすじ
普段 C# や TypeScript を使っている人が
Pion/WebRTC 使うことになったので
Goを学んでいるお話
↓
参考資料とかGoの良いところとか
困ったところとかのお話
Goを学ぼう(参考資料)
A Tour of Go
https://go.dev/tour/welcome/1
↓
Go言語によるWebアプリケーション開発
https://www.oreilly.co.jp/books/9784873117522/
↓
実用 Go言語
https://www.oreilly.co.jp/books/9784873119694/
↓
Go言語による並行処理
https://www.oreilly.co.jp/books/9784873118468/
+
Pion/WebRTCのExample
https://github.com/pion/example-webrtc-
applications/tree/master/sfu-ws
A Tour of Go
A Tour of Go
やはり基本
Goでのコードの書き方、機能一巡り
英語版の方が更新が早いので両方参照が吉
(例: 英語版:https://go.dev/tour/basics/3 日本語版:https://go-tour-jp.appspot.com/basics/3)
Examplesに挑戦してみた
Examplesに挑戦しよう
Examplesに挑戦してみた
惨敗しました
基本的にmain.goファイルに全処理がまとまっているのですが、
完全に理解したレベルだと歯が立ちませんでした…。
Go言語によるWebアプリケーション開発
Go言語によるWebアプリケーション開発
以前Goにトライしようとしたときに買っていた
WebSocket(WebRTCのシグナリングで使用)周りを参考に
現在も参考になるものの、2016年の本だけに今からの購入は…。
実用 Go言語
実用 Go言語
「実用」というだけに「Goらしい書き方」が中心に
自分で処理を書こうと思ったときに困ったら見る、みたいな読み方
通しで読みたい、とも思っている
Examplesに挑戦してみた 2
それっぽいサンプルできました!
(ただしChannel周りで無事死亡)
なんとかそれっぽく動くサンプルができました。
ただし、接続を閉じるときにCloseしたChannelに書き込もうとしてエラーに。
Go言語による並行処理
Go言語による並行処理
タイトル通り並行・並列処理に特化した一冊
Goroutine、Channel周りの話になると大抵この本が挙げられる
2018年出版ではあるものの今でも有用と感じる
「並行」が指すものがC#の並行・並列とちょっと違う?ため多少混乱も
Goで困った話
Language Server 突然の死
Channelの扱い
パッケージの切り分け
チームへの共有
Goで困った話1:Language Server 突然の死
package main
import "encoding/binary"
const messageBlockSize = 128
var K = []uint64{
0x428a2f98d728ae22, 0x7137449123ef65cd, 0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc,
0x3956c25bf348b538, 0x59f111f1b605d019, 0x923f82a4af194f9b, 0xab1c5ed5da6d8118,
0xd807aa98a3030242, 0x12835b0145706fbe, 0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2,
0x72be5d74f27b896f, 0x80deb1fe3b1696b1, 0x9bdc06a725c71235, 0xc19bf174cf692694,
0xe49b69c19ef14ad2, 0xefbe4786384f25e3, 0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65,
VS Code で書いていると、Go 自体のアップデートのタイミング?で
突然コンパイルエラーが。
Language Server が正しく動かなくなった?と思われる。
「package」とか変なところで
コンパイルエラーに
Goで困った話1: Language Server 突然の死
Goならではの困ったこと
Ctrl + S で保存すると、保存時に動作するフォーマッターが暴走し、
「func」の「f」が消えるなど大惨事に。
とりあえず Windows なら Notepad++ など Language Server が動かない
テキストエディタで対象のファイルを開いてコピペ+保存
↓
VS Codeを再起動したり、別ウインドウで別の Go プロジェクト開いたりして
様子を見る。
Goで困った話2: Channelの扱い
書籍とか参考に頑張る
Goで困った話3
C#とGoのパッケージの切り分けで混乱しがち
慣れろ!という話ではある。
例えば一定時間待ちを入れたい場合。
C# : System.Threading.Tasks.Task.Delay(1000);
Go : time.Sleep(1000)
C#ではマルチスレッドを扱う処理にあるのに対し、Go は時間。
あと Go で JSON の byte[] を string() に渡すと文字列形式になるのも毎回驚く
Goで困った話4
Goの経験がないメンバーへの共有
言語機能的にはシンプル
ただし「Go らしく書く」をどう身に着けてもらうか
非同期処理が気軽に書けるが気軽に死ぬ
Goの良いところ
標準ライブラリが充実
Windows環境でも(サンプル含め)ちゃんと動く
型定義
Goの良いところ1
標準ライブラリが充実
例えば Web アプリを作る場合、
Web フレームワークを使わなくても簡単に作れてしまう。
(もちろん規模や用途によっては Web フレームワークも活用するとして)
副産物として、基礎的な部分も学んでみたくなる。
Goの良いところ2
Windows環境でもちゃんと動く
Pion/WebRTCで感動したのがコレ。
特に言語や動作が理解できていないときに、「とりあえずサンプルは動く」
はめちゃくちゃありがたい。
サンプルが動かないからその言語嫌い、はなくても、
サンプルもバッチリ動くから言語も丸ごと株が上がる、はある気がする。
Goの良いところ3
型が固すぎもせず緩すぎもせず
(個人の感想です) C# と TypeScript の中間くらいのイメージ。
よく話題にあがる error を戻り値で返すのも、自分としてはアリ。
(不便と思うことは正直あるけど)
Thank you!

More Related Content

Similar to Goはじめました

Go 言語を語ってみるか
Go 言語を語ってみるかGo 言語を語ってみるか
Go 言語を語ってみるかAkihiko Matuura
 
ちょっとさわってみるGo言語ハンズオン
ちょっとさわってみるGo言語ハンズオンちょっとさわってみるGo言語ハンズオン
ちょっとさわってみるGo言語ハンズオンSatoshi Noda
 
Introduction to Favmemo for Immature Engineers
Introduction to Favmemo for Immature EngineersIntroduction to Favmemo for Immature Engineers
Introduction to Favmemo for Immature EngineersTakeshi Arabiki
 
粗探しをしてGoのコントリビューターになる方法
粗探しをしてGoのコントリビューターになる方法粗探しをしてGoのコントリビューターになる方法
粗探しをしてGoのコントリビューターになる方法Takuya Ueda
 
Goだけでモバイルアプリを作ろう
Goだけでモバイルアプリを作ろうGoだけでモバイルアプリを作ろう
Goだけでモバイルアプリを作ろうTakuya Ueda
 
Clojureの世界と実際のWeb開発
Clojureの世界と実際のWeb開発Clojureの世界と実際のWeb開発
Clojureの世界と実際のWeb開発Tsutomu Yano
 
CoderDojo福井の取り組み
CoderDojo福井の取り組みCoderDojo福井の取り組み
CoderDojo福井の取り組みtecking
 
java-java-bpstudy-connpass
java-java-bpstudy-connpassjava-java-bpstudy-connpass
java-java-bpstudy-connpassHaruo Sato
 
DroidKaigi 2018 - Dialogflow for Android
DroidKaigi 2018 - Dialogflow for AndroidDroidKaigi 2018 - Dialogflow for Android
DroidKaigi 2018 - Dialogflow for AndroidSENSY Inc
 
TensorFlowを使ってテキストをクラス分類してみたら精度96.8%の分類器を簡単に得ることができた話
TensorFlowを使ってテキストをクラス分類してみたら精度96.8%の分類器を簡単に得ることができた話TensorFlowを使ってテキストをクラス分類してみたら精度96.8%の分類器を簡単に得ることができた話
TensorFlowを使ってテキストをクラス分類してみたら精度96.8%の分類器を簡単に得ることができた話Yuya Kato
 
クラウドとGo言語とリモートワーク

クラウドとGo言語とリモートワーク
クラウドとGo言語とリモートワーク

クラウドとGo言語とリモートワーク
R3 institute
 
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法Takuya Ueda
 
今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋Takuya Ueda
 
Fuel phpをcomposerに本気で対応させた時の話
Fuel phpをcomposerに本気で対応させた時の話Fuel phpをcomposerに本気で対応させた時の話
Fuel phpをcomposerに本気で対応させた時の話Keishi Hosoba
 
Androidの新ビルドシステム
Androidの新ビルドシステムAndroidの新ビルドシステム
Androidの新ビルドシステムl_b__
 
Start PWA from vuejs+github pages
Start PWA from vuejs+github pagesStart PWA from vuejs+github pages
Start PWA from vuejs+github pagesHirata Tomoko
 

Similar to Goはじめました (20)

Go 言語を語ってみるか
Go 言語を語ってみるかGo 言語を語ってみるか
Go 言語を語ってみるか
 
ちょっとさわってみるGo言語ハンズオン
ちょっとさわってみるGo言語ハンズオンちょっとさわってみるGo言語ハンズオン
ちょっとさわってみるGo言語ハンズオン
 
Studentgo1
Studentgo1Studentgo1
Studentgo1
 
Gradle入門
Gradle入門Gradle入門
Gradle入門
 
Introduction to Favmemo for Immature Engineers
Introduction to Favmemo for Immature EngineersIntroduction to Favmemo for Immature Engineers
Introduction to Favmemo for Immature Engineers
 
粗探しをしてGoのコントリビューターになる方法
粗探しをしてGoのコントリビューターになる方法粗探しをしてGoのコントリビューターになる方法
粗探しをしてGoのコントリビューターになる方法
 
Goだけでモバイルアプリを作ろう
Goだけでモバイルアプリを作ろうGoだけでモバイルアプリを作ろう
Goだけでモバイルアプリを作ろう
 
Clojureの世界と実際のWeb開発
Clojureの世界と実際のWeb開発Clojureの世界と実際のWeb開発
Clojureの世界と実際のWeb開発
 
gopher-lua
gopher-luagopher-lua
gopher-lua
 
CoderDojo福井の取り組み
CoderDojo福井の取り組みCoderDojo福井の取り組み
CoderDojo福井の取り組み
 
java-java-bpstudy-connpass
java-java-bpstudy-connpassjava-java-bpstudy-connpass
java-java-bpstudy-connpass
 
DroidKaigi 2018 - Dialogflow for Android
DroidKaigi 2018 - Dialogflow for AndroidDroidKaigi 2018 - Dialogflow for Android
DroidKaigi 2018 - Dialogflow for Android
 
TensorFlowを使ってテキストをクラス分類してみたら精度96.8%の分類器を簡単に得ることができた話
TensorFlowを使ってテキストをクラス分類してみたら精度96.8%の分類器を簡単に得ることができた話TensorFlowを使ってテキストをクラス分類してみたら精度96.8%の分類器を簡単に得ることができた話
TensorFlowを使ってテキストをクラス分類してみたら精度96.8%の分類器を簡単に得ることができた話
 
クラウドとGo言語とリモートワーク

クラウドとGo言語とリモートワーク
クラウドとGo言語とリモートワーク

クラウドとGo言語とリモートワーク

 
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
 
pecoを使おう
pecoを使おうpecoを使おう
pecoを使おう
 
今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋
 
Fuel phpをcomposerに本気で対応させた時の話
Fuel phpをcomposerに本気で対応させた時の話Fuel phpをcomposerに本気で対応させた時の話
Fuel phpをcomposerに本気で対応させた時の話
 
Androidの新ビルドシステム
Androidの新ビルドシステムAndroidの新ビルドシステム
Androidの新ビルドシステム
 
Start PWA from vuejs+github pages
Start PWA from vuejs+github pagesStart PWA from vuejs+github pages
Start PWA from vuejs+github pages
 

Recently uploaded

Windowsアップデート後の黒い画面を修正する方法|データ復元|ブラックスクリーン
Windowsアップデート後の黒い画面を修正する方法|データ復元|ブラックスクリーンWindowsアップデート後の黒い画面を修正する方法|データ復元|ブラックスクリーン
Windowsアップデート後の黒い画面を修正する方法|データ復元|ブラックスクリーンivanwang53
 
動的 & 非同期コンポーネント / Dynamic & Async Components
動的 & 非同期コンポーネント / Dynamic & Async Components動的 & 非同期コンポーネント / Dynamic & Async Components
動的 & 非同期コンポーネント / Dynamic & Async Componentsokitamasashi
 
あらゆる通信環境で切れない「ネットモーション」のモバイルアクセス [NetMotion]
あらゆる通信環境で切れない「ネットモーション」のモバイルアクセス [NetMotion]あらゆる通信環境で切れない「ネットモーション」のモバイルアクセス [NetMotion]
あらゆる通信環境で切れない「ネットモーション」のモバイルアクセス [NetMotion]Taka Narita
 
Windows 10、Windows 11の付箋を簡単に復元する6つの方法|データ復元
Windows 10、Windows 11の付箋を簡単に復元する6つの方法|データ復元Windows 10、Windows 11の付箋を簡単に復元する6つの方法|データ復元
Windows 10、Windows 11の付箋を簡単に復元する6つの方法|データ復元ivanwang53
 
Windows Defenderのフル・クイック・カスタム・オフラインスキャンを実行する方法.docx
Windows Defenderのフル・クイック・カスタム・オフラインスキャンを実行する方法.docxWindows Defenderのフル・クイック・カスタム・オフラインスキャンを実行する方法.docx
Windows Defenderのフル・クイック・カスタム・オフラインスキャンを実行する方法.docxivanwang53
 
ダウンロードがダウンロード(Downloads)フォルダに表示されない」問題の対処法
ダウンロードがダウンロード(Downloads)フォルダに表示されない」問題の対処法ダウンロードがダウンロード(Downloads)フォルダに表示されない」問題の対処法
ダウンロードがダウンロード(Downloads)フォルダに表示されない」問題の対処法ivanwang53
 

Recently uploaded (6)

Windowsアップデート後の黒い画面を修正する方法|データ復元|ブラックスクリーン
Windowsアップデート後の黒い画面を修正する方法|データ復元|ブラックスクリーンWindowsアップデート後の黒い画面を修正する方法|データ復元|ブラックスクリーン
Windowsアップデート後の黒い画面を修正する方法|データ復元|ブラックスクリーン
 
動的 & 非同期コンポーネント / Dynamic & Async Components
動的 & 非同期コンポーネント / Dynamic & Async Components動的 & 非同期コンポーネント / Dynamic & Async Components
動的 & 非同期コンポーネント / Dynamic & Async Components
 
あらゆる通信環境で切れない「ネットモーション」のモバイルアクセス [NetMotion]
あらゆる通信環境で切れない「ネットモーション」のモバイルアクセス [NetMotion]あらゆる通信環境で切れない「ネットモーション」のモバイルアクセス [NetMotion]
あらゆる通信環境で切れない「ネットモーション」のモバイルアクセス [NetMotion]
 
Windows 10、Windows 11の付箋を簡単に復元する6つの方法|データ復元
Windows 10、Windows 11の付箋を簡単に復元する6つの方法|データ復元Windows 10、Windows 11の付箋を簡単に復元する6つの方法|データ復元
Windows 10、Windows 11の付箋を簡単に復元する6つの方法|データ復元
 
Windows Defenderのフル・クイック・カスタム・オフラインスキャンを実行する方法.docx
Windows Defenderのフル・クイック・カスタム・オフラインスキャンを実行する方法.docxWindows Defenderのフル・クイック・カスタム・オフラインスキャンを実行する方法.docx
Windows Defenderのフル・クイック・カスタム・オフラインスキャンを実行する方法.docx
 
ダウンロードがダウンロード(Downloads)フォルダに表示されない」問題の対処法
ダウンロードがダウンロード(Downloads)フォルダに表示されない」問題の対処法ダウンロードがダウンロード(Downloads)フォルダに表示されない」問題の対処法
ダウンロードがダウンロード(Downloads)フォルダに表示されない」問題の対処法
 

Goはじめました