最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang 如何實(shí)現(xiàn)函數(shù)的任意類型傳參

 更新時(shí)間:2021年04月29日 16:39:56   作者:潘廣宇 Leo  
這篇文章主要介紹了Golang 實(shí)現(xiàn)函數(shù)的任意類型傳參操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

大家還是直接看代碼吧~

package main 
import (
	"fmt"
)
 
func init() {
	fmt.Print("init")
}
 
func main() {
	test1("123")
	test1(1)
	test2("123",1, "324", 12)
}
 
// 實(shí)現(xiàn)傳單個(gè)任何類型的參數(shù)
 
func test1(v interface{}) {
	fmt.Println(v)                  // 打印 “123” 1
}
 
// 實(shí)現(xiàn)傳任意多個(gè)任意類型的參數(shù)
 
func test2(v ...interface{}) {
	for _, m := range v {
		fmt.Println(m)				// 依次打印 123 1 324 12
	}
}

補(bǔ)充:golang 函數(shù)作為參數(shù)傳遞(回調(diào))的例子

和其他很多語言一樣,golang中函數(shù)也可以作為其它函數(shù)的參數(shù)進(jìn)行傳遞,然后在其它函數(shù)內(nèi)調(diào)用執(zhí)行,一般稱之為回調(diào)。

語法:

以函數(shù)簽名作為主調(diào)函數(shù)的形參的類型,即傳遞一個(gè)指向函數(shù)的指針

func main() {
    sayhello("john", addperfix)
}
func addperfix(perfix, name string) {
    fmt.Println(perfix, "!", name)
}
func sayhello(name string, f func(string, string)) {
    f("hello", name)
}

這里寫圖片描述

補(bǔ)充:golang函數(shù)形參接收任意類型的切片

在某些情況下一個(gè)函數(shù)可能既需要接收[]string類型的切片也可能接收[]int類型的切片,或接收自定義類型的切片。

我首先想到的辦法是創(chuàng)建一個(gè)[]interface{}類型的切片

如下所示:

func demo(s []interface{}) {
 for _, ele := range s {
  fmt.Println(ele)
 }
}
func Test(t *testing.T) {
 s := []int{1, 2, 3}
 demo(s)
}

但不幸的是,我得到了

cannot use s (type []int) as type []interface {} in argument to demo 這個(gè)錯(cuò)誤。

原因是interface{}類型的變量可以指向任意類型的值,但[]interface{}類型的指針只能指向[]interface{}類型的值而不能指向任意類型的切片。

為了實(shí)現(xiàn)上述功能,我想到的辦法是利用反射中的Slice:

func demo(s interface{}) {
 sv := reflect.ValueOf(s)
 svs := sv.Slice(0, sv.Len())
 for i := 0; i < svs.Len(); i++ {
  e := svs.Index(i).Interface()
  switch e.(type) {
  case string:
   fmt.Println("string", e)
  case int:
   fmt.Println("int", e)
  }
 }
}
func Test(t *testing.T) {
 s1 := []int{1, 2, 3}
 demo(s1)
 s2 := []string{"a", "b", "c"}
 demo(s2)
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • Golang實(shí)現(xiàn)Biginteger大數(shù)計(jì)算實(shí)例詳解

    Golang實(shí)現(xiàn)Biginteger大數(shù)計(jì)算實(shí)例詳解

    這篇文章主要為大家介紹了Golang實(shí)現(xiàn)Biginteger大數(shù)計(jì)算實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • golang官方嵌入文件到可執(zhí)行程序的示例詳解

    golang官方嵌入文件到可執(zhí)行程序的示例詳解

    這篇文章主要介紹了golang官方嵌入文件到可執(zhí)行程序,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • 深入理解Golang中指針的用途與技巧

    深入理解Golang中指針的用途與技巧

    在 Go 語言中,指針是一種重要的概念,了解和正確使用指非常關(guān)鍵,因此本文小編就來和大家講講Golang 中指針的概念與用法,希望對(duì)大家有所幫助
    2023-05-05
  • 詳解如何利用GORM實(shí)現(xiàn)MySQL事務(wù)

    詳解如何利用GORM實(shí)現(xiàn)MySQL事務(wù)

    為了確保數(shù)據(jù)一致性,在項(xiàng)目中會(huì)經(jīng)常用到事務(wù)處理,對(duì)于MySQL事務(wù)相信大家應(yīng)該都不陌生。這篇文章主要總結(jié)一下在Go語言中Gorm是如何實(shí)現(xiàn)事務(wù)的;感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助
    2022-09-09
  • Go語言string,int,int64 ,float之間類型轉(zhuǎn)換方法

    Go語言string,int,int64 ,float之間類型轉(zhuǎn)換方法

    Go語言中int類型和string類型都是屬于基本數(shù)據(jù)類型,兩種類型的轉(zhuǎn)化都非常簡單。下面通過本文給大家分享Go語言string,int,int64 ,float之間類型轉(zhuǎn)換方法,感興趣的朋友一起看看吧
    2017-07-07
  • golang 占位符和fmt常見輸出介紹

    golang 占位符和fmt常見輸出介紹

    這篇文章主要介紹了golang 占位符和fmt常見輸出介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Go語言標(biāo)準(zhǔn)錯(cuò)誤error全面解析

    Go語言標(biāo)準(zhǔn)錯(cuò)誤error全面解析

    Go語言中的錯(cuò)誤處理是通過內(nèi)置的error接口來實(shí)現(xiàn)的,其中errorString和wrapError是兩種常見的錯(cuò)誤類型實(shí)現(xiàn)方式,errorString通過errors.New()方法實(shí)現(xiàn),而wrapError則通過fmt.Errorf()方法實(shí)現(xiàn),支持錯(cuò)誤的嵌套和解析
    2024-10-10
  • 為什么不建議在go項(xiàng)目中使用init()

    為什么不建議在go項(xiàng)目中使用init()

    這篇文章主要介紹了為什么不建議在go項(xiàng)目中使用init(),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • 最新評(píng)論

    栖霞市| 咸阳市| 盘锦市| 灵川县| 房产| 师宗县| 新密市| 兰州市| 扬中市| 荥经县| 康乐县| 安平县| 乾安县| 义马市| 西昌市| 青海省| 西藏| 根河市| 瑞安市| 连城县| 石泉县| 类乌齐县| 广德县| 政和县| 临安市| 大邑县| 新田县| 陆河县| 庆云县| 闵行区| 通化县| 麦盖提县| 龙胜| 贵阳市| 浦江县| 白山市| 射洪县| 霍州市| 石嘴山市| 罗平县| 河北区|