2019年12月30日月曜日

開発環境

ということで、変数の値がnilの変数でメソッドを呼び出してみた。

コード

package main

import "fmt"

type myInt int

func (*myInt) f() {
 fmt.Println("Hello, nil!")
}

func main() {
 a := myInt(10)
 myIntPtr := &a
 myIntPtr = nil
 fmt.Println(myIntPtr == nil)
 fmt.Printf("%T\n", myIntPtr)
 myIntPtr.f()
}

入出力結果(Zsh、PowerShell、Terminal)

% go run main.go
true
*main.myInt
Hello, nil!
%

ということで、おりさのさんの言う通り、nilでもメソッドを呼び出せるみたい。ただ、ゴリラ@バナナ不足中さんの意味、意図が、checkValidを呼び出す他の関数やメソッドで、すでにnilかどうか検査してからcheckValidを呼び出してるからわざわざnilチェックする必要ないってことかも。 (⚠️os.Fileのソース、checkValidメソッドを呼び出す関数、メソッドを読んで調べてないからどっちかは分からず。)

0 コメント:

コメントを投稿