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

Go語言中普通函數(shù)與方法的區(qū)別分析

 更新時間:2015年02月08日 11:47:08   作者:books1958  
這篇文章主要介紹了Go語言中普通函數(shù)與方法的區(qū)別,以實例形式對比分析了普通函數(shù)與方法使用時的區(qū)別與相關(guān)技巧,需要的朋友可以參考下

本文實例分析了Go語言中普通函數(shù)與方法的區(qū)別。分享給大家供大家參考。具體分析如下:

1.對于普通函數(shù),接收者為值類型時,不能將指針類型的數(shù)據(jù)直接傳遞,反之亦然。

2.對于方法(如struct的方法),接收者為值類型時,可以直接用指針類型的變量調(diào)用方法,反過來同樣也可以。

以下為簡單示例:

復(fù)制代碼 代碼如下:
package structTest 
 
//普通函數(shù)與方法的區(qū)別(在接收者分別為值類型和指針類型的時候) 
//Date:2014-4-3 10:00:07 
 
import ( 
    "fmt" 

 
func StructTest06Base() { 
    structTest0601() 
    structTest0602() 

 
//1.普通函數(shù) 
//接收值類型參數(shù)的函數(shù) 
func valueIntTest(a int) int { 
    return a + 10 

 
//接收指針類型參數(shù)的函數(shù) 
func pointerIntTest(a *int) int { 
    return *a + 10 

 
func structTest0601() { 
    a := 2 
    fmt.Println("valueIntTest:", valueIntTest(a)) 
    //函數(shù)的參數(shù)為值類型,則不能直接將指針作為參數(shù)傳遞 
    //fmt.Println("valueIntTest:", valueIntTest(&a)) 
    //compile error: cannot use &a (type *int) as type int in function argument 
 
    b := 5 
    fmt.Println("pointerIntTest:", pointerIntTest(&b)) 
    //同樣,當函數(shù)的參數(shù)為指針類型時,也不能直接將值類型作為參數(shù)傳遞 
    //fmt.Println("pointerIntTest:", pointerIntTest(b)) 
    //compile error:cannot use b (type int) as type *int in function argument 

 
//2.方法 
type PersonD struct { 
    id   int 
    name string 

 
//接收者為值類型 
func (p PersonD) valueShowName() { 
    fmt.Println(p.name) 

 
//接收者為指針類型 
func (p *PersonD) pointShowName() { 
    fmt.Println(p.name) 

 
func structTest0602() { 
    //值類型調(diào)用方法 
    personValue := PersonD{101, "Will Smith"} 
    personValue.valueShowName() 
    personValue.pointShowName() 
 
    //指針類型調(diào)用方法 
    personPointer := &PersonD{102, "Paul Tony"} 
    personPointer.valueShowName() 
    personPointer.pointShowName() 
 
    //與普通函數(shù)不同,接收者為指針類型和值類型的方法,指針類型和值類型的變量均可相互調(diào)用 
}

希望本文所述對大家的Go語言程序設(shè)計有所幫助。

相關(guān)文章

  • 一文詳解Golang中consul的基本使用

    一文詳解Golang中consul的基本使用

    consul是一個開源服務(wù)注冊和服務(wù)發(fā)現(xiàn)的中心,可以用于微服務(wù)的注冊和服務(wù)之間的調(diào)用的發(fā)現(xiàn),幫助上游服務(wù)找到下游服務(wù)的具體ip:port或者是domain,也可以使用dns的方式讓consul幫你去做轉(zhuǎn)發(fā)。本文就來講講它的具體使用吧
    2023-03-03
  • GO中公平鎖和非公平鎖的具體使用

    GO中公平鎖和非公平鎖的具體使用

    公平鎖和非公平鎖是計算機科學中的兩種鎖機制,它們主要用于多線程編程,以控制對共享資源的訪問,本文主要介紹了GO中公平鎖和非公平鎖的具體使用,感興趣的可以了解一下
    2024-08-08
  • GoLang中Strconv庫有哪些常用方法

    GoLang中Strconv庫有哪些常用方法

    這篇文章主要介紹了GoLang中Strconv庫有哪些常用方法,strconv庫實現(xiàn)了基本數(shù)據(jù)類型與其字符串表示的轉(zhuǎn)換,主要有以下常用函數(shù):?Atoi()、Itia()、parse系列、format系列、append系列
    2023-01-01
  • 使用Go實現(xiàn)郵箱驗證碼API功能

    使用Go實現(xiàn)郵箱驗證碼API功能

    本文將帶你了解一個項目如何實現(xiàn)一個郵箱驗證接口,即一個可用的發(fā)送郵箱驗證碼API和驗證驗證碼是否正確功能,對Go實現(xiàn)郵箱驗證碼API詳細過程感興趣的朋友一起看看吧
    2024-06-06
  • 在go文件服務(wù)器加入http.StripPrefix的用途介紹

    在go文件服務(wù)器加入http.StripPrefix的用途介紹

    這篇文章主要介紹了在go文件服務(wù)器加入http.StripPrefix的用途介紹,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 深入理解go sync.Once的具體使用

    深入理解go sync.Once的具體使用

    在很多情況下,我們可能需要控制某一段代碼只執(zhí)行一次,go 為我們提供了?sync.Once?對象,它保證了某個動作只被執(zhí)行一次,本文主要介紹了深入理解go sync.Once的具體使用,感興趣的可以了解一下
    2024-01-01
  • go并發(fā)利器sync.Once使用示例詳解

    go并發(fā)利器sync.Once使用示例詳解

    這篇文章主要為大家介紹了go并發(fā)利器sync.Once使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • Go語言命令行操作命令詳細介紹

    Go語言命令行操作命令詳細介紹

    這篇文章主要介紹了Go語言命令行操作命令詳細介紹,本文重點介紹了go build、go clean、go fmt、go get等命令,需要的朋友可以參考下
    2014-10-10
  • 深入理解Go工作池

    深入理解Go工作池

    本文主要介紹了深入理解Go工作池,通過緩存通道控制goroutine數(shù)量,避免資源浪費,具有一定的參考價值,感興趣的可以了解一下
    2025-05-05
  • golang常用庫之配置文件解析庫-viper使用詳解

    golang常用庫之配置文件解析庫-viper使用詳解

    viper 配置管理解析庫,是由大神 Steve Francia 開發(fā),他在google領(lǐng)導(dǎo)著 golang 的產(chǎn)品開發(fā),他也是 gohugo.io 的創(chuàng)始人之一,命令行解析庫 cobra 開發(fā)者,這篇文章主要介紹了golang常用庫之配置文件解析庫-viper使用詳解,需要的朋友可以參考下
    2020-10-10

最新評論