Go言語の雑多なメモ

Goのバージョンを上げたい

go mod edit -go=1.20 # 1.20に上げたい go get -u ./… # 依存パッケージを更新 go mod tidy # 不要なパッケージを削除 go list -m all # パッケージのバージョンを確認

まとめると

go mod edit -go=1.20 && go get -u ./... && go mod tidy && go list -m all

zipファイルを展開する

// zipファイルを展開する
// パスワードがかかっている場合もある
// 引数にはzipファイルのパスと展開先のディレクトリを指定
func dellArchive(path string, newDir string) {
 // ファイル名からパスワードを推測
 re := regexp.MustCompile(`対象ファイル_(\d*).zip`)
 password := ""
 if s := re.FindStringSubmatch(path) ; len(s) > 0{
  password = "hogehoge"
 }
 // zipファイルを開く
 r, err := zip.OpenReader(path)
 if err != nil {
  log.Fatal(err)
 }
 defer r.Close()
 for _, f := range r.File {
  if f.IsEncrypted() {
   f.SetPassword(password)
  }
  r, err := f.Open()
  if err != nil {
   log.Fatal(err)
  }
  // ファイルの中身を読み込み
  buf, err := ioutil.ReadAll(r)
  if err != nil {
   log.Fatal(err)
  }
  defer r.Close()
  // fmt.Printf("Size of %v: %v byte(s)\n", f.Name, len(buf))
  // ファイル書き出し
  createDir(newDir)
  fileName,_ := Sjis2Utf8(f.Name)
  err = ioutil.WriteFile(filepath.Join(newDir, fileName), buf, 0644)
  if err != nil {
   log.Fatal(err)
  }
  break
 }
}

OpenAiをgolangから使うライブラリ

参考