go开发基础1 — go的基础语法(1)
本文将会在多处将go的语法与c/c++的作对比,以便于熟悉。
先讲一点,go中的代码末尾都不用加分号
变量、常量与数据类型
变量
//1
var a int//声明
a=1//定义
//2
var a=1
//3
a:=1//短定义,仅能在函数内使用,无法作为全局变量
//4
var a int=1//多此一举了属于是
//多变量
var a,b,c=1,"123",0.5//显然可以是不同类型
var a,b,c int//先声明
a,b,c=1,2,3//由于声明了则必为同一类型
var (
a int
b string
)//集合类型
//另外在go中变量单单被定义是不行的,必须被使用,否则无法通过编译
//各种数据类型的变量在未赋值前都会自动赋予初始值,如int为0,string为“”,bool为false
常量
//说简单点就是用const来替代var,表示该变量在程序运行过程中不会被修改
//常量自然无短定义
const LENGTH int = 10
const a, b, c = 1, false, "str" //多重赋值
const (//集合类型,枚举常量
Unknown = 0
Female = 1
Male = 2
)
//常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型
//不曾使用的常量,在编译的时候,是不会报错的
//下面是关于iota,即一个可以被编译器修改的常量
const (
a = iota //0
b //1
c //2
d = "ha" //独立值,iota += 1
e //"ha" iota += 1
f = 100 //iota +=1
g //100 iota +=1
h = iota //7,恢复计数
i //8
)
数据类型
//Unicode 包中内置了一些用于测试字符的函数,这些函数的返回值都是一个布尔值,如下所示(其中 ch 代表字符):
//byte表示字符,以uint8表示,rune表示unicode字符,以int表示
import "unicode"
unicode.IsLetter(ch)
unicode.IsDigit(ch)
unicode.IsSpace(ch)
类型转换可看这篇
输入输出
import "fmt"
//输入
var a,b,c int
fmt.Scanf("%d,%d,%d",&a,&b,&c)//类C
fmt.Scanln(&a,&b)//scanln函数会识别空格左右的内容,但是一旦遇到换行符就会立即结束,不论后续还是否存在需要带输入的内容。
fmt.Scan(&b,&c)//scan函数会识别空格左右的内容,哪怕换行符号存在也不会影响scan对内容的获取。
//输出
fmt.Println(a,b)//输出的内容会用空格分隔
fmt.Printf("%5d",a)//类C
fmt.Print(a)
//bufio包读取
import (
"os"
"bufio"
)
reader:=bufio.NewReader(os.stdin)
s1,_:=reader.ReadString('\n')//以换行符为结尾,_表示读取到这个数据不需要,此时输入的字符串保存在s1中
printf占位符请看此处
分支与循环结构
分支结构
//要注意的是格式
if a>b{//类C
xxx
} else if a<b{//else一定要写在这里
xxx
} else{//大括号不能省
xxx
}
if n:=0;n>-1{//可以先加个语句,在评估条件之前执行
xxx
}//要注意的是n的作用域仅在该if中
switch a{//类C
case 1:
xxx
case 2:
xxx
default:
xxx
}
switch {
case grade == "A" :
fmt.Printf("优秀!\n" )
case grade == "B", grade == "C" ://逗号表示或
fmt.Printf("良好\n" )
case grade == "D" ://注意无大括号,靠缩进来辨别
fmt.Printf("及格\n" )
fallthrough//执行下面的子句,fallthrough应该是某个case的最后一行。如果它出现在中间的某个地方,编译器就会抛出错误。
case grade == "F":
fmt.Printf("不及格\n" )
default:
fmt.Printf("差\n" );
}
循环结构
for i:=0;i<10;i++{//类C
break;//类C
continue;
}
for i<10{//只有跳出条件也可以,类while
xxx
}
LOOP: for a < 20 {
if a == 15 {
/* 跳过迭代 */
a = a + 1
goto LOOP
}
fmt.Printf("a的值为 : %d\n", a)
a++
}