tft每日頭條

 > 圖文

 > c與ch的使用區别

c與ch的使用區别

圖文 更新时间:2025-01-12 13:36:24

c與ch的使用區别?1.1、源碼文件以_Test結尾:***_test.go;,我來為大家科普一下關于c與ch的使用區别?下面希望有你要的答案,我們一起來看看吧!

c與ch的使用區别(ch5變量常量以及與其它語言的差異)1

c與ch的使用區别

1、編寫測試程序

1.1、源碼文件以_Test結尾:***_test.go;

1.2、測試方法名以Test開頭:func Testxxx(t *testing.T) {…},首字母大寫代表包外可以訪問

  • t.Log() 可以直接打印出結果
  • cmd運行命令:go test -v ***_test.go (不加 -v 會沒有對應的測試結果)。
2、變量聲明、初始化

// 标準格式 var 變量名稱 數據類型 = 值; // 自動推到類型格式 var 變量名稱 = 值; // 簡短格式(golang官方推薦格式) 變量名稱 := 值;

2.1 、聲明方法

// 變量聲明、初始化方法一 var a int = 1 var b int = 1 // 變量聲明、初始化方法二 var ( a int = 1 b = 1 ) // 變量聲明、初始化方法三,推薦使用該方法 a := 1 // := 表示自動推斷變量類型 b := 1 // 變量聲明、初始化方法四 var a int // 先聲明後使用,一般是全局變量使用 var b int a = 1 b = 1

2.2、與其他編程語言的差異:

賦值可以進行自動類型推斷;

在一個賦值語句中可以對多個變量進行賦值。

2.3、使用簡短格式:=賦值的注意點

  • 簡短模式的含義是定義的同時初始化

package main import "fmt" func main() { num := 10 num := 20 // 編譯報錯, 重複定義 fmt.Println("num = ", num) }

  • 一定不要把:=當做賦值運算符來使用

package main import "fmt" var num = 10 // 定義一個全局變量 func main() { num := 20 // 定義一個局部變量 fmt.Println("num = ", num) test() } func test() { fmt.Println("num = ", num) // 還是輸出10 }

  • :=隻能用于定義局部變量,不能用于定義全局變量

package main import "fmt" num := 10 // 編譯報錯 func main() { fmt.Println("num = ", num) }

  • 使用:=定義變量時,不能指定var關鍵字和數據類型

package main import "fmt" func main() { //var num int := 10 // 編譯報錯 //var num := 10 // 編譯報錯 num int := 10 // 編譯報錯 fmt.Println("num = ", num) fmt.Println("num = ", num) }

  • 變量組中不能夠使用:=

package main import "fmt" func main() { var( num := 10 // 編譯報錯 ) fmt.Println("num = ", num) }

  • 通過:=同時定義多個變量, 必須給所有變量初始化

package main import "fmt" func main() { //num1, num2 := 666, 888 // 正确 num1, num2 := 666 // 報錯 fmt.Printf("%d, %d\n", num1, num2) }

  • 通過:=同時定義多個變量, 隻要任意一個變量沒有定義過,都會做退化賦值操作

發生退化賦值:

package main import "fmt" func main() { // 定義一個變量num1 num1 := 10 // 同時定義兩個變量num1和num2, 由于num2從來沒有定義過, // 所以對于num1來說:=退化為賦值運算符, 而對于num2來說:=仍然是定義 賦值 num1, num2 := 20, 30 fmt.Println("num1 = ", num1) fmt.Println("num2 = ", num2) }

不會發生退化的賦值:

package main import "fmt" func main() { num1 := 10 num2 := 20 // 報錯, 因為num1,和num2都已經被定義過 // 至少要有任意一個變量沒有被定義過,才會退化賦值 num1, num2 := 30, 40 fmt.Println("num1 = ", num1) fmt.Println("num2 = ", num2) }

  • 定義的局部變量或者導入的包沒有被使用, 那麼編譯器會報錯,無法編譯運行,但是定義的全局變量沒有被使用,編譯器不會報錯, 可以編譯運行
3、go語言交換兩個變量的值

func TestExchange(t *testing.T) { a := 1 b := 2 a, b = b, a // 和python保持了一緻 t.Log(a, b) }

4、常量定義

4.1、使用const聲明(與C語言一緻)

const 常量名稱 數據類型 = 值or const 常量名稱 = 值

4.2、與其他語言的差别在于簡化了連續的賦值

在常量組中, 如果上一行常量有初始值,但是下一行沒有初始值, 那麼下一行的值就是上一行的值

package main import "fmt" func main() { const ( num1 = 998 num2 // 和上一行的值一樣 num3 = 666 num4 // 和上一行的值一樣 num5 // 和上一行的值一樣 ) fmt.Println("num1 = ", num1) // 998 fmt.Println("num2 = ", num2) // 998 fmt.Println("num3 = ", num3) // 666 fmt.Println("num4 = ", num4) // 666 fmt.Println("num5 = ", num5) // 666 const ( num1, num2 = 100, 200 num3, num4 // 和上一行的值一樣, 注意變量個數必須也和上一行一樣 ) fmt.Println("num1 = ", num1) fmt.Println("num2 = ", num2) fmt.Println("num3 = ", num3) fmt.Println("num4 = ", num4) }

4.3、枚舉常量

Go語言中沒有C語言中明确意義上的enum定義, 但是可以借助iota标識符來實現枚舉類型,Go語言實現枚舉格式

const( 枚舉元素1 = iota 枚舉元素2 = iota ... ... )

    • 利用iota标識符實現從0開始遞增的枚舉

package main import "fmt" func main() { const ( male = iota female = iota yao = iota ) fmt.Println("male = ", male) // 0 fmt.Println("male = ", female) // 1 fmt.Println("male = ", yao) // 2 }

iota注意點:

      • 在同一個常量組中,iota從0開始遞增, 每一行遞增1
      • 在同一個常量組中,隻要上一行出現了iota,那麼後續行就會自動遞增

package main import "fmt" func main() { const ( male = iota // 這裡出現了iota female // 這裡會自動遞增 yao ) fmt.Println("male = ", male) // 0 fmt.Println("male = ", female) // 1 fmt.Println("male = ", yao) // 2 }

      • 在同一個常量組中,如果iota被中斷, 那麼必須顯示恢複

package main import "fmt" func main() { const ( male = iota female = 666 // 這裡被中斷, 如果沒有顯示恢複, 那麼下面沒有賦值的常量都和上一行一樣 yao ) fmt.Println("male = ", male) // 0 fmt.Println("male = ", female) // 666 fmt.Println("male = ", yao) // 666 }

package main import "fmt" func main() { const ( male = iota female = 666 // 這裡被中斷 yao = iota // 這裡顯示恢複, 會從當前常量組第一次出現iota的地方開始,每一行遞增1, 當前是第3行,所以值就是2 ) fmt.Println("male = ", male) // 0 fmt.Println("male = ", female) // 666 fmt.Println("male = ", yao) // 2 }

      • iota也支持常量組 多重賦值, 在同一行的iota值相同

package main import "fmt" func main() { const ( a, b = iota, iota c, d = iota, iota ) fmt.Println("a = ", a) // 0 fmt.Println("b = ", b) // 0 fmt.Println("c = ", c) // 1 fmt.Println("d = ", d) // 1 }

      • iota自增默認數據類型為int類型, 也可以顯示指定類型

package main import "fmt" func main() { const ( male float32 = iota // 顯示指定類型,後續自增都會按照指定類型自增 female yao ) fmt.Printf("%f\n", male) // 0.0 fmt.Printf("%f\n", female) // 1.0 fmt.Printf("%f\n", yao) // 2.0 fmt.Println("male = ", reflect.TypeOf(female)) // float32 }

5、标識符
  • Go語言中_單獨作為标識符出現時, 代表空标識符, 它對應的值會被忽略;
  • 規則必須遵守, 規範不一定要遵守, 但是建議遵守;
  • Go語言的命名規範和C語言一樣, 都是采用駝峰命名, 避免采用_命名:

駝峰命名: sendMessage / sayHello

_命名: send_message / say_hello

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved