Menu
快讀
  • 旅遊
  • 生活
    • 美食
    • 寵物
    • 養生
    • 親子
  • 娛樂
    • 動漫
  • 時尚
  • 社會
  • 探索
  • 故事
  • 科技
  • 軍事
  • 国际
快讀

golang 語法糖 …

2020 年 1 月 11 日 路边村夫

go 語言是google 開發的一種靜態強類型、編譯型、並發型,並具有垃圾回收功能的編程語言。2009年11月正式宣布推出,在2016年,Go被軟件評價公司TIOBE 選爲TIOBE 2016 年最佳語言

go語言簡潔的語法和內存安全以及並發計算深受互聯網公司的青睐。下面就介紹其中的一個簡潔的語法糖 …

… 作爲go語言的語法糖,主要有下面兩種用法

  • 作爲函數的可變參數,表示可以接受任意個數但是相同類型的參數
package main

import (
    "fmt"
    "reflect"
)

func print(who ...string) {
    fmt.Println("type is :", reflect.TypeOf(who))

    for _, v := range who {
        fmt.Printf("%v\t", v)
    }
    fmt.Println("")
}

func main() {
    users := []string{"zhangsan", "lisi", "wangwu", "zhaoliu"}

    print("A", "B", "C") //1
    print(users...) //2
    print() //3
}

運行上面代碼打印如下:

type is : []string
zhangsan        lisi    wangwu  zhaoliu
type is : []string
A       B       C
type is : []string

由上面一段代碼可以看出,print函數的參數定義爲…string 類型 第一次調用的時候傳入的是三個字符常量,打印出的who 類型爲[]string。

也就是…T 類型等價于[]T 類型

在官方文檔上有這麽一段描述

If f is variadic with a final parameter p of type ...T, then within f the type of p is equivalent to type []T. If f is invoked with no actual arguments for p, the value passed to p is nil. Otherwise, the value passed is a new slice of type []T with a new underlying array whose successive elements are the actual arguments, which all must be assignable to T. The length and capacity of the slice is therefore the number of arguments bound to p and may differ for each call site. 

當print 不傳遞參數時,who的值爲nil,類型還是[]string, 如第3處調用

如上代碼第2處print調用就是將切片打散,然後作爲不定參數傳入…sting,也就是下面的第二個用處

  • 將切片打散

我們常用的append函數定義就是采用了 …

append(s S, x …T) S // T is the element type of S

src := []int{1, 2, 3}
dst := []int{0}
dst = append(dst, src...)

如上代碼,將切片src的元素打散傳入dst 中。

相關文章:

  • 可愛義工帶老人們去濱海灣花園,搞笑春遊記
  • 高空俯瞰無敵海景房?新加坡濱海灣十一大酒店全方面指南
  • 什麽,你只知道金沙的無邊泳池?這才是新加坡最贊的十間酒店泳池!
  • Chinatown在新加坡有個怪名叫牛車水 — 盤點新加坡牛車水十大酒店
  • 烏節路 — 新加坡最繁華購物區周邊的十大酒店
  • 想要吹著海風喝著小酒陪著女神長長久久? 克拉碼頭新加坡河畔這十大酒店推薦給你
科技

發佈留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

©2025 快讀 | 服務協議 | DMCA | 聯繫我們