iT邦幫忙

2023 iThome 鐵人賽

DAY 14
0
Cloud Native

【하나, 둘, ready, get set, go】系列 第 14

【하나, 둘, ready, get set, go】Day 14 - generic

  • 分享至 

  • xImage
  •  

前情提要

當程式寫到一定程度的時後,有時就會寫出重複性很高的 Code

這時候就是一個可以好好利用泛型來優化的時候了~

今天就來介紹 Go 要如何寫泛型吧~

實際操作

語法

function

func function_名稱[泛型變數名稱 泛型約束](傳入參數名稱 型別) 回傳值
Example
func PrintType[T any]()

func Compare[T comparable](lhs T, rhs T) T

型別

type struct_名稱[泛型變數名稱 泛型約束] struct {}
Example
type GeneralResponse[T any] struct {
    Data T
}

function 泛型

package main

import "fmt"

func main() {
    PrintType(1)
    PrintType("hello")
    PrintType(1.1)
}

func PrintType[T any](t T) {
    fmt.Printf("type:%T,value:%v\n", t, t)
}

/* 輸出結果
type:int,value:1 // Line 6 輸出
type:string,value:hello // Line 7 輸出
type:float64,value:1.1 // Line 8 輸出
*/

型別泛型

package main

import "fmt"

func main() {
    album := []Album{
        {Id: 1, Name: "album1", Artist: "artist1"},
    	{Id: 2, Name: "album2", Artist: "artist2"},
    	{Id: 3, Name: "album3", Artist: "artist3"},
    }
    rep := GeneralResponse[[]Album]{
    	Status:  200,
    	Data:    album,
    	Message: "success",
    }
    fmt.Println(rep)
}

type GeneralResponse[T any] struct {
    Status  int
    Data    T
    Message string
}

type Album struct {
    Id     int
    Name   string
    Artist string
}

總結

今天簡單介紹了 Go 的 generic 用法

泛型的概念也是在先前寫 Swift 寫到後面才開始體會到的

泛型的美好,值得你擁有 -> 好像一句 Slogan 哈哈哈

明天開始就要進入 Go 的 Concurrency (並發) 世界了~

明天見~


上一篇
【하나, 둘, ready, get set, go】Day 13 - interface
下一篇
【하나, 둘, ready, get set, go】Day 15 - goroutines
系列文
【하나, 둘, ready, get set, go】30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言