c與ch的使用區别?1.1、源碼文件以_Test結尾:***_test.go;,我來為大家科普一下關于c與ch的使用區别?下面希望有你要的答案,我們一起來看看吧!
1.1、源碼文件以_Test結尾:***_test.go;
1.2、測試方法名以Test開頭:func Testxxx(t *testing.T) {…},首字母大寫代表包外可以訪問
// 标準格式
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)
}
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)
}
func TestExchange(t *testing.T) {
a := 1
b := 2
a, b = b, a // 和python保持了一緻
t.Log(a, b)
}
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
... ...
)
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注意點:
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
}
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
}
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
}
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
}
駝峰命名: sendMessage / sayHello
_命名: send_message / say_hello
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!