サクサク読よめて、アプリ限定げんていの機能きのうも多数たすう!
トップへ戻もどる
TGS2024
zenn.dev/spiegel
いつもの小しょうネタです。起点きてんは以下いかの tweet から。 かいつまんで説明せつめいすると,元々もともとの tweet に golang、interface Aとinterface Bを満みたすものを引数ひきすうとして受うけ取とれる関数かんすうを表現ひょうげんするのにinterface ABを宣言せんげんしないといけないの? rustならtrait使つかってT: A +Bでいけるのに。 とあって,それに対たいして type A interface { DoSomething() } type B interface { DoAnotherthing() } func Do(v interface {A; B}) { v.DoSomething() v.DoAnotherthing() }
Go Vulnerability Management Twitter の TL を眺ながめていて Go 公式こうしきの脆弱ぜいじゃく性せいレポートのページがあることを知しる。 で,これについて とか呟つぶやいたら と情報じょうほうを頂いただいた。ありがとうございます 🙇 件けんのページを覗のぞいてみると,こんな感かんじで脆弱ぜいじゃく性せい管理かんりを行おこなっているらしい。 via “Go Vulnerability Management - The Go Programming Language” 各かく番号ばんごうの説明せつめいは以下いか。 A data pipeline that populates the vulnerability database. Data about new vulnerabilities come directly from Go package maintainers or sources such as MITRE and GitHub. Reports
本家ほんけ Debian を使つかっている人ひとは既すでにご存知ぞんじだとは思おもうが,パッケージ管理かんりツールの APT でパッケージへの電子でんし署名しょめい用よう OpenPGP 公開こうかい鍵かぎを管理かんりする apt-key コマンドが非ひ推奨すいしょうになっている。更さらに Debian 12 では apt-key コマンドは削除さくじょされるらしい。 Debian 系けいディストリビューションである Ubuntu も当然とうぜんこれに倣ならうのだが $ sudo apt update ... W: https://download.docker.com/linux/ubuntu/dists/jammy/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details. みたいなワーニ
他所よそ様さまのブログ記事きじなどを見みるに Go の学習がくしゅうを始はじめる際さいに躓つまずきがちなのが interface と nil と slice なのではないかと思おもう。 Interface と nil については以前いぜんに書かいた拙文せつぶんを見みていただくとして,配列はいれつとスライスについては Zenn で書かいてなかったな,と思おもい立たち記事きじにしてみることにした。なんちうあざとい(笑) とはいえ,スライスは配列はいれつとの関係かんけいが分わかればさほど難むずかしくない。以降いこうからひとつずつ見みていくことにしよう。なお,記事きじ中ちゅうの図ずは “Go Slices: usage and internals” から拝借はいしゃくしている。つか(英語えいご不得手ふえてでないなら)そっちの記事きじを見みた方ほうが早はやいんだけどね。 配列はいれつ(Array) まずは配列はいれつについて。 Go における「配列はいれつ」は複ふく合ごう型がた(composite type)の一種いっしゅで,単一たんいつ型がたのデータ列れつで構成こうせいされている。コードで書かくとこんな感かんじ[1]。 //
//go:build run // +build run package main import ( "fmt" "time" ) func main() { fmt.Println("Commencing countdown.") tick := time.Tick(1 * time.Second) for countdown := 10; countdown > 0; countdown-- { fmt.Println(countdown) <-tick } }
Go 本家ほんけブログが面白おもしろい記事きじを出だしてたので,かいつまんで紹介しょうかいしてみる。 サプライチェーン攻撃こうげきとは 知しらない方ほうもいるかもしれないので一応いちおう説明せつめいすると,もともと「サプライチェーン」というのは原料げんりょう調達ちょうたつから製造せいぞう,物流ぶつりゅう,販売はんばいを経へて顧客こきゃくに渡わたるまでの事業じぎょうの一連いちれんの流ながれ(chain)を指さす言葉ことばで,この流ながれを最適さいてき化かすることで生産せいさん性せいの向上こうじょうやコストの低減ていげんを目指めざすというのが,いわゆる SCM (Supply Chain Management) と呼よばれるやつである。 これをソフトウェア開発かいはつに当あてはめて,製品せいひんの企画きかく・設計せっけいから製造せいぞうして顧客こきゃくに渡わたし,さらにその後ごの保守ほしゅ・運用うんようを含ふくめた流ながれもサプライチェーンと呼よぶことがある。さらにさらにソフトウェアのサプライチェーンの場合ばあいは複数ふくすうのソフトウェアを組くみ合あわせた新あらたなシステムを作つくって運用うんようすることも含ふくまれる。XaaS 全盛ぜんせいの現代げんだいではソフトウェア・サプライチェーンの管理かんりはとても重要じゅうようである。
最近さいきん,仕事しごとで使つかうことがあってたまたま気きがついたのだが, PlantUML って JSON や YAML のデータを視覚しかく化かできるんだね。 やり方かたは簡単かんたん。たとえば { "firstName": "John", "lastName": "Smith", "isAlive": true, "age": 28, "address": { "streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": "10021-3100" }, "phoneNumbers": [ { "type": "home", "number": "212 555-1234" }, { "type": "office", "number": "646 555-4567" } ], "children": [], "spous
少すこし前まえに PostgreSQL サービスに Go でアクセスする方法ほうほうについてちょっとした調しらべものをした。そのときの作業さぎょうメモをブログ記事きじとして残のこそうと思おもったのだが,単たんページで収おさまりそうになかったので Zenn 本ほんの体裁ていさいで書かきしておく。体裁ていさいは「本ほん」だが,中身なかみはただの作業さぎょう記録きろくである。ちゃんとした解説かいせつをご所望しょもうの方ほうにはあしからずご了承りょうしょうのほどを。 講釈こうしゃくはいいから動うごくコードをくれ! という方ほうには多少たしょうなりと参考さんこうになるかもしれない。
Zenn 1周年しゅうねんおめでとうございます。今回こんかいは記念きねんの小咄こばなしをひとつ。いつもと変かわらないだろうって? そりゃすまん。 Twitter で と書かいたが,実際じっさいにどんな具合ぐあいか開陳かいちんしてみる。 私わたしのメインマシンが Ubuntu 機きということもあり,自じ機きの運用うんようではシェルスクリプトとそれ以外いがいのコードの割合わりあいが 1:3 程度ていどになっている。たとえば Go のコンパイル環境かんきょうを /usr/local/go/ にインストールしている場合ばあいは /etc/profile.d/ ディレクトリに # shellcheck shell=sh # Expand $PATH to include the directory where golang applications go. golang_bin_path="/usr/local/go/bin" if [ -d "$golang_bin_path" -a -n "${PATH##
この記事きじは2021年ねん5月がつ頃ごろに Scraps で書かきなぐった記事きじをいちから書かき直なおしたものである。 Scraps の記事きじは既すでに非公開ひこうかい(アーカイブ)化かしている。 4,5月がつ頃ごろのこの手ての記事きじ(ポエム)は季き節ぶしの風物詩ふうぶつしみたいなもので,夏休なつやすみ真まっ盛さかりに書かくには季節外きせつはずれかもしれないが, Twitter でエゴサーチしてて「ひょっとしてブログ記事きじとして纒まといめておいたほうがええかしらん」と思おもったので,今更いまさらながら書かいておく。 起点きてんとなる tweet は以下いか: ちなみに表題ひょうだいの問といに対たいしては yes とも no とも言いえない。リアルで問とわれても,おそらくは「時ときと場合ばあいによる」としか答こたえられない。ソフトウェアというのは基本きほん的てきに「一品いっぴんもの」で,一般いっぱん論ろんで大雑把おおざっぱな話はなしはできても,詳細しょうさいを掘ほっていくほど難むずかしくなる。プログラミング言語げんごの選定せんていはその最さいたるもので,結局けっきょくは手持てもちのソフトウェア資産しさんと動員どういんできるエンジニアのスキルで決定けっていすることが多おお
Twitter の TL で見みかけたのだが,名前なまえもそのまんま Task というツールがあるらしい(Docker 関連かんれんでよく使つかわれている?)。 Task の特徴とくちょうは Easy installation: just download a single binary, add to $PATH and you’re done! Or you can also install using Homebrew, Snapcraft, or Scoop if you want; Available on CIs: by adding this simple command to install on your CI script and you’re done to use Task as part of your CI pipeline; Truly cross-platform: while most
突然とつぜんだが,先日せんじつのオンライン・イベントの復習ふくしゅう。 並行へいこう処理しょりとデータ競合きょうごう 書籍しょせき『プログラミング言語げんごGo』では「データ競合きょうごう(data race)」を以下いかのように定義ていぎしている(9章しょう)。 二ふたつのゴルーチンが同おなじ変数へんすうへ並行へいこうにアクセスして、そのアクセスの少すくなくとも一ひとつが書かき込こみの場合ばあいに発生はっせいします。 そして,データ競合きょうごうを避さける手段しゅだんとして以下いかの3つの方法ほうほうを挙あげている。 変数へんすうへの書かき込こみをしない; immutable な構造こうぞうは並行へいこう的てきに安全あんぜん 複数ふくすうのゴルーチンからの変数へんすうへのアクセスを避さける; 変数へんすうを単一たんいつのゴルーチンに閉とじ込こめ,通信つうしんを介かいしてデータを共有きょうゆうする 多数たすうのゴルーチンに変数へんすうへのアクセスを許ゆるすが,一いち度どに一ひとつのゴルーチンだけにアクセスさせる; 相互そうご排他はいた(mutual exclusion) 最初さいしょのは Java などでよく出でてくる値ねオブジェクト(value object)なんかを思おもい浮うかべると分わかりやすいかも知しれない。
Go 1.17 リリースに合あわせて【バージョン 1.17 改訂かいてい版ばん】とした(2021-08-21) Go 1.18 から追加ついか・変更へんこうになった機能きのうについて追記ついきした(2022-04-03) Go のモジュールについては自じブログでもよく話題わだいにするのだが,差分さぶん情報じょうほうが多おおく内容ないようが分散ぶんさんしているため,ここの Zenn でまとめておく。なお,この記事きじでは vendoring 機能きのうについては言及げんきゅうしないのであしからず[1]。 用語ようごの整理せいり まず最初さいしょに用語ようごの定義ていぎをしておく。 GOPATH モードとモジュール対応たいおうモード バージョン 1.11 以降いこうから Go ツールーチェーンは以下いかの2つのモードのどちらかで動作どうさする。 GOPATH モード (GOPATH mode) : バージョン 1.10 までのモード。標準ひょうじゅんライブラリを除のぞく全すべてのパッケージのコード管理かんりとビルドを環境かんきょう変数へんすう GOPATH で指定していされたディレクトリ下かで行おこなう。パ
package main import ( "fmt" "unicode" "github.com/ikawaha/encoding/jisx0208" ) func main() { for _, c := range "1二に③Ⅳ" { fmt.Printf("%#U %v a JIS X 0208 character\n", c, func() string { if unicode.Is(jisx0208.RangeTable, c) { return "is" } return "is not" }()) } // Outpu: // U+FF11 '1' is a JIS X 0208 character // U+4E8C '二に' is a JIS X 0208 character // U+2462 '③' is not a JIS X 0208 character // U
OpenSSH では ssh-agent を GnuPG の gpg-agent に置おき換かえることで鍵かぎの管理かんりを GnuPG 側がわに委譲いじょうできる。ちなみに gpg-agent は GnuPG 秘密ひみつ鍵かぎ管理かんりの中核ちゅうかくコンポーネントで,自身じしんはパスフレーズを一定いってい期間きかんキャッシュすることでユーザの鍵かぎ操作そうさを省力しょうりょく化かできる(秘密ひみつ鍵かぎそのものはキャッシュしない)。また,リモートの gpg-agent 同士どうしの連携れんけいも可能かのうである。 ただし Ubuntu を含ふくむ Debian 系けいディストリビューションでは OpenSSH の鍵かぎ管理かんりに ssh-agent を使つかうことを前提ぜんていに構成こうせいされているため, gpg-agent に置おき換かえるにはいくつかの設定せってい変更へんこうが必要ひつようなようだ。この記事きじでは,その設定せってい変更へんこうについて簡単かんたんにまとめておく[1]。 Ubuntu 設定せっていの変更へんこう gpg-agent サービスの確認かくにん まずは gpg-agent がサービスとして稼
私わたしが Go のエラーハンドリングについて最初さいしょに記事きじにしたのは2015年ねんのことだが,あれから Go も少すこしずつ変かわってるし,私わたしも当時とうじよりは多少たしょうなりと理解りかいが進すすんだと思おもうので,今いままで書かいた駄文だぶんを「全部ぜんぶ入いり」で本ほんの形かたちにしてみようと思おもう。 主おもな内容ないよう: * エラー評価ひょうかの基本きほん * エラーの階層かいそう化か * サードパーティのパッケージ * ぼくがかんがえたさいきょうのえらーろぐ * Panic と Recover 寄付きふ(サポート)歓迎かんげい。ご笑覧しょうらんのほどを。
「golangのコンストラクタでinterface型がたを返かえすようにする理由りゆう」とそこからリンクされている という記事きじを見みて,なかなか面白おもしろいけど「理由りゆう」としてはイマイチな気きがするので,この記事きじでも少すこし考かんがえてみる。 ”Accept Interfaces, Return Structs” Go の設計せっけい指針ししんとして有名ゆうめいな言葉ことばに ”Accept Interfaces, Return Structs” と言いうのがある。つまり返がえり値ちとしては具体ぐたい的てきな型かたを返かえすけど,格納かくのうするインスタンスや関数かんすうの引数ひきすうなどは interface 型がたで受うけ入いれる,というもの。 たとえば 指定していしたファイルをオープンする オープンしたファイルの内容ないようを全すべて読よみ込こむ という関数かんすうをそれぞれ作つくる場合ばあい func OpenFile(path string) (*os.File, error) { return os.Open(path) } func
面白おもしろい記事きじを見みかける。 プログラミング言語げんごごとの差異さいが分わかりやすく紹介しょうかいされていて,特とくに Rust における並列へいれつ処理しょりの最近さいきんのトレンドは知しらなかったのでとても参考さんこうになった。ただ Go に関かんしてはもう少すこし説明せつめいが必要ひつような気きがするので補足ほそく記事きじを書かいてみる。 Go における「並行へいこう処理しょり」と「並列へいれつ処理しょり」 まずは「並行へいこう処理しょり」と「並列へいれつ処理しょり」の違ちがいについて書かこうと思おもったが,以下いかの素晴すばらしい記事きじにて言及げんきゅうしつくされていた orz ...気きを取とり直なおして, Go の「並行へいこう処理しょり」に関かんしてはバイブルと言いえる本ほんがある。 この本ほんの中なかで「並行へいこう処理しょり」と「並列へいれつ処理しょり」の違ちがいについて以下いかのように書かかれている(2.1章しょう)。 並行へいこう性せいはコードの性質せいしつを指さし,並列へいれつ性せいは動作どうさしているプログラムの性質せいしつを指さします。 何故なぜこのように言いい切きれるのか。それはこの一文いちぶんに集約しゅうやくされるだろう。 並行へいこう性せいと並列へいれつ性せいの違ちがいはコードの設計せっけいをする際さいに非常ひじょうに強力きょうりょくな抽象ちゅうしょう化かになることがわ
ようやく spf13/cobra パッケージの v1.1.0 が出でたと思おもったら,いつのまにか Cobra.Dev なるサイトも出来できてた。折角せっかくなので,記念きねんに Cobra を使つかった CLI (Command-Line Interface) を実際じっさいに作つくりながら紹介しょうかいしてみる。 ちなみに Cobra は Go で CLI を構成こうせいするためのフレームワーク・パッケージで,標準ひょうじゅんの flag パッケージと比くらべて以下いかの特徴とくちょうがある(主おもなもの)。 多た段階だんかいのサブ・コマンドを比較的ひかくてき簡単かんたんに組くめる spf13/pflag パッケージと組くみ合あわせて POSIX/GNU スタイルのフラグを実装じっそうできる。また,フラグのカスケード化かも可能かのう spf13/viper パッケージと組くみ合あわせてフラグと設定せっていファイルの内容ないようをバインドできる Usage を自動じどうで生成せいせい・表示ひょうじしてくれる(カスタマイズ可能かのう) 今回こんかいのお題だい 今回こんかい作つくる CLI アプリケー
今回こんかいも小しょうネタ。 Go でコードを書かく人ひとにはお馴染なじみの話題わだいであるが,たまたま見みつけたので。 お題だいはこのコード: package main import "fmt" func main() { var a *string = nil var b interface{} = a fmt.Println("a == nil:", a == nil) // true fmt.Println("b == nil:", b == nil) // false fmt.Println("a == b: ", a == b) // true } 実際じっさいの実行じっこう結果けっかはこちら。 Go における nil はポインタ値ちのある状態じょうたいを示しめすもので,いわゆる「null 参照さんしょう」を指さしている。それだけだったら b == nil は true になりそうなものだが, interface 型がたが絡からむと少すこし複雑ふくざつになる。 実じつは interfa
「シェルスクリプトで作つくる Twitter bot 作成さくせい入門にゅうもん」を見みて簡単かんたんなボットでも作つくろうかと色々いろいろと調しらべているのだが[1],ブログ等とうが公開こうかいしている RSS/Atom フィードを取得しゅとくする構造こうぞうが簡単かんたんな Go パッケージがないかとググってみたら丁度ちょうどいいのがあった。 mmcdole/gofeed: Parse RSS, Atom and JSON feeds in Go mmcdole/gofeed が優すぐれているのは,フィードの種別しゅべつに関かかわらず食たべてくれて,統一とういつされた構造こうぞう体たいに落おとし込こんでくれるところ。たとえばこんな感かんじ。 package main import ( "fmt" "os" "time" "github.com/mmcdole/gofeed" ) func main() { feed, err := gofeed.NewParser().ParseURL("https://zenn.dev
このページを最初さいしょにブックマークしてみませんか?
『zenn.dev』の新着しんちゃくエントリーを見みる
j次つぎのブックマーク
k前まえのブックマーク
lあとで読よむ
eコメント一覧いちらんを開ひらく
oページを開ひらく