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.go

hello.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を含めて提出します。


Shinji KONO / Tue Sep 17 15:32:39 2024