go(二)go简单语法和运算符
语法特点
单行注释使用 // 多行注释 /* 开头 */ 结尾的.代码末尾不能加 分号结束符 ;
强类型语言,标准语法指定数据类型,数据类型跟在变量后面,变量前使用 var 声明变量(var 也可以不写)
基本语法
1 | var a int = 1 |
多值初始化
1 | var { |
- 自动类型推断,可以不指定数据类型,使用 := 声明变量并赋值,可省略var 可省略类型,类型自动推断。
1 | c := 5 |
- 一个赋值语句可对多个变量赋值
完成变量的值的交换,不需要定义临时值
1 | a := 4 |
基础数据类型
go 支持多种数据类型。
- 空值
在go 中的空类型 使用 nil 表示.而不是null
bool
true 或 false
1 |
|
int
有符号数值类型,根据长度的不同可分为 int8 int16 int32 int 64
1 | a := 100 |
uint
无符号数值类型,根据长度的不同可分为 uint8 uint16 uint32 uint 64
()[]https://image-1304078208.cos.ap-beijing.myqcloud.com/img/go_int_type.jpg
int 和uint 在32位系统上占用 32位,在64位系统上占用 64 位.
byte
byte占用8位,一个字节,相当于uint8,不带符号位. uinit8 的别名
- rune
rune是类型int32的别名。
可用于获取字符串的真实长度
1 | str := "字符串" |
var x complex128 = complex(1, 2) // 1+2i
var y complex128 = complex(3, 4) // 3+4i
fmt.Println(xy) // “(-5+10i)”
fmt.Println(real(xy)) // “-5”
fmt.Println(imag(x*y))
1 |
|
type TZ int
func main() {
var a, b TZ = 3, 4
c := a + b
fmt.Printf(“c has the value: %d”, c) // 输出:c has the value: 7
}
1 |
|
const n int = 10
1 |
|
const (
Female = 1
Male = 2
)
1 |
|
const (
a = iota
b = a + 1
c = iota+1
d
e
)
t.Log(a) // 0
t.Log(b) //1
t.Log(c) //3
t.Log(d) //4
t.Log(e) //5
1 |
|
const (
Unknown = iota +1
Female
Male
)
1 | 结果分别是 1 2 3 ,当然也可以定义一些复杂的表达式。 |
func TestString(t *testing.T) {
var str string
t.Log(str) // “”
t.Log(len(str)) //0
}
1 |
|
str1 := "今天"
str2 := "天气"
str3 := "不错"
str3 = str1 + str2 + str3 + "是的"
t.Log(str3)
1 |
|
func TestString(t *testing.T) {
str := “hello”
t.Log(strings.HasPrefix(str,”H”)) //false
t.Log(strings.Contains(str,"llo")) //true
t.Log(strings.Index(str,"llo")) //2
t.Log(strings.Replace(str,"l","t",1)) //hetlo
t.Log(strings.Count(str,"h")) //1
t.Log(strings.ToUpper(str)) //HELLO
}
1 |
|
func TestStrTransfer(t *testing.T) {
//数值转字符串
str := strconv.Itoa(10)
t.Log(str)
//字符串转数值
num,err := strconv.Atoi(“100”)
if(err == nil){
t.Log(num)
}else{
t.Error(err)
}
//小数转数字
str2 := strconv.FormatFloat(10.0,'f',2,32)
t.Log(str2) // 10.00
//字符串转数字
num2,err := strconv.ParseFloat("20.0",32)
if(err == nil){
t.Log(num2)
}else{
t.Error(err)
}
}
1 |
|
s := "好"
t.Log(len(s)) // 3
c := []rune(s)
t.Logf("len %d",len(c)) // 1
t.Logf("unicode %x",c[0]) //597d
t.Logf("utf-8 %x",c) // [597d]
1 |
|
func TestString3(t *testing.T) {
s := “今天的塑料袋机房”
for _,c := range s {
t.Logf(“%c \n “,c)
}
}
1 |
|
func TestBitCalc(t *testing.T) {
t.Log(1 &^ 0) // 1
t.Log(1 &^ 1) // 0 位上的0 被设置为0 了
t.Log(0 &^ 1) // 0
t.Log(0 &^ 0) //0
}
1 |
|
func TestArrEquals(t *testing.T) {
arr1 := […]int{1,2,3,4}
arr2 := […]int{1,2,4,3}
//arr3 := […]int{1,2,3,4,5}
arr4 := […]int{1,2,3,4}
t.Log(arr1 == arr2) //false
//t.Log(arr1 == arr3) //编译报错
t.Log(arr1 == arr4) //true
}
1 |
|
if a:=10;a == 10 {
t.Log(“===>”)
}
1 |
|
if a:=10;a == 9 {
t.Log("1")
}else if b:= 8; b==8{
t.Log("2")
}else{
t.Log("3")
}
1 |
|
for i:=0;i< 10;i++ {
t.Log(i)
}
//无限制循环
for{
t.Log("run==>")
}
1 |
|
str := “今天天气不错”
for pos, char := range str {
t.Logf(“输出 %d == %c\n”, pos, char)
}
type_test.go:124: 输出 0 == 今
type_test.go:124: 输出 3 == 天
type_test.go:124: 输出 6 == 天
type_test.go:124: 输出 9 == 气
type_test.go:124: 输出 12 == 不
type_test.go:124: 输出 15 == 错
1 |
|
func TestSwitch(t *testing.T) {
a := 10
switch a {
case 23:
t.Log(“1”)
case 10:
t.Log(“2”)
default:
t.Log(“3”)
}
}
1 |
|
b := 20
switch {
case a == 100, b == 30:
t.Log(“匹配1”)
case a == 200, b == 20:
t.Log(“匹配2”)
default:
t.Log(“默认条件”)
}
1 |
|
func TestGoTo(t *testing.T) {
for i := 0; i < 10; i++ {
t.Logf("输出 i = %d", i)
if i == 5 {
goto finalShow
}
}
finalShow:
t.Log(“goto执行完毕”)
}

