[Go] gocron源碼閱讀-go語言中的切片介面和類型綜合

来源:https://www.cnblogs.com/taoshihan/archive/2019/11/14/11863563.html
-Advertisement-
Play Games

上面那些代碼非常不容易理解,我們需要把它拆分來看當我們直接實例化一個類的時候,如果大括弧豎著排,那麼裡面的成員賦值後要加個逗號 定義一個介面,介面裡面有一個成員方法 定義另一個類型,這個類型剛好就有這個方法,那麼就可以認為這個類型實現了介面 這個時候如果定義Flag類型的變數,那麼StringFla ...


// getCommands
func getCommands() []cli.Command {
    command := cli.Command{
        Name:   "web",
        Usage:  "run web server",
        Action: runWeb,
        Flags: []cli.Flag{
            cli.StringFlag{
                Name:  "host",
                Value: "0.0.0.0",
                Usage: "bind host",
            },
            cli.IntFlag{
                Name:  "port,p",
                Value: DefaultPort,
                Usage: "bind port",
            },
            cli.StringFlag{
                Name:  "env,e",
                Value: "prod",
                Usage: "runtime environment, dev|test|prod",
            },
        },
    }

    return []cli.Command{command}
}

上面那些代碼非常不容易理解,我們需要把它拆分來看
當我們直接實例化一個類的時候,如果大括弧豎著排,那麼裡面的成員賦值後要加個逗號

    b := Taoshihan{
        Name: "taoshihan",
    }
    fmt.Println(b.Name)

 

定義一個介面,介面裡面有一個成員方法

type Flag interface {
    GetName() string
}

 

定義另一個類型,這個類型剛好就有這個方法,那麼就可以認為這個類型實現了介面

type StringFlag struct {
}
func (t StringFlag) GetName() string {
    return "taoshihan"
}

這個時候如果定義Flag類型的變數,那麼StringFlag也能被賦值過去

var a Flag
a = StringFlag{}
a.GetName()

 

再回到原代碼中的邏輯,如果使用下麵這種方式就非常容易理解了

var myflag []Flag
myflag = append(myflag, StringFlag{}, StringFlag{})

command := Command{
    Flags: myflag,
}

完整源碼:

package main

import "fmt"

type Flag interface {
    GetName() string
}

type Command struct {
    Flags []Flag
}
type StringFlag struct {
}

func (t StringFlag) GetName() string {
    return "taoshihan"
}

type Taoshihan struct {
    Name string
}

func main() {
    // var a Flag
    // a = StringFlag{}
    // a.GetName()
    // b := Taoshihan{
    //     Name: "taoshihan",
    // }
    // fmt.Println(b.Name)

    var myflag []Flag
    myflag = append(myflag, StringFlag{}, StringFlag{})

    command := Command{
        Flags: myflag,
    }
    for _, p := range command.Flags {
        fmt.Println(p.GetName())
    }
}

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ### 什麼是過濾器,語法是什麼: 1.有時候我們想要在模板中對一些變數進行處理,那麼就需要類似python中的函數一樣,可以將這個值傳到函數中,然後做一些操作。在模板中,過濾器相當於是一個函數,把當前的過濾器傳到變數中,然後過濾器根據自己的功能,再返回相應的值,之後再將結果渲染到頁面中。 2.基本 ...
  • ### url_for筆記: 模板中的“url_for”跟我們視圖函數中的“url_for”使用起來基本是一摸一樣的。也是傳遞視圖函數的名字,也是傳遞參數,使用的時候,用{{}}闊起來: 例如:{{ url_for('fun') }} app.py: from flask import Flask, ...
  • app.py: from flask import Flask, render_template app = Flask(__name__) @app.route('/') def hello_world(): context = { 'user': 'nvshen', 'age': 19, 'co ...
  • ### 模板預熱筆記: 1.在渲染模板的時候,預設會從項目根目錄下的“templetes”目錄下查找模板。 2.如果不想把模板文件放在“templetes”目錄下,那麼可以在flask初始化的時候指定"templete_folder"來指定模板的路徑。 代碼示例: from flask import ...
  • ### 視圖函數中可以返回哪些值: 1.可以返回字元串:返回的字元串其實底層將這個字元串包裝成了一個“Response”對象。 2.可以返回元組:元組的形式是(響應體,狀態碼,頭部信息),也不一定三個都要寫,寫兩個也是可以的,返回的元組,其實在底層也是包裝成了一個“Response”對象。 3.可以 ...
  • 向指定文件寫入數據,如果文件不存在,則創建文件,寫入數據之前清空文件 ...
  • 一.什麼是分散式配置中心? 就是為微服務架構中的微服務提供集中化的外部配置支持,配置中心為各個微服務應用的所有環境提供了中心化的外部配置(可能比較難理解,想知道是什麼意思就要知道為什麼這麼配置:這麼配置就是為瞭解決微服務中很多個provider中的application.properties配置管理 ...
  • Selenium是一個自動化測試工具,利用它我們可以驅動瀏覽器執行特定的動作,如點擊、下拉等操作。 本文將從環境部署到項目開發一步步講解,包括這個過程所可能遇到的一些問題,都會一一解答,有不會的問題可以在下方評論留言一起思考解決。 一.環境部署 環境部署包括mac和linux 1.安裝Seleniu ...
一周排行
    -Advertisement-
    Play Games
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...