go开发基础(一)


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++     
}  

文章作者: Wdstql
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Wdstql !
评论
  目录