成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Go 提問:值為 Nil 能調用函數嗎?

開發 后端
今天給大家分享了一個 Go 語言里面的一個小細節,平時可能很多人沒注意到,畢竟 IDE 也會標黃,會避開這個問題點。

[[442191]]

本文轉載自微信公眾號「腦子進煎魚了」,作者陳煎魚。轉載本文請聯系腦子進煎魚了公眾號。

大家好,我是煎魚。

最近在我們 Go 的技術交流群里,有一個小伙伴提了一個程序方面的問題,還挺有意思的,分享給大家。

示例

示例程序如下:

  1. type T struct{} 
  2.  
  3. func (t *T) Hello() string { 
  4.  if t == nil { 
  5.   fmt.Println("腦子進煎魚了"
  6.   return "" 
  7.  } 
  8.  
  9.  return "煎魚進腦子了" 
  10.  
  11. func main() { 
  12.  var t *T 
  13.  t.Hello() 

這段程序的運行結果是什么?

從程序的分析來看,變量 t 并沒有初始化,只是聲明了類型。然后就直接調用了 Hello 方法,像是 nil 調用函數,理論上應該出現恐慌(panic)。

運行結果是:

  1. panic: runtime error: invalid memory address or nil pointer dereference 

對不對呢?

顯然,真正的運行結果是:

  1. 腦子進煎魚了 

請你思考一下,想想這是為什么?

為什么

問題的原因是:很多小伙伴認為變量 t 的值都是 nil 了,不應該還能調用到才對。

更抽象化來講,就是 ”程序是如何檢查對象指針來尋找和調度所需函數“。

實際上,在 Go 中表達式 Expression.Name 的語法,所調用的函數完全由 Expression 的類型決定。

其調用函數的指向不是由該表達式的特定運行時值來決定,包括我們前面所提到的 nil。

具體如下:

  1. func (p *Sometype) Somemethod (firstArg int) {} 

本質上是:

  1. func SometypeSomemethod(p *Sometype, firstArg int) {} 

這么一看,其實大家應該都明白了。

上述入參 p *Sometype 是有具體上下文類型的,自然而然也就能調用到相應的方法。如果是沒有任何上下文類型的,例如:nil.Somemethod 方法來調用,那肯定就是無法運行的。

與值是不是 nil,是什么,沒有太多直接的影響。只要有預期的上下文類型就可以了。

總結

今天給大家分享了一個 Go 語言里面的一個小細節,平時可能很多人沒注意到,畢竟 IDE 也會標黃,會避開這個問題點。

 

在理解 Go 的設計和思考上,我們是需要清晰其背后的原因和邏輯的,也就是類型決定其調用,而不是值(容易誤判)。

 

責任編輯:武曉燕 來源: 腦子進煎魚了
相關推薦

2024-01-15 07:08:34

IsNil方法結構體

2023-10-30 08:49:23

Go提案離職

2021-11-02 12:19:18

Go函數結構

2009-08-25 10:59:00

C#調用函數顯示值

2022-06-13 07:03:25

Go 語言怎么優化重

2025-02-18 11:15:12

2010-05-21 14:53:33

2020-12-17 06:25:05

Gopanic 模式

2023-02-26 23:36:08

PHPGo函數

2022-02-28 08:11:30

gopsutil網絡進程

2018-11-05 14:53:14

Go函數代碼

2025-02-24 09:30:15

2015-03-13 09:36:09

NULLnullptr

2021-04-12 10:20:20

Java微服務Go

2023-07-11 08:46:38

閉包函數Rust

2024-01-02 07:43:47

Go語言靜態類型

2019-01-31 01:28:13

華為

2009-12-16 14:51:26

Ruby nil

2023-11-30 07:15:36

GolangRecover

2023-12-04 07:09:53

函數遞歸python
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 男女视频在线观看网站 | 午夜视频在线观看一区二区 | 亚州av| 精品一区二区久久久久久久网站 | 久久久国产一区二区三区 | 97av视频在线 | 美女视频一区 | 欧美精品二区 | 中文字幕日韩一区 | 欧美午夜一区二区三区免费大片 | 免费成人高清在线视频 | 成人免费视频在线观看 | www,黄色,com| 久久午夜视频 | 精品久久久久久久久久久院品网 | 欧美日韩精品一区二区三区四区 | 成人高潮片免费视频欧美 | 成人精品一区二区 | 98久久| 欧美午夜激情在线 | 美国av片在线观看 | www.日韩高清 | 在线三级网址 | 色婷婷婷婷色 | 国产成人网 | 日韩视频一区二区在线 | 欧美又大粗又爽又黄大片视频 | 欧美一区二区三区四区五区无卡码 | 狠狠干天天干 | 国产精品久久二区 | 亚洲国产精品91 | 亚洲国产在| 国产精品一区二区三区在线 | 欧美精选一区二区 | 在线观看免费av网 | 欧美高清视频一区 | 日韩av一区二区在线观看 | 日韩高清在线 | 日日摸天天添天天添破 | 亚洲 中文 欧美 日韩 在线观看 | 无码一区二区三区视频 |