国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > 幫助中心 > 正文

golang中struct和interface的基礎使用教程

2024-07-09 22:42:21
字體:
來源:轉載
供稿:網友

前言

本文主要給大家介紹了關于golang中struct和interface的相關內容,是屬于golang的基本知識,下面話不多說了,來一起看看詳細的介紹吧。

struct

struct 用來自定義復雜數據結構,可以包含多個字段(屬性),可以嵌套;go中的struct類型理解為類,可以定義方法,和函數定義有些許區(qū)別;struct類型是值類型。

struct定義

type User struct { Name string Age int32 mess string}var user Uservar user1 *User = &User{}var user2 *User = new(User)

struct的方法

在go語言中,我們可以為自定義類型定義類型相關的方法,比如:

func (p *player) Name() string{ return p.name}

上面的代碼為player這個自定義類型聲明了一個名為Name的方法,該方法返回一個string。值得注意的是(p *player)這段代碼指定了我們是為player創(chuàng)建方法,并將調用該方法的實例指針當作變量p傳入該函數,如果沒有(p *player)這段代碼,這個方法就變成了一個普通的全局函數。

struct的嵌入(Embedding)

go語言中的“繼承”和其他語言中的繼承有很大區(qū)別,比如:

type player struct{ User}

這是一種“繼承”的寫法,在go語言中這種方式叫做“嵌入”(embed),此時player類型就擁有了User類型的Name等變量

struct的tag

這種方式主要是用在xml,json和struct間相互轉換,非常方便直觀,比如接口給的參數一般是json傳過來,但是內部我們要轉為struct再進行處理。

例子:

import "encoding/json"type User struct { Name string `json:"userName"` Age int `json:"userAge"`}func main() { var user User user.Name = "nick" user.Age = 18  conJson, _ := json.Marshal(user) fmt.Println(string(conJson)) //{"userName":"nick","userAge":0}}

interface

golang不支持完整的面向對象思想,它沒有繼承,多態(tài)則完全依賴接口實現(xiàn)。golang只能模擬繼承,其本質是組合,只不過golang語言為我們提供了一些語法糖使其看起來達到了繼承的效果。Golang中的接口,不需要顯示的實現(xiàn)。Interface類型可以定義一組方法,但是這些不需要實現(xiàn)。并且interface不能包含任何變量。只要一個變量,含有接口類型中的所有方法,那么這個變量就實現(xiàn)這個接口。因此,golang中沒有implement類似的關鍵字;如果一個變量含有了一個interface類型的多個方法,那么這個變量就實現(xiàn)了多個接口;如果一個變量只含有了一個interface的方部分方法,那么這個變量沒有實現(xiàn)這個接口。

interface的定義

interface類型默認是一個指針。

例子:

Interface定義

type Car interface { NameGet() string Run(n int) Stop()}

空接口 Interface{}:空接口沒有任何方法,所以所有類型都實現(xiàn)了空接口。

var a intvar b interface{} //空接口b = a

interface的多態(tài)

一種事物的多種形態(tài),都可以按照統(tǒng)一的接口進行操作。這種方式是用的最多的,有點像c++中的類繼承。

例子:

type Item interface { Name() string Price() float64} type VegBurger struct {} func (r *VegBurger) Name() string{ return "vegburger"} func (r *VegBurger) Price() float64{ return 1.5} type ChickenBurger struct {} func (r *ChickenBurger) Name() string{ return "chickenburger"} func (r *ChickenBurger) Price() float64{ return 5.5}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 建始县| 抚州市| 彭阳县| 江山市| 金山区| 义乌市| 玉山县| 双辽市| 安多县| 广水市| 新田县| 金山区| 岳阳市| 襄汾县| 邓州市| 会东县| 武强县| 大埔县| 奉节县| 广宁县| 怀集县| 蓬莱市| 贵阳市| 平乐县| 安丘市| 金平| 灵山县| 吕梁市| 富源县| 祁阳县| 酒泉市| 海丰县| 丰原市| 衡阳县| 湟中县| 开远市| 嫩江县| 庄河市| 基隆市| 合阳县| 桐柏县|