dyuji.dev

about software development so on.

Go_prog_forkwell_27

Go言語プログラミングエッセンス - Forkwell Library#27 イベント内容 動画アーカイブ モデレーター 渋川さん Go 言語で楽しくなるシステム開発 自己紹介 mattnさん Go言語プログラミングエッセンス著者 Google open source expert Go歴 13年 Software Design nostrの連載 概要 簡単な説明 特徴 Explicit is better than implicit 非同期プログラミング 最新のGo Goについて C言語の構文を意識しつつ、簡単な文法でコーディングできる すでにいろんな会社で利用 プログラミング環境を改善する目的 C言語を設計した世界的エンジニアで知られる人が関わっている Unixらしさ 使用例 CLI Webサーバー バックエンド 広告配信 ハードウェア制御 機械学習 特徴 静的型付けコンパイル言語 スタティックバイナリ C言語風でありながら、GC 非同期を簡単に扱えるランタイム Explicit is better than implicit 曖昧より明確のほうがいいよね RobPike氏が良く言うこと ex) error ハンドリング Goは例外を扱わない result typeを扱わない errorが返ってきたら処理する Goでバグを生み出さないコツ すべてのerrorを明示的に対処し暗黙をなくす deferをうまく使うことでエラーを減らす errorを受け取ったら、処理を中断し、呼び出し元へ返す →必然的にearly return Goが優先したもの 読みやすさ 声に出して読めるくらい 学びやすさ 開発者が明示的に処理を中断させる 予約語を増やさない 複雑さを減らす 開発者が意思決定するプログラミング 非同期プログラミングの良さ ハードウェアが高性能化 非同期は難しい Goの仕組み goroutine channel リレーのバトンのようなもの 気をつけること 並列と並行は違う スレッドを増やすプログラミング言語 CPUコアに固定されない。空いたコアが次を担当する CPUコアを有効に活用する C言語でやると難しい コンテキストスイッチのコストが発生してしまう Goのスレッドは軽量なので、多く使っても大丈夫 スケールに対応しやすいのでクラウド向き go 1.21でくるもの min/max 数値、文字列など 実装するとinterface{}をつかうとコンパイルで気づけない clear mapやスライスを空にできる スライスの長さが変わらない 配列はできない loopvar まだ仮 検証中 並列で動かすときに、ループ変数が回り終わった状態で参照していしまうのの対処 pgo コンパイラによるプロファイルベースの最適化 pprofの結果からホットパスをインライン化する pprofの結果を読み込んでbuildすると最適化 slog 構造化ログを出力できるように ログレベルも設定 スレッドセーフ 出力先変更可能 グルーピング maps 型パラメータを使ったmap操作関数 genericsができたので key一覧、value一覧をとることができる Slices slice処理をかける delete, insert, reverse, binarySearch, contains wasi wasmの実行環境がブラウザ依存だった wasmを読み込んでgoで直感的にできるように 標準ライブラリにほぼ対応 利用できない/システムコールが必要なおの net/http os エッジコンピューティングがしやすくなる (youtubeアンケート、職務内容) ...

7月 8, 2023

AWS Tech talk Night#5

AWS Tech talk Night#5 クラウドネイティブ時代のエンジニアが押さえておきたい ソフトウェアの構築・運用で考慮すべき5つのポイント AWSプリンシパルエンジニアの技術記事をソリューションアーキテクトが解説 1/25にZoomウェビナーで実施された、AWSのイベント イベントURL 概要 AWS Japan 千葉さん ...

1月 25, 2023

実用Go言語 Forkwell Library #7

実用Go言語 Forkwell Library #7 基調講演 #Forkwell_Library 3人の著者による発表 渋川さん Honda DeNA FutureArchitect 趣味 インラインスケート 辻さん 渋谷区の公務員からフューチャー 趣味 競技プログラミング、筋トレ 真野さん 新卒でフューチャーで13年くらい フューチャーのかるい紹介 ...

10月 26, 2022

Docker×Goのマルチステージビルドで必要になるcgoのオプションについて

Docker×Goのマルチステージビルドで必要になるcgoのオプションについて 背景 Dockerfileでマルチステージビルドの構築をしていたが、DockerImageのビルドに成功するも、docker runでエラーが出て動かなかった FROM golang:1.18 as builder WORKDIR /go/src/ COPY . ./ RUN go mod download RUN go build -v -o server ./cmd FROM alpine:latest RUN apk --no-cache add ca-certificates WORKDIR /root/ COPY --from=builder /go/src/server ./ EXPOSE 8080 CMD ["./server"] エラーメッセージ ...

5月 4, 2022

Fabric_subprocess

Python2で使うfabricとsubprocessはエラーハンドリングに気をつける Fabricは、アプリケーションのデプロイやシステム管理のタスクのためにSSHの利用を簡素化するためのPython2系のライブラリとコマンドラインのツール fab {method}でコマンドラインスクリプトで呼び出しができる Pythonのsubprocessはサブプロセスを起動するためのモジュール。python内からコマンド実行するのに使う この2つの組み合わせでのエラーハンドリングには気をつける fab_test.py from fabric.api import local def hello(): local("exit 1") cmd.py ...

3月 3, 2022

Grpc

grpcチュートリアルメモ https://github.com/ymmt2005/grpc-tutorial Remote Procedure Call リモートで呼び出しする手順 gRPC Googleで開発された多言語間のRPCを実現するプロトコル 多言語対応であることが特徴 IDL(interface definition language) ...

12月 30, 2021

Jmeter Hash

JMeterのシナリオで変数をHash化する時はBeanShell PreProcesserを使う import java.security.MessageDigest; String token = vars.get("token"); // Jmeterの変数を取得 String api_key = "hogehuga"; String encrypt_str = token+api_key; MessageDigest digest = MessageDigest.getInstance("SHA-256"); byte[] hash = digest.digest(encrypt_str.getBytes()); StringBuilder sb = new StringBuilder(2*hash.length); for (byte b: hash) { String hexStr = Integer.toHexString(b).replaceAll("ffffff",""); String hex = (hexStr.length() == 1) ? "0" + hexStr : hexStr; sb.append(hex); } String newVariable = sb.toString(); var.put("ENCRYPTED_TOKEN",newVariable); // Jmeterの変数にセット

12月 28, 2021

「超」入門 失敗の本質

大きな戦略における目標に寄与しない無駄な目標を実施しない 勝利の条件を理解するのは優れたリーダーに必要なこと 戦略の成功を図る指標をアップデートする 既存の指標の発見 敵対する指標の無効化 新たな指標で戦う戦う 成功体験を分析する。経験知を汎用的な指標にする 新しいルールをつくる 人・組織の柔軟な活用 新技術の開発 技術の運用方法 ダブルループ学習を心掛ける シングルループ学習 目標と問題構造を所与ないし一定とした上で最適解を探す ダブルループ学習 想定した目標と問題自体が間違っているという疑問・検討を含めた学習 現場と上層部の乖離を避ける 専門分野は専門家の知識をあげられるように リーダーが前線で直接確認することで、情報の正確さと問題解決の速度を上げる リーダーは見たくない問題を解決する覚悟の強さが要求される 正しい警告を無視しない 評価制度は組織に対するメッセージ 居心地の良い安定にならず変化できる組織 異質な情報・知識の交流 権力構造の均衡破壊 万が一の想定を持っておく

12月 26, 2021

5G

5G 大容量・低遅延・多接続のしくみ 感想:5Gの普及でより情報量の多いコンテンツの配信等ができるようになるのは間違いない。今まで有線のPCでしか出来なかったことがスマホ端末でもできるようになっていくと思われるが、消費者的に一番恩恵を受けるのはゲームの分野かと思った。 ...

12月 26, 2021

dockerからlocalhostに接続

Docker for Mac上のコンテナから、Mac上のアプリケーションに簡単に接続する方法 Mysqlに接続する例 DSN user1:password@tcp(docker.for.mac.localhost)/database_name

12月 26, 2021