關于golang范型函數的總結1

為什么是 關于golang范型函數的總結1, 因為自己也不確定以后會有什么總結,所以先寫1,哈哈~

一段程序看懂 golang 的范型函數的關鍵問題,以前一直被數據類型誤導了, 要總結的都在代碼里了,直接上代碼了事


package main

/**
關于范型函數的兩個要點總結,以前一直以為 范型函數要匹配好傳入的參數數據類型,
然后要定義好返回的數據類型,其實不是這樣的, 因為傳入的參數 和 返回的參數都
是在 調用 范型程序 的代碼塊去處理的,范型函數根本不用考慮

1.  傳入的參數在 調用處 interface 化
2.  返回的數據必須是  interface 化,然后在調用處獲得之后,自己根本已經有的數據類型去做適配
 */

import (
  "fmt"
)

type UserT interface {
  GetUser()
}

type User struct {
  Id    int
  Name  string
}

func (u User)GetUser() User {
  return u
}

func PattAll(m map[interface{}]interface{}) interface{} {
  // 范型函數的另外一個要點就是 輸出的類型是  interface{}, 然后輸出的數據就留給調用這個范型函數的邏輯代碼去處理就好
  // 因為調用這個函數的邏輯代碼的代碼塊是有 原來 m 的所有適配的數據類型的, 范型函數根本不用這個數據類型有無的問題
  fmt.Println(m)
  return m
}


// 上面的邏輯可以理解為是把 User 結構體 type 化

func main() {
  u := User{Id: 99, Name: "okok"}

  // 范型函數的注意力邏輯,應該是在把要傳入的參數對象  interfaces 化,適配所有的傳入參數類型就可以了
  m := make(map[interface{}]interface{})

  var s string
  s = "hello"
  m[0] = s

  m[1] = u

  //fmt.Println(m)
  PattAll(m)
}



本文鏈接:參與評論 ?

--EOF--

提醒:本文最后更新于 112 天前,文中所描述的信息可能已發生改變,請謹慎使用。

專題「編程語言」的其它文章 ?

Comments

toto足球指数