欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

golang中struct和interface的基礎(chǔ)使用教程

 更新時間:2018年03月25日 11:27:15   作者:helight  
Go不同于一般的面向?qū)ο笳Z言,需要我們好好的學(xué)習(xí)研究,下面這篇文章主要給大家介紹了關(guān)于golang中struct和interface的基礎(chǔ)使用的相關(guān)資料,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。

前言

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

struct

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

struct定義

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

struct的方法

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

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

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

struct的嵌入(Embedding)

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

type player struct{
 User
}

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

struct的tag

這種方式主要是用在xml,json和struct間相互轉(zhuǎn)換,非常方便直觀,比如接口給的參數(shù)一般是json傳過來,但是內(nèi)部我們要轉(zhuǎn)為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不支持完整的面向?qū)ο笏枷?,它沒有繼承,多態(tài)則完全依賴接口實現(xiàn)。golang只能模擬繼承,其本質(zhì)是組合,只不過golang語言為我們提供了一些語法糖使其看起來達到了繼承的效果。Golang中的接口,不需要顯示的實現(xiàn)。Interface類型可以定義一組方法,但是這些不需要實現(xiàn)。并且interface不能包含任何變量。只要一個變量,含有接口類型中的所有方法,那么這個變量就實現(xiàn)這個接口。因此,golang中沒有implement類似的關(guān)鍵字;如果一個變量含有了一個interface類型的多個方法,那么這個變量就實現(xiàn)了多個接口;如果一個變量只含有了一個interface的方部分方法,那么這個變量沒有實現(xiàn)這個接口。

interface的定義

interface類型默認(rèn)是一個指針。

例子:

Interface定義

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

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

var a int
var 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
}

Interface嵌套

一個接口可以嵌套在另外的接口。即需要實現(xiàn)2個接口的方法。在下面的例子中Used就包含了Car這個接口的所有方法。
例子:

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

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • golang使用iconv報undefined:XXX的問題處理方案

    golang使用iconv報undefined:XXX的問題處理方案

    這篇文章主要介紹了golang使用iconv報undefined:XXX的問題處理方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • golang?xorm?自定義日志記錄器之使用zap實現(xiàn)日志輸出、切割日志(最新)

    golang?xorm?自定義日志記錄器之使用zap實現(xiàn)日志輸出、切割日志(最新)

    這篇文章主要介紹了golang?xorm?自定義日志記錄器,使用zap實現(xiàn)日志輸出、切割日志,包括連接postgresql數(shù)據(jù)庫的操作方法及?zap日志工具?,本文結(jié)合實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10
  • Go語言框架Beego項目搭建的方法步驟

    Go語言框架Beego項目搭建的方法步驟

    這篇文章主要介紹了Go語言框架Beego項目搭建的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • golang壓縮與解壓縮文件的示例代碼

    golang壓縮與解壓縮文件的示例代碼

    這篇文章主要給大家介紹了golang壓縮與解壓縮文件,文中通過代碼示例給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-02-02
  • Go語言執(zhí)行系統(tǒng)命令行命令的方法

    Go語言執(zhí)行系統(tǒng)命令行命令的方法

    這篇文章主要介紹了Go語言執(zhí)行系統(tǒng)命令行命令的方法,實例分析了Go語言操作系統(tǒng)命令行的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • 詳解Go語言的內(nèi)存模型及堆的分配管理

    詳解Go語言的內(nèi)存模型及堆的分配管理

    這篇筆記主要介紹Go內(nèi)存分配和Go內(nèi)存管理,會輕微涉及內(nèi)存申請和釋放,以及Go垃圾回收,文中有詳細的代碼示例以及圖片介紹,需要的朋友可以參考下
    2023-05-05
  • go依賴注入庫samber/do使用示例講解

    go依賴注入庫samber/do使用示例講解

    這篇文章主要介紹了go依賴注入庫samber/do使用,在本文中,我們學(xué)習(xí)了如何使用samber/do在?Go?中提供依賴注入,需要的朋友可以參考下
    2024-02-02
  • Go基于GORM 獲取當(dāng)前請求所執(zhí)行的 SQL 信息(思路詳解)

    Go基于GORM 獲取當(dāng)前請求所執(zhí)行的 SQL 信息(思路詳解)

    這篇文章主要介紹了Go基于GORM 獲取當(dāng)前請求所執(zhí)行的 SQL 信息(思路詳解),本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • Go語言通道之緩沖通道

    Go語言通道之緩沖通道

    這篇文章介紹了Go語言通道之緩沖通道,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • golang 函數(shù)返回chan類型的操作

    golang 函數(shù)返回chan類型的操作

    這篇文章主要介紹了golang 函數(shù)返回chan類型的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04

最新評論