go語言八股文

1.go語言的接口是怎么實現

接口(interface)是一種類型,它定義了一組方法的集合。任何類型只要實現了接口中定義的所有方法,就被認為實現了該接口。

代碼的實現

package mainimport "fmt"// 定義接口
type Shape interface {Area() float64Perimeter() float64
}// 定義實現接口的類型
type Rectangle struct {Width  float64Height float64
}// 實現接口方法
func (r Rectangle) Area() float64 {return r.Width * r.Height
}func (r Rectangle) Perimeter() float64 {return 2 * (r.Width + r.Height)
}func main() {// 使用接口var s Shaperect := Rectangle{Width: 4, Height: 5}s = rectfmt.Println("面積:", s.Area())       // 輸出: 面積: 20fmt.Println("周長:", s.Perimeter())  // 輸出: 周長: 18
}

理解與記憶方法
1接口是方法的集合:接口定義了一組方法,任何類型實現了這些方法就實現了接口。
2隱式實現:Go 不需要顯式聲明實現某個接口,只要類型的方法集包含接口的所有方法即可。
3空接口:interface{} 是最通用的接口,可存儲任何類型值,用于靈活性需求。
4接口值的內部結構:接口值包含動態類型信息和實際數據值,支持類型斷言和類型切換。
5鴨子類型:如果一個東西走起來像鴨子,叫起來也像鴨子,那么它就是鴨子。即,只要類型實現了接口的方法,就被認為實現了接口。

2.go語言使用斷言時會發生拷貝嗎

**類型斷言是否會發生拷貝,取決于接口值的存儲方式

場景 1:接口存儲的是值類型(直接拷貝)

場景 2:接口存儲的是指針類型(不拷貝)

3.go語言中如何訪問私有成員

1.導出公有方法【推薦度:★★★★★】(get和set)
package mainimport "fmt"// 定義一個結構體
type Person struct {name string  // 私有字段age  int     // 私有字段
}// 導出 Get 方法 - 獲取 name
func (p *Person) GetName() string {return p.name
}// 導出 Set 方法 - 設置 name
func (p *Person) SetName(newName string) {p.name = newName
}// 導出 Get 方法 - 獲取 age
func (p *Person) GetAge() int {return p.age
}// 導出 Set 方法 - 設置 age
func (p *Person) SetAge(newAge int) {if newAge >= 0 {p.age = newAge} else {fmt.Println("年齡不能為負數")}
}func main() {// 創建 Person 實例person := Person{name: "張三",age:  25,}// 調用 Get 方法fmt.Println("姓名:", person.GetName()) // 輸出: 姓名: 張三fmt.Println("年齡:", person.GetAge())  // 輸出: 年齡: 25// 調用 Set 方法person.SetName("李四")person.SetAge(30)fmt.Println("新姓名:", person.GetName()) // 輸出: 新姓名: 李四fmt.Println("新年齡:", person.GetAge())  // 輸出: 新年齡: 30// 測試設置非法年齡person.SetAge(-5) // 輸出: 年齡不能為負數
}
2.反射(reflect包)【推薦度:★★★】
導入反射包:在代碼中導入 reflect 包。
獲取反射對象:使用 reflect.TypeOf 獲取類型的反射對象,reflect.ValueOf 獲取值的反射對象。
獲取字段:通過反射對象的 FieldByName 或 Fields 方法獲取結構體的字段。
設置可導出性:如果字段是私有的(小寫開頭),需要通過反射設置其可導出性(CanSet)。
訪問和修改字段:使用反射對象的 Interface 方法獲取字段的值,Set 方法修改字段的值
package mainimport ("fmt""reflect"
)// 定義一個結構體
type Person struct {name string  // 私有字段age  int     // 私有字段
}func main() {// 創建 Person 實例person := Person{name: "張三",age:  25,}// 使用反射訪問私有字段accessPrivateField(&person)
}// 使用反射訪問私有字段
func accessPrivateField(obj interface{}) {// 獲取反射對象val := reflect.ValueOf(obj).Elem() // 獲取指針對應的值// 獲取 name 字段nameField := val.FieldByName("name")if nameField.CanSet() {fmt.Println("name 字段值:", nameField.Interface())// 修改 name 字段值nameField.SetString("李四")}// 獲取 age 字段ageField := val.FieldByName("age")if ageField.CanSet() {fmt.Println("age 字段值:", ageField.Interface())// 修改 age 字段值ageField.SetInt(30)}// 打印修改后的值fmt.Println("修改后的 person:", obj.(*Person))
}
3.同包內直接訪問【推薦度:★★★★】

?

自學go語言筆記,希望我們可以一起學習!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/77990.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/77990.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/77990.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

kafka auto.offset.reset詳解

在 Kafka 中,auto.offset.reset latest 的含義及行為如下: 1. ??核心定義?? 當消費者組??首次啟動??或??無法找到有效的 offset??(例如 offset 過期、被刪除或從未提交)時,消費者會從分區的??最新位置…

深度學習-損失函數

目錄 1. 線性回歸損失函數 1.1 MAE損失 1.2 MSE損失 2. CrossEntropyLoss 2.1 信息量 2.2 信息熵 2.3 KL散度 2.4 交叉熵 3. BCELoss 4. 總結 1. 線性回歸損失函數 1.1 MAE損失 MAE(Mean Absolute Error,平均絕對誤差)通常也被稱…

第六篇:linux之解壓縮、軟件管理

第六篇:linux之解壓縮、軟件管理 文章目錄 第六篇:linux之解壓縮、軟件管理一、解壓和壓縮1、window壓縮包與linux壓縮包能否互通?2、linux下壓縮包的類型3、打包與壓縮 二、軟件管理1、rpm1、什么是rpm?2、rpm包名組成部分3、如何…

Redis 鍵管理

Redis 鍵管理 以下從鍵重命名、隨機返回鍵、鍵過期機制和鍵遷移四個維度展開詳細說明,結合 Redis 核心命令與底層邏輯進行深入分析: 一、鍵重命名 1. ?RENAME?? 與 ?RENAMENX?? **RENAME key newkey?**: 功能:強制重命名…

OpenCV 模板匹配方法詳解

文章目錄 1. 什么是模板匹配?2. 模板匹配的原理2.1數學表達 3. OpenCV 實現模板匹配3.1基本步驟 4. 模板匹配的局限性5. 總結 1. 什么是模板匹配? 模板匹配(Template Matching)是計算機視覺中的一種基礎技術,用于在目…

TextCNN 模型文本分類實戰:深度學習在自然語言處理中的應用

在自然語言處理(NLP)領域,文本分類是研究最多且應用最廣泛的任務之一。從情感分析到主題識別,文本分類技術在眾多場景中都發揮著重要作用。最近,我參與了一次基于 TextCNN 模型的文本分類實驗,從數據準備到…

Qt-創建模塊化.pri文件

文章目錄 一、.pri文件的作用與基本結構作用基本結構 二、創建.pri文件如何添加模塊代碼? 一、.pri文件的作用與基本結構 作用 在Qt開發中,.pri文件(Project Include File)是一種配置包含文件,用于模塊化管理和復用項…

SpringCloud組件——Eureka

一.背景 1.問題提出 我們在一個父項目下寫了兩個子項目,需要兩個子項目之間相互調用。我們可以發送HTTP請求來獲取我們想要的資源,具體實現的方法有很多,可以用HttpURLConnection、HttpClient、Okhttp、 RestTemplate等。 舉個例子&#x…

EAL4+與等保2.0:解讀中國網絡安全雙標準

EAL4與等保2.0:解讀中國網絡安全雙標準 在當今數字化時代,網絡安全已成為各個行業不可忽視的重要議題。特別是在金融、政府、醫療等領域,保護信息的安全性和隱私性顯得尤為關鍵。在中國,EAL4和等級保護2.0(簡稱“等保…

FFmpeg+Nginx+VLC打造M3U8直播

一、視頻直播的技術原理和架構方案 直播模型一般包括三個模塊:主播方、服務器端和播放端 主播放創造視頻,加美顏、水印、特效、采集后推送給直播服務器 播放端: 直播服務器端:收集主播端的視頻推流,將其放大后推送給…

【Redis】緩存三劍客問題實踐(上)

本篇對緩存三劍客問題進行介紹和解決方案說明,下篇將進行實踐,有需要的同學可以跳轉下篇查看實踐篇:(待發布) 緩存三劍客是什么? 緩存三劍客指的是在分布式系統下使用緩存技術最常見的三類典型問題。它們分…

Flink 2.0 編譯

文章目錄 Flink 2.0 編譯第一個問題 java 版本太低maven 版本太低maven 版本太高開始編譯擴展多版本jdk 配置 Flink 2.0 編譯 看到Flink2.0 出來了,想去玩玩,看看怎么樣,當然第一件事,就是編譯代碼,但是沒想到這么多問…

獲取印度股票市場列表、查詢IPO信息以及通過WebSocket實時接收數據

為了對接印度股票市場,獲取市場列表、查詢IPO信息、查看漲跌排行榜以及通過WebSocket實時接收數據等步驟。 1. 獲取市場列表 首先,您需要獲取支持的市場列表,這有助于了解哪些市場可以交易或監控。 請求方法:GETURL&#xff1a…

云原生--CNCF-1-云原生計算基金會介紹(云原生生態的發展目標和未來)

1、CNCF定義與背景 云原生計算基金會(Cloud Native Computing Foundation,CNCF)是由Linux基金會于2015年12月發起成立的非營利組織,旨在推動云原生技術的標準化、開源生態建設和行業協作。其核心目標是通過開源項目和社區協作&am…

【Rust 精進之路之第5篇-數據基石·下】復合類型:元組 (Tuple) 與數組 (Array) 的定長世界

系列: Rust 精進之路:構建可靠、高效軟件的底層邏輯 作者: 碼覺客 發布日期: 2025-04-20 引言:從原子到分子——組合的力量 在上一篇【數據基石上】中,我們仔細研究了 Rust 的四種基本標量類型&#xff1…

MongoDB 集合名稱映射問題

項目場景 在使用 Spring Data MongoDB 進行開發時,定義了一個名為 CompetitionSignUpLog 的實體類,并創建了對應的 Repository 接口。需要明確該實體類在 MongoDB 中實際對應的集合名稱是 CompetitionSignUpLog 還是 competitionSignUpLog。 問題描述 …

物聯網 (IoT) 安全簡介

什么是物聯網安全? 物聯網安全是網絡安全的一個分支領域,專注于保護、監控和修復與物聯網(IoT)相關的威脅。物聯網是指由配備傳感器、軟件或其他技術的互聯設備組成的網絡,這些設備能夠通過互聯網收集、存儲和共享數據…

PCB原理圖解析(炸雞派為例)

晶振 這是外部晶振的原理圖。 32.768kHz 的晶振,常用于實時時鐘(RTC)電路,因為它的頻率恰好是一天的分數(32768 秒),便于實現秒計數。 C25 和 C24:兩個 12pF 的電容,用于…

Jupyter Notebook 中切換/使用 conda 虛擬環境的方式(解決jupyter notebook 環境默認在base下面的問題)

使用 nb_conda_kernels 添加所有環境 一鍵添加所有 conda 環境 conda activate my-conda-env # this is the environment for your project and code conda install ipykernel conda deactivateconda activate base # could be also some other environment conda in…

【JAVA】十三、基礎知識“接口”精細講解!(二)(新手友好版~)

哈嘍大家好呀qvq,這里是乎里陳,接口這一知識點博主分為三篇博客為大家進行講解,今天為大家講解第二篇java中實現多個接口,接口間的繼承,抽象類和接口的區別知識點,更適合新手寶寶們閱讀~更多內容持續更新中…