kurumi-bioの雑記帳

プログラミング、パソコン、ペット、 犬、お出かけ

初心者のGo言語 -21- <Link,LookupEnv>

こんにちは、kurumi-bioです。

第7回目のosパッケージ(標準ライブラリー)の学習です。

 

 

環境

  • Windows
    OSバージョン:Windows11 Home 22H2
    Go言語のバージョン:go version go1.20 windows/amd64
  • Linux
    OSバージョン:openSUSE Leap 15.4
    Go言語のバージョン:go version go1.20.1 linux/amd64

 

Link関数

func Link(oldname, newname string) error

Link は、oldname ファイルへのハード リンクとして newname を作成します。エラーが発生した場合、タイプは *LinkError になります。

[ソースコード]LinkSample.go

package main

import (
    "fmt"
    "os"
)
    
func main() {
    e := os.Link("src.txt", "dest.txt")
    if e != nil {
        fmt.Fprintf(os.Stderr, "Error: %v \n", e)
        os.Exit(1)
    }
} 

src.txtのハードリンクのdest.txtを作成します。

[実行結果]

Windowsの実行結果です。
fsutil hardlink list ファイル名で指定したファイルのハードリンクの一覧が表示されます。LinkSample.goを実行する前はsrc.txtのハードリンクは自ファイルのみでしたが、LinkSample.goを実行した後は、dest.txtがハードリンク先として表示されています。

 

Linuxの実行結果です。
lsコマンドにiオプションを指定してi-nodeを表示しています。src.txtとdest.txtが同じi-node番号(13781)になっていますのでハードリンクになっていることがわかります。またパーミッションの後の数字がハードリンクの数を表しており、2に変わっていることからもハードリンクが作成されたことがわかります。

 

既にdest.txtが作成されている場合は Cannot create a file when that file already exists. のエラーが発生します。

 

src.txtが存在しない場合は The system cannot find the file specified. のエラーが発生します。

LookupEnv関数

func LookupEnv(key string) (string, bool)

LookupEnv は、キーによって指定された環境変数の値を取得します。変数が環境に存在する場合、値 (空の場合もあります) が返され、ブール値は true になります。それ以外の場合、戻り値は空になり、ブール値は false になります。

[ソースコード]LookupEnvSample.go

package main

import (
    "fmt"
    "os"
)

func main() {
    s, b := os.LookupEnv("CPU")
    if b == true {
        fmt.Printf("CPU=[%s]\n", s)
    } else {
        fmt.Println("Not Found.")
    }
    
    s, b = os.LookupEnv("LANGUAGE")
    if b == true {
        fmt.Printf("LANGUAGE=[%s]\n", s)
    } else {
        fmt.Println("Not Found.")
    }
    
    s, b = os.LookupEnv("NON")
    if b == true {
        fmt.Printf("NON=[%s]\n", s)
    } else {
        fmt.Println("Not Found.")
    }
    
}


環境変数のCPU、LANGUAGE、NONを取得して表示します。環境変数が存在しなかった場合は"Not Found."と表示します。

[実行結果]

Linuxの実行結果です。
Windowsでは、値が空の環境変数を作れなかったため<Linuxで試しました。環境変数CPUの値は、x86_64で、環境変数LANGUAGEの値は空、環境変数NONは存在しませんでした。ブール値が戻ってくるので、環境変数が存在するが値が空という判断が可能になっています。

**最後までご覧いただきありがとうございます**