Go 從入門到精通(三)字串,時間,流程式控制制,函數__Go

來源:互聯網
上載者:User
一、strings和strconv的使用

strings

strings.HasPrefix(s string,preffix string) bool:
判斷字串s是否以prefix開頭

stirngs.HasSuffix(s string,suffix string) bool:
判斷字串s是否以suffix結尾

strings.Index(s string,str string) int:
判斷str在s中首次出現的位置,如果沒有出現,則返回-1

strings.LastIndex(s string,str string) int:
判斷str在s中最後出現的位置,如果沒有出現,則返回-1

strings.Replace(str string,old string,new string,n int):
字串替換

strings.Count(str string,count int)string:
字串計數

strings.Repeat(str string,count int) string:
重複count次str

strings.ToLower(str string)
轉換為小寫

strings.ToUpper(str string)string:
轉換為大寫

strings.TrimSpace(str string):
去掉字串首位空白字元

strings.Trim(str string,cut string):
去掉字串首尾cut字元

strings.TrimLeft(str string,cut string):
去掉字串首部cut字元

strings.TrimRight(str string,cunt string):
去掉字串尾部cut字元

strings.Field(str string):
返回str空格分隔的所有子串的slice

string.Split(str string,split string):
返回str split分割的所有子串的slice

strings.Join(s1 []string,sep string):
用sep把s1中的所有元素串連起來

strconv

scronv.Itoa(i int):把一個整數轉換成字串

scronv.Atio(str string)(int,errror):
把一個字串轉換成整數 二、Go中時間和日期類型

目前時間:now:= time.Now()

time.Now().Day()

time.Now().Minute()

time.Now().Month()

time.Now().Year()

time.Duration用來表示納秒

一些常用的時間常量

const (
Nanosecond Duration = 1
Microsecond =1000 * Nanosecond
Millisecond =1000 * Microsecond
Second =1000 * Millisecond
Minute =60 * Second
Hour =60 * Minute
)

格式化

package mainimport "fmt"func main() {    var a int = 10    //通過&a列印a的指標地址    fmt.Println(&a)    //定義一個指標類型的變數p    var p *int    //講a的指標地址複製給p    p = &a    fmt.Println(*p)    //給指標p賦值    *p = 100    fmt.Println(a)}
三、指標類型

普通的類型,變數存的就是值,也叫實值型別
擷取變數的地址,用&,
指標類型,變數存的是一個地址,這個地址存的才是真正的值
擷取指標類型所指向的值,用*,例如:var *p int, 使用 *p擷取p指向值

通過下面的代碼例子理解:

package mainimport "fmt"func main() {    var a int = 10    fmt.Println(&a)    var p *int    p = &a    fmt.Println(*p)    *p = 100    fmt.Println(a)}
四、流程式控制制

if else 分支判斷

常見格式類型如下:
if 條件{
}

if 條件{
}else{
}

if 條件{
}else if 條件{
}else{
}

switch case

文法格式:

switch var {    case var1:    case var2:    case var3:    default:}

如果滿足了var1 想要穿透下一個需要添加fallthrough

例子如下:

package mainimport "fmt"func main() {    var a int = 0    switch a {    case 0:        fmt.Println("a 等於0")        fallthrough    case 1:        fmt.Println("a等於1")    default:        fmt.Println("a等於預設值")    }}

如果我們沒有添加fallthrough只會列印a等於0,但是現在回把case1中的列印內容也列印出來

同樣這裡我們需要知道case 後面是可以寫條件的

for語句

文法
for 初始設定變數;條件判斷;變數修改{
}

一個簡單的例子

for i:=0;i<100;i++{    fmt.Println(i)}

for迴圈的其他幾種常見寫法

for 條件 {
}

死迴圈的寫法
for {
}

for range語句

通過一個例子理解:

str := "hello 世界"for i,v := range str{    fmt.Printf("index[%d] val[%c] len[%d]\n",i,v,len([]byte(string(v))))}

這裡需要注意的一個問題是,range str返回的是兩個值,一個是字串的下標,一個是字串中單個的字元

goto 和label語句

package mainimport "fmt"func main() {    LABEL1:for i:=0;i<5;i++{        for j:=0;j<5;j++{            if j == 4{                continue LABEL1            }            fmt.Printf("i is :%d and j is:%d\n",i,j)        }    }}

代碼中我們在continue 後面添加了一個LABEL1這樣當迴圈匹配到j等於4的時候,就會跳出迴圈,重新回到最外成i的迴圈,而如果沒有LABEL1則就會跳出j的本次迴圈,執行j++進入到j的下次迴圈

我們接著看goto的用法,但是代碼中我們不建議使用goto

package mainimport "fmt"func main() {    i :=0    HEAR:    fmt.Println(i)    i++    if i == 5{        return    }    goto HEAR}

break 和continue
一句話解釋:break是終止整個迴圈,continue是終止此次迴圈 五、函數詳解

聲明文法

func 函數名 (參數列表) [(返回列表)]{
}

一些常見的寫法例子

func add(){

}

func add(a int,b int){
}

func add(a int,b int) int {

}

func add(a int,b int) (int,int) {

}

func add(a,b int)(int,int){

}

go函數的特點 不支援重載,一個包不能包含連個名字一樣的函數 函數是一等公民,函數也是一種類型,一個函數可以賦值給變數 匿名函數 多傳回值

其他幾個概念可能都好理解,我們這裡主要說說第二條,函數也是一種類型,一個函數可以賦值給變數

通過下面的例子示範

package mainimport "fmt"type add_func func(int,int) intfunc add(a,b int) int {    return a+b}func operator(op add_func,a int,b int) int {    return op(a,b)}func main() {    c := add    fmt.Println(c)    sum := operator(c,100,200)    fmt.Println(sum)}

這裡通過type自訂了一個add_func類型

函數參數傳遞方式

這裡主要有兩種方式:值傳遞,引用傳遞

無論是值傳遞還是引用傳遞,傳遞給函數的都是變數的副本,不過值傳遞的是值的拷貝,引用傳遞傳遞的是地址的拷貝,一般來說,地址拷貝更為高效,而值拷貝取決於拷貝的對象的大小,對象越大,則效能越低

命名傳回值的名字

通過下面的例子理解:

func add_sum(a,b int)(c int){    c = a + b    return }

底線標識符,用來忽略傳回值

可變參數

表示0個或多個參數
fucn add(arg...int) int{
}

表示1個或多個參數
func add(a int,arg...int) int {
}
其中arg是一個slice,我們可以通過arg[index]擷取參數
通過len(arg)可以判斷參數的個數

defer用途

當函數返回時,執行defer語句,因此,可以用來做資源清理

多個defer語句,按先進後廚的方式執行

defer語句中變數,在defer聲明時就決定了

通過下面的例子理解:

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.