Golang一些有趣的特性

來源:互聯網
上載者:User

1、變數定義的幾種方式 如:

    //方式一:普通定義    var a int = 1    fmt.Println("a = ", a)    //方式二:類型推導    var b = 10    fmt.Println("b = ", b)    //方式三:省略var    name := "tom"    fmt.Println("name = ", name)    //多變數聲明    var n1, n2, n3 int    fmt.Println("n1 = ",n1 ,"n2 = ", n2,"n3 = ",n3)    var n4, name1, n5 = 100, "tom", 888    fmt.Println("n4 = ",n4 ,"name1 = ", name1,"n5 = ",n5)    n6, name2, n7 := 100, "tom", 888    fmt.Println("n6 = ",n6 ,"name2 = ", name2,"n7 = ",n7)

2、go語言定義的變數或引入的包沒有使用的話不能編譯通過,可以使用忽略保留定義和包引入 如:

  package main  import (    "fmt"    _ "bytes" //忽略bytes包    )  func main () {    var num1 int = 10    _ = num1  //忽略變數    fmt.Println("hello world")  }

3、自動整理格式化代碼指令

//自動整理格式化輸出linux~# gofmt hello.go package mainimport "fmt"func main() {    fmt.Println("hello world")}//將整理格式化後的類容儲存檔案linux~# gofmt -w hello.go

4、大括弧不能換行

//正確的func main () {    fmt.Println("hello world")}//錯誤的func main (){    fmt.Println("hello world")}

5、變數多值的返回與接收

package mainimport (    "fmt"    )func main () {        var num1 int = 10    var num2 int = 1        //接收兩個值    sum , sub := getSumAndSub(num1, num2)    fmt.Println("sum =",sum, "sub =", sub)        //只接收一個值    sum0 , _ := getSumAndSub(num1, num2)    fmt.Println("sum =",sum0)}func getSumAndSub(num1 int, num2 int) (int, int) {    sum := num1 + num2    sub := num1 - num2    return sum, sub}

6、go沒有字元類型(char),一般用byte類型來表示,並且go中的編碼是統一使用utf8,每個字元都會有一個固定的碼值

    //go沒有字元類型    var c1 byte = 'a'    var c2 byte = '1'    //輸出的都是碼值    fmt.Println("c1", c1, "c2", c2)    //輸出對應的字元    fmt.Printf("c1=%c c2=%c", c1, c2)    //漢字    var c3 byte = '被'//溢出    fmt.Printf("c3=%c c3碼值=%d", c3, c3)    var c4 int = '被'    fmt.Printf("c4=%c c4碼值=%d", c4, c4)    //輸出碼值對應的字元    var c5 int = 22269    fmt.Printf("c5=%c", c5)

7、字串(string)一旦賦值就不能通過下標來修改

    var str2 = "hello"    //str2[0] = 'a'  //報錯

8、以字串原生方式輸出

    var str string = `每個生命的方式是自然界一種力的方式。有些人的生命像沉靜的湖,有些像白雲飄蕩的一望無際的天空,有些像豐腴富饒的平原,有些像斷斷續續的山峰。我覺得約翰·克利斯朵夫的生命像一條河。            ——羅曼.羅蘭《約翰·克利斯朵夫》`    fmt.Println(str)

9、字串+號拼接

    //加號放在上一行末尾    str4 := "hello" +        "world"    fmt.Println("str4 = ", str4)

10、與Java、c相比go的不同類型資料之間轉換需要強制轉換(顯示轉換)

    var i int32 = 10    var f1 float32 = float32(i)    fmt.Println("f1 = ", f1)        var n1 int32 = 1    var n2 int8    var n3 int8    n2 = int8(n1) + 127 //編譯能過,但結果溢出    //n3 = int(n1) + 128 //n3是int8 報錯    fmt.Println("n1 =", n1, "n2 =", n2," n3 =",n3)

11、string類型與其他基本類型之間的互相轉換

其他基礎資料型別 (Elementary Data Type)轉string

    //第一種方式 fmt.Sprintf    str = fmt.Sprintf("%d", num1)    fmt.Printf("str type %T str=%v\n", str, str)    str = fmt.Sprintf("%f", num2)    fmt.Printf("str type %T str=%v\n", str, str)    str = fmt.Sprintf("%t", b)    fmt.Printf("str type %T str=%v\n", str, str)    str = fmt.Sprintf("%c", ch)    fmt.Printf("str type %T str=%v\n", str, str)    //第二種方式 strconv    str = strconv.FormatInt(int64(num1), 10)    fmt.Printf("str type %T str=%v\n", str, str)

string類型轉其他基礎資料型別 (Elementary Data Type)

    var str1 string = "true"    var b bool    b, _ = strconv.ParseBool(str1)    fmt.Printf("b type %T b=%v\n", b, b)    var str2 string = "123456"    var n1 int64    n1, _ = strconv.ParseInt(str2, 10, 64)    fmt.Printf("n1 type %T n1=%v\n", n1, n1)    var str3 string = "123dd456"    var n2 int64    n2, _ = strconv.ParseInt(str3, 10, 64)    fmt.Printf("n1 type %T n1=%v\n", n2, n2)    var str4 string = "123"    var n3 int64    n3, _ = strconv.ParseInt(str4, 10, 64)    n5 := int(n3)    fmt.Printf("n3 type %T n1=%v\n", n3, n3)    fmt.Printf("n5 type %T n1=%v\n", n5, n5)    var str5 string = "123.456"    var n4 float64    n4, _ = strconv.ParseFloat(str5, 64)    fmt.Printf("n1 type %T n1=%v\n", n4, n4)

12、包內變數名和函數名以及常量名,首字母大寫為公開方法(相當於其他語言的public)其他包可使用,首字母小寫為私人方法(相當於其他語言的private)其他包不能使用

var HeroName string = "張飛" //公用 publicvar ambitiousName string = "曹操" //私人 private

13、只有i++和i--,並且只能單獨使用不能賦值

    //++  -- 只能獨立使用    var i = 8    i++    fmt.Println("i =",i)    i--    fmt.Println("i =",i)        //錯誤使用    ++i //錯誤    --i //錯誤    var j int;    j = i++ //錯誤    if i++ > 10 {  //錯誤        return    }
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.