関連記事
GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ
概要
以下、自分用のメモです。
先日、以下のような記事をアップしました。
システムの設定値とか制限値を取得 (getconf, linux) - いろいろ備忘録日記
ついでなので、Goから呼び出すのに syscall とか unix パッケージとかに関数ラップされてるかなと見てみたら存在しませんでした。
なので、cgo経由で呼び出すのが最短経路みたいですね。
サンプル
main.go
//go:build unix package main /* #include <stdlib.h> #include <unistd.h> */ import "C" import ( "fmt" "unsafe" ) func main() { if err := run(); err != nil { panic(err) } } func run() error { // // sysconf, pathconfは syscallやunixパッケージでも直接呼び出せるようになっていないため // cgoを利用して呼び出すのが楽。cgoに依存するのが嫌な場合は // https://github.com/tklauser/go-sysconf // のようなパッケージを利用するという手もある。 // v := C.sysconf(C._SC_NPROCESSORS_ONLN) fmt.Printf("_SC_NPROCESSORS_ONLN=%v\n", v) { ptrPath := C.CString("/") defer C.free(unsafe.Pointer(ptrPath)) v = C.pathconf(ptrPath, C._PC_PATH_MAX) fmt.Printf("_PC_PATH_MAX=%v\n", v) v = C.pathconf(ptrPath, C._PC_NAME_MAX) fmt.Printf("_PC_NAME_MAX=%v\n", v) } return nil }
実行
$ task task: [default] go run main.go _SC_NPROCESSORS_ONLN=18 _PC_PATH_MAX=4096 _PC_NAME_MAX=255
参考情報
個人的Goのおすすめ書籍
個人的に読んでとても勉強になった書籍さんたちです。
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。






