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

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

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

大家還是直接看代碼吧~

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

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

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

語法:

以函數(shù)簽名作為主調(diào)函數(shù)的形參的類型,即傳遞一個指向函數(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)
}

這里寫圖片描述

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

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

我首先想到的辦法是創(chuàng)建一個[]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 這個錯誤。

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

為了實現(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)
}

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

相關(guān)文章

  • 用GO實現(xiàn)IP門禁優(yōu)化網(wǎng)絡(luò)流量管理

    用GO實現(xiàn)IP門禁優(yōu)化網(wǎng)絡(luò)流量管理

    這篇文章主要為大家介紹了用GO實現(xiàn)IP門禁優(yōu)化網(wǎng)絡(luò)流量管理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • 一文詳解Golang中的errors包

    一文詳解Golang中的errors包

    在 Golang 中,errors 包是用于處理錯誤的標準庫, errors 包提供的功能比較簡單,使用起來非常方便,接下來就具體講解一下 errors 包提供的幾個函數(shù),感興趣的小伙伴跟著小編一起來看看吧
    2023-07-07
  • Golang 1.18新特性模糊測試用法詳解

    Golang 1.18新特性模糊測試用法詳解

    模糊測試是一種軟件測試技術(shù)。其核心思想是將自動或半自動生成的隨機數(shù)據(jù)輸入到一個程序中,并監(jiān)視程序異常,如崩潰,斷言失敗,以發(fā)現(xiàn)可能的程序錯誤,比如內(nèi)存泄漏,本文給大家介紹了Golang 1.18 新特性模糊測試,感興趣的同學(xué)可以參考閱讀下
    2023-05-05
  • go json轉(zhuǎn)換實踐中遇到的坑

    go json轉(zhuǎn)換實踐中遇到的坑

    在使用 go 語言開發(fā)過程中,經(jīng)常需要使用到 json 包來進行 json 和 struct 的互相轉(zhuǎn)換,這篇文章主要介紹了go json轉(zhuǎn)換實踐中遇到的坑,非常具有實用價值,需要的朋友可以參考下
    2018-12-12
  • golang 在windows中設(shè)置環(huán)境變量的操作

    golang 在windows中設(shè)置環(huán)境變量的操作

    這篇文章主要介紹了golang 在windows中設(shè)置環(huán)境變量的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Go實現(xiàn)整合Logrus實現(xiàn)日志打印

    Go實現(xiàn)整合Logrus實現(xiàn)日志打印

    這篇文章主要介紹了Go實現(xiàn)整合Logrus實現(xiàn)日志打印,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-07-07
  • Golang利用casbin實現(xiàn)權(quán)限驗證詳解

    Golang利用casbin實現(xiàn)權(quán)限驗證詳解

    Casbin是一個強大的、高效的開源訪問控制框架,其權(quán)限管理機制支持多種訪問控制模型,Casbin只負責訪問控制。本文將利用casbin實現(xiàn)權(quán)限驗證功能,需要的可以參考一下
    2023-02-02
  • Go?gRPC服務(wù)進階middleware使用教程

    Go?gRPC服務(wù)進階middleware使用教程

    這篇文章主要為大家介紹了Go?gRPC服務(wù)進階middleware的使用教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • Go中的交叉編譯問題

    Go中的交叉編譯問題

    這篇文章主要介紹了Go中的交叉編譯問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Golang分布式應(yīng)用之Redis示例詳解

    Golang分布式應(yīng)用之Redis示例詳解

    這篇文章主要為大家介紹了Golang分布式應(yīng)用之Redis示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07

最新評論