職案人

求職・歴史・仏教などについて掲載するつもりだが、自分の思いつきが多いブログだよ。適当に付き合って下さい。

ユーティリティ関数

2023年06月28日 | GO言語
ユーティリティ関数(io/ioutilパッケージ)

【開発環境】
OS:Win11(64ビット)
go version go1.19.4 windows/amd64
VSCode1.72.2、及びコマンドプロンプト

◆ユーティリティ関数
io/ioutilパッケージには入出力に利用できるユーティリティ関数が定義されている。
例えば、io/ioutil.WriteFite()や、io/ioutil.ReadFile()で簡単にファイルへの読み書きができる

・サンプルコード「iou.go」
//iou.go
package main

import (
"fmt"
"io/ioutil"
)

func main(){
fname := "../sample.dat"

//ファイルへの書き込み
txt := "これはサンプルテキスト"
//書き込み
werr := ioutil.WriteFile(fname,([]byte)(txt),0666)
if werr != nil{
_ = fmt.Errorf("%sに書き込みません",fname)
}

//ファイルからの読み込み
data,rerr := ioutil.ReadFile(fname)
if rerr != nil {
_= fmt.Errorf("%sを読み込めません",fname)
} else {
fmt.Print(string(data))
}
}


・実行ファイル「iou.exe」を作る
PS D:\GO言語\サンプルプログラム\Go-9\9-3> go build iou.go
・実行
PS D:\GO言語\サンプルプログラム\Go-9\9-3> .\iou
これはサンプルテキスト
PS D:\GO言語\サンプルプログラム\Go-9\9-3>
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

便利な入出力関数

2023年06月25日 | GO言語
便利な入出力関数


【開発環境】
OS:Win11(64ビット)
go version go1.19.4 windows/amd64
VSCode1.72.2、及びコマンドプロンプト

◆io.Copy()
単にファイルをコピーするだけなら、io.Copy()関数が便利り、この様な便利な関数がGO言語には、沢山用意されれいる。

・2つのファイルを用意する
コピー元の「test1.txt」と、コピー先の「test1.txt」を用意する
「test1.txt」に下記のような文字列を書く
これはコピーのテストです


・プログラムファイル「iocopy.go」をコーテイングする
// iocopy.go
package main

import (
"fmt"
"io"
"os"
)

func main() {
//文字列の長さ
if len(os.Args) < 3 {
fmt.Println("引数は2個指定して下さい。")
os.Exit(1)
}

//ファイルを開く
src, err := os.Open(os.Args[1])
if err != nil {
panic(err)
}

defer src.Close()

dst, err := os.Create(os.Args[2])
if err != nil {
panic(err)
}
//deferは関数内で特定の文を遅延実行させる
defer dst.Close()

//ファイルをコピーする
_, err = io.Copy(dst, src)
if err != nil {
panic(err)
}
}

・ビルドする
PS D:\GO言語\サンプルプログラム\Go-9\9-3> go build iocopy.go

・実行する
PS D:\GO言語\サンプルプログラム\Go-9\9-3> .\iocopy test1.txt test2.txt
PS D:\GO言語\サンプルプログラム\Go-9\9-3>

・test2.txtを開く
「これはコピーのテストです」がコピーされている。
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

GO言語の実行ファイル

2023年06月18日 | GO言語
実行ファイル


【開発環境】
OS:Win11(64ビット)
go version go1.19.4 windows/amd64
VSCode1.72.2、及びコマンドプロンプト

VSCodeの場合
1,プログラムを入れるフォルダーを作り、VSCodeでそれを読み込む。
それから、「hello.go」ファイルを作り、コードを書く

2,go build hello.goで実行ファイルを作る

3,実行ファイルを表示される


コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

スライスを読み込むには

2023年06月17日 | GO言語
スライスを読み込むには


【開発環境】
OS:Win11(64ビット)
go version go1.19.4 windows/amd64
VSCode1.72.2、及びコマンドプロンプト

◆スライスの読み込み
スライスは配列と似ていますが、最も特徴的な点は、Go の配列は宣言した時点で型とサイズが決められているのに対して、「スライスはサイズが決められていない」という点。
つまり、スライスは必要に応じてデータ領域を割り当て直すことで、動的な配列として振る舞います

・サンプルプログラム「wrpoints.go」
package main

import (
"fmt"
"log"
"os"
)

//Point 型の定義
//スライスの構造体
type Point struct{x,y int}
//定数
const fname = "points.data"

//Load 点の情報を読み込むメソッド
//スライスの情報 (内容、長さ、キャパシティ)
func Load() []Point {
var points = []Point{}
//ファイルを開く
file,err := os.OpenFile(fname,os.O_RDONLY,0666)
if err != nil {
log.Fatal(err)
}

//ファイルから読み込む
var x,y int
for{
n,err := fmt.Fscanf(file,"%d %d",&x,&y)
if n == 0 || err != nil {
break
} else {
points = append(points,Point{x,y})
}
}
//ファイルを閉じる
file.Close()
return points

}

//Save 点の情報を保存するメソッド
func Save(points []Point) int {
//ファイルを開く
file,err := os.OpenFile(fname,os.O_RDWR|os.O_CREATE,0666)
if err != nil {
log.Fatal(err)
}

//ファイルに書き込む
for _, p := range points {
fmt.Fprintf(file,"%d %d\n",p.x,p.y)
}

//ファイルを閉じる
file.Close()
return len(points) //書き込んだ点の数を返す
}

func main() {
var points = []Point{}
//5個のデータを作る
points = append(points, Point{5,5})
points = append(points, Point{7,8})
points = append(points, Point{4,3})
points = append(points, Point{7,4})
points = append(points, Point{9,5})

//データを表示
fmt.Println("書き込むデータ")
for i,p := range points{
fmt.Printf("point[%d] = (%d,%d)\n",i+1,p.x,p.y)
}
//データを保存する
Save(points)

//データを保存する
data := Load()

//読み込んだデータを表示する
fmt.Println("読み込んだデータ")
for i,p := range data {
fmt.Printf("point[%d] = (%d,%d)\n",i+1,p.x,p.y)
}

}



・実行
PS D:\GO言語\サンプルプログラム\Go-9> go run wrpoints.go
書き込むデータ
point[1] = (5,5)
point[2] = (7,8)
point[3] = (4,3)
point[4] = (7,4)
point[5] = (9,5)
読み込んだデータ
point[1] = (5,5)
point[2] = (7,8)
point[3] = (4,3)
point[4] = (7,4)
point[5] = (9,5)


コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

書式付きの入力--fmt.Fscanf()

2023年06月11日 | 医療
書式付きの入力:fmt.Fscanf()関数


【開発環境】
OS:Win11(64ビット)
go version go1.19.4 windows/amd64
VSCode1.72.2、及びコマンドプロンプト

◆fmt.Fscanf()関数について
コンソールからの書式付きの入力時に使われるのが、fmt.Scanf()関数でしたが、ファイルからの書式付きの入力には、fmt.Fscanf()関数を使う。つまり、ファイルの読み込み

・サンプルプログラム「fscan.go」
package main

import(
"fmt"
"log"
"os"
)

func main(){
fname := "sample2.dat"
words := [...]string{"Dog","Cat","Pig","Deer","Raccons"}

//ファイルを開く
ofile,oerr := os.OpenFile(fname,os.O_RDWR|os.O_CREATE,0666)
if oerr != nil {
log.Fatal(oerr)
}

//ファイルに書き込む
for i,w := range words {
fmt.Fprintf(ofile,"%03d %s\n",i+1,w)
}

//ファイルを閉じる
ofile.Close()

//ファイルを開く
ifile,ierr := os.OpenFile(fname,os.O_RDONLY,0444)
if ierr != nil {
log.Fatal(ierr)
}

//ファイルから読み込む
var v int
var str string
for {
   //ifile→os.Stdinにするとキーボード入力
//nは読み込んだ値の個数
    //書式指定文字列"%d %s"は、最初の値が整数で、空白に続けて文字列を読み込む
n,err := fmt.Fscanf(ifile,"%d %s",&v,&str)
if n == 0 || err != nil {
break
} else {
fmt.Printf("%03d %s\n",v,str)
}
}
//ファイルを閉じる
ifile.Close()
}


・実行
PS D:\GO言語\サンプルプログラム\Go-9> go run fscan.go
001 Dog
002 Cat
003 Pig
004 Deer
005 Raccons
PS D:\GO言語\サンプルプログラム\Go-9>
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする