https://github.com/masa0902dev/golang-import-aggregator-atcoder
https://github.com/masa0902dev/golang-import-aggregator-atcoder
Last synced: 7 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/masa0902dev/golang-import-aggregator-atcoder
- Owner: masa0902dev
- License: mit
- Created: 2024-11-14T03:31:29.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-11-15T07:12:41.000Z (over 1 year ago)
- Last Synced: 2025-03-23T02:15:23.853Z (about 1 year ago)
- Language: Go
- Size: 28.3 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README-ja.md
- License: LICENSE
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
README
# 🔥golang-import-aggregator
## 目次
- [できること](#できること)
- [インストール](#インストール)
- [使い方](#使い方)
- [動作イメージ](#動作イメージ)
- [統合前 (3ファイル)](#統合前-3ファイル)
- [統合後](#%EF%B8%8F統合後)
- [前提条件](#前提条件)
- [ライセンス](#ライセンス)
## できること
Main ファイルにおいて import された自作パッケージ群を、Main ファイルにひとまとめにできます。
特に AtCoder などの競技プログラミングで Golang を使用する場合に役立ちます。
コンソールに結果が出力され、指定の Main ファイルへ上書きするかを選択できます(確認のスキップ可能)。
## インストール
```bash
go install github.com/masa0902dev/golang-import-aggregator-atcoder/cmd/agg
```
## 🔥 使い方
import を Main ファイルにひとまとめにするには以下のように使用します。
ただし、import は記述されないので、自身の IDE の lint などで import を追記して下さい!
[使用例]
```bash
agg \
-main test-dir/chap1/main.go \
-import test-dir/chap1/code/problem.go,test-dir/util/util.go \
-prefix code,util \
-skip
```
パスはカレントディレクトリからの相対パスで指定します。
- `-main` Main ファイルのパスを指定
- `-import` Main ファイルで import しているパッケージのパス、そのパッケージで import しているパッケージのパス、...を指定
- `-prefix` 使用しているパッケージ名を指定
- `-skip` skip フラッグをつけると、ターミナル上での確認無しで Main ファイルにコードをペーストできます
上例では、以下のようなディレクトリ構造になっています。
import 関係は、main.go が code パッケージを import, code/problem.go が util パッケージを import しています。
```bash
test-dir
│
├── chap1
│ ├── code
│ │ └── problem.go
│ └── main.go
└── util
└── util.go
```
## 🔥 動作イメージ
### 統合前 (3ファイル)
```go
// chap1/main.go ------------------------------------------
package main
import (
"fmt"
"github.com/masa0902dev/golang-import-aggregator-atcoder/test-dir/chap1/code"
)
func main() {
fmt.Println(code.SomeProblem())
}
// chap1/code/problem.go ------------------------------------------
package code
import "github.com/masa0902dev/golang-import-aggregator-atcoder/test-dir/util"
func Problem() [][]int {
a := 10
b := 20
matrix := util.CreateInfMatrix(a, b)
for row := range matrix {
for col := range matrix[row] {
matrix[row][col] -= 1
}
}
return matrix
}
// util/util.go ------------------------------------------
package util
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func CreateInfMatrix(row int, col int) [][]int {
const inf = int(^uint(0) >> 1)
matrix := make([][]int, row)
for i := range matrix {
matrix[i] = make([]int, col)
for j := range matrix[i] {
matrix[i][j] = inf
}
}
return matrix
}
func MultiMultiInt(maxBuffer int) [][]int {
scanner := bufio.NewScanner(os.Stdin)
buffer := make([]byte, 4096)
scanner.Buffer(buffer, maxBuffer)
var result [][]int
for scanner.Scan() {
line := scanner.Text()
if line == "" {
break
}
inputs := strings.Split(line, " ")
nums := make([]int, len(inputs))
for i, input := range inputs {
num, err := strconv.Atoi(input)
if err != nil {
fmt.Println(err)
return nil
}
nums[i] = num
}
result = append(result, nums)
}
if err := scanner.Err(); err != nil {
fmt.Println(err)
return nil
}
return result
}
```
### ⚡️ 統合後
import は記述されないので、自身の IDE の lint などで import を追記して下さい!
```go
// chap1/main.go ------------------------------------------
package main
func main() {
fmt.Println(Problem())
}
func CreateInfMatrix(row int, col int) [][]int {
const inf = int(^uint(0) >> 1)
matrix := make([][]int, row)
for i := range matrix {
matrix[i] = make([]int, col)
for j := range matrix[i] {
matrix[i][j] = inf
}
}
return matrix
}
func MultiMultiInt(maxBuffer int) [][]int {
scanner := bufio.NewScanner(os.Stdin)
buffer := make([]byte, 4096)
scanner.Buffer(buffer, maxBuffer)
var result [][]int
for scanner.Scan() {
line := scanner.Text()
if line == "" {
break
}
inputs := strings.Split(line, " ")
nums := make([]int, len(inputs))
for i, input := range inputs {
num, err := strconv.Atoi(input)
if err != nil {
fmt.Println(err)
return nil
}
nums[i] = num
}
result = append(result, nums)
}
if err := scanner.Err(); err != nil {
fmt.Println(err)
return nil
}
return result
}
func Problem() [][]int {
a := 10
b := 20
matrix := CreateInfMatrix(a, b)
for row := range matrix {
for col := range matrix[row] {
matrix[row][col] -= 1
}
}
return matrix
}
```
## 前提条件
- Go 1.16 以降
## ライセンス
このプロジェクトは MIT ライセンスの下でライセンスされています。
詳細は[LICENSE](LICENSE)ファイルを参照してください。