日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[Golang学习笔记] 05 程序实体2 作用域访问权限和变量重声明

發布時間:2025/7/25 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Golang学习笔记] 05 程序实体2 作用域访问权限和变量重声明 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作用域訪問權限:

程序實體訪問權限(作用域)有三種:
1. 包級私有(代碼包)
2. 模塊級私有(代碼包)
3. 公開(全域)。

一個函數是一個代碼塊。
一個程序實體的作用域總是會被限制在某個代碼塊中。
好處:控制訪問權限, 對“高內聚,低耦合”思想的實踐。

面試題:如果一個變量與其外層代碼塊中的變量重名會出現什么狀況?

package mainimport "fmt"var block = "package"func main() {block := "function"{block := "inner"fmt.Printf("The block is %s.\n", block)}fmt.Printf("The block is %s.\n", block) }

上面代碼能通過編譯。運行后打印內容:

The block is inner. The block is function.

解析:

對于不同的代碼塊,變量重名沒有什么大不了,照樣可以通過編譯。
1. 代碼引用變量的時候總會最優先查找當前那個變量。“當前代碼塊”僅僅是引用變量的代碼所在的那個代碼塊,并不包含任何子代碼塊。
2. 如果當前代碼塊中沒有聲明以此為名的變量,程序會沿著代碼塊的嵌套關系,從直接包含當前代碼塊的那個代碼塊開始,一層一層地查找。

查找過程:從小作用域到大作用域

典型回答:
如果變量重名,在全域代碼塊中聲明的變量會被子代碼塊中的重聲明覆蓋。

在子代碼塊中聲明的變量,只能在該代碼塊中生效,使用。

重聲明:

Q:不同代碼塊中的重命名變量與變量重聲明中的變量區別在哪兒?
1. 變量重聲明的變量一定在某一個代碼塊內。不包含它的任何子代碼塊。
2. 變量重聲明是對同一個變量的多次聲明,變量只有一個。而可重命名變量中涉及的變量肯定是有多個的。
3. 不論對變量重聲明多少次,其類型必須始終一致。具體遵從第一次被聲明時給定的類型。而可重命名變量無此限制。
4. 可重命名變量在代碼塊之間,存在直接或間接的嵌套關系,存在“屏蔽”的現象。

?

思考題:如果通過import . xxx 這種導入代碼包中的變量與當前代碼包中的變量重名了,那么Go語言是會把他們當做“可重名變量”看待還是會編譯報錯呢?

A:會報redeclared錯誤。(變量名大寫)
采用import . xxx,會認為引入的代碼包的代碼,如果在本包中一樣,那作用域其實時同一個,不允許重復聲明。

?

?

?本學習筆記是僅為了總結自己學到的Go語言核心知識,方便以后回憶,文中部分內容摘錄自極客時間的《Go語言核心36講》專欄,如有侵權,請聯系我刪除。

?

?

?

轉載于:https://www.cnblogs.com/fyql/p/10202358.html

總結

以上是生活随笔為你收集整理的[Golang学习笔记] 05 程序实体2 作用域访问权限和变量重声明的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。