Đó là xác nhận loại. Câu hỏi if
đang kiểm tra nếu err
cũng là *exec.ExitError
. Các ok
cho bạn biết cho dù đó là hay không. Cuối cùng, exiterr
là err
, nhưng "đã chuyển đổi" thành *exec.ExitError
. Điều này chỉ hoạt động với các loại interface
.
Bạn cũng có thể bỏ qua ok
nếu bạn chắc chắn 100000 phần trăm loại cơ bản. Tuy nhiên, nếu bạn bỏ qua ok
và hóa ra bạn đã sai, thì bạn sẽ nhận được panic
.
// find out at runtime if this is true by checking second value
exitErr, isExitError := err.(*exec.ExitError)
// will panic if err is not *exec.ExitError
exitErr := err.(*exec.ExitError)
ok
không phải là một phần của cú pháp, bằng cách này. Nó chỉ là một boolean và bạn có thể đặt tên nó bất cứ điều gì bạn muốn.
Cảm ơn. Trong ý nghĩa đó là nó tương tự như một diễn viên? – OscarRyz
Vâng, chỉ "tương tự". Quá trình truyền được gọi là [conversion] (http://golang.org/ref/spec#Conversions) trong Go. Có thể nói rằng chuyển đổi xảy ra vào thời gian biên dịch và xác nhận khi chạy. – Mostafa