2022.2.21
变量类型
数字(int、uint /8 6 32 64、float 32 64、complex实虚数 64 128),布尔,字符串,派生类型(Pointer,数组,结构化,Channel,接口,Map)
基础函数
fmt
fmt.Println() //可用逗号拼接,输出会多加一个空格
fmt.Print()
var url = fmt.Sprintf("%d %s",...参数)//格式化字符串最后还需要输出才能打印
/*
%v 本来值
%q 双引号输出
%T 输出数据类型
*/
变量声明
var a,b int = 1,2 //类型int可以省略
a := 1 //适用于未声明过的变量
常量声明
const PI = 3.14 //隐式
const PI float32 = 3.14 //显示
const a, b, c = 1, false, "str" //多重赋值
const (
i = iota //特殊常量下一位默认加 1
j = 1
h
//输出结果0 1 1
)
//常量必须使用内置函数
len(c)
unsafe.Sizeof(c) //两个指针,一个指向起始地址,一个指向长度,8+8=16个字节
cap(c) //数组切片容量,学习到对应部分再了解
条件语句
//第一种
a:=30
swtich a{
case 30:... //自带break
case 40:...
case 50,60,70:...
default:...
}
//第二种
grade :="A"
switch{
case grade == "A":...
fallthrough //强行执行下一条,不判断下一个条件是否成立
case grade =="B",grade =="C":...
}
select //涉及通信操作,学习之后再了解
循环语句
没有while,只有for
//像java的for写法,但是没有括号
sum:=0
for i:0;i<=10;i++{
sum+=i;
}
//像while的写法
for sum<=20{
sum+=1
}
//range 对数组字符串循环
str := "abc"
for i,x:=range str{ //range相当于索引
fmt.Println(i,fmt.Sprintf("%c",x))
}
//break 标签
Loop:
for i:=0;i<=10;i++{
fmt.Println(i)
if(i==5){
break Loop //标签写在循环之前表示不再执行该循环
}
}
//continue标签
re:
for i := 1; i <= 3; i++ {
fmt.Printf("i: %d\n", i)
for i2 := 11; i2 <= 13; i2++ {
fmt.Printf("i2: %d\n", i2)
continue re //从最外层循环重新开始执行
}
}
//goto 不推荐使用
函数定义
参数传递类似于C,存在值传递和引用传递
func 函数名(参数列表) [返回值类型]{
}
func show(a string,b int) (int,string){
return b,a
}
func main(){
b,a:=show("aaa",3)
}