Golang / Singularity / gitlab
Menu
singularity を動かす
ssh amane
% singularity shell --shell /bin/zsh /mnt/ie-virsh/singularity/os_complete/os_complete.sif
環境変数
zshrc などに設定する
VSCode
singularity の中で VSCode を動かすのは、ちょっと難しいできるならやってみて。
Project を作成する
FileWrite2 というプロジェクトを作る% mkdir ~/src/go/fileWrite2 % cd ~/src/go/fileWrite2 % mod init ie.u-ryukyu.ac.jp/teacher/kono/os/fileWrite2 % go mod tidy % go run main.gohello.go
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello, World!")
}
先に gitlab で空のProjectを作る
group os/2023 の下の e215788-go-filewrite という名前で Project を作る
あとから gitlab に登録する
git init
git add
git commit
する。gitlabのprojectを作って
git remote add orign git@gitlab.ie.u-ryukyu.ac.jp:os/2023/kono-go-01.git
git push -uf origin main
とする。(https: は使えないので ssh を使う)
go を走らせる
main.go をそこに作る
package main
import (
"flag"
"fmt"
"ie.u-ryukyu.ac.jp/teacher/kono/os/fileWrite3/fileIO"
)
func sub1() {
fmt.Println("sub1")
}
func main() {
u := fileIO.FileIO{}
getOpts(&u)
fmt.Println("Hello, main !!"+ u.FileName)
u.FileWrite()
sub1()
fmt.Println("Hello, 世界")
}
func getOpts(u *fileIO.FileIO) {
fmt.Println("Hello, getOpts")
flag.BoolVar(&u.Buffering, "b", false, "buffering")
flag.StringVar(&u.FileName, "filename", "testData.txt", "file name to write")
flag.IntVar(&u.BufferSize, "buffersize", 1024, "buffer size")
flag.IntVar(&u.WriteSize, "writesize", 102400, "write size")
flag.Parse()
fmt.Println("Hello, getOpts !!"+ u.FileName)
}
fileIO/fileWrite.go を作る
package fileIO
import (
"bufio"
"fmt"
"os"
)
type FileIO struct {
FileName string
Buffering bool
BufferSize int
WriteSize int
}
func check(e error) {
if e != nil {
panic(e)
}
}
func (u *FileIO) FileWrite() {
fmt.Println("Hello, FileWrite "+ u.FileName)
var f, err = os.Create(u.FileName)
fmt.Println("created "+ u.FileName)
check(err)
d1 := []byte("h")
if !u.Buffering {
u.BufferSize = 1
}
w := bufio.NewWriterSize(f, u.BufferSize)
for i := 0; i < u.WriteSize; i++ {
w.Write(d1)
}
w.Flush()
defer f.Close()
}
go test
でテストできるように main_test.go を書く。
package main
import (
"ie.u-ryukyu.ac.jp/teacher/kono/os/fileWrite3/fileIO"
"testing"
)
func Test_getOpts(t *testing.T) {
type args struct {
u fileIO.FileIO
}
// u1 := fileIO.FileIO{}
var tests = []struct {
name string
args args
}{
{"test", args{fileIO.FileIO{FileName : "fileName", Buffering : false, BufferSize : 1024, WriteSize : 1024}}},
// {"test", args{fileIO.FileIO{"", false, 1024, 1024}}},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
getOpts(& tt.args.u)
if tt.args.u.FileName == "" {
t.Fail()
}
})
}
}
func Test_sub1(t *testing.T) {
tests := []struct {
name string
}{
// TODO: Add test cases.
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
})
}
}
で、
go run main.go
go test
する。
gitlab CI/CD
今年は gitlab の CI/CD を使います。Project に .gitlab-ci.yml を以下の内容で追加して、git push します。
image: golang:latest
stages:
- test
- build
- deploy
format:
stage: test
script:
- go fmt $(go list ./... | grep -v /vendor/)
- go vet $(go list ./... | grep -v /vendor/)
- go test -race $(go list ./... | grep -v /vendor/)
compile:
stage: build
script:
- mkdir -p mybinaries
- go build -o mybinaries ./...
artifacts:
paths:
- mybinaries
成功したのと失敗した version の consle のURLを含めて提出します。