go的for循环语句
有3个不一样的形式
1,和C的一样,只是没有()
for 初始化;循环条件; 赋值表达式 {}
2,仿照C的while
for 循环条件 {}
3, 只是第一种的简化形式
for {}
如果想用 each:range形式 就可以
for key,val:=range map{
......
}
eg:
str :=[]string { "good","good","study"}
for i,s:= range str {
fmt.Printf("第%d的 str的字符串的是%s",i,s)
}
也可以使用 key,_ 或者 _,val 来获取其中的某一个
比如实现一个 1-10的加法运算
sum :=0
for i:=1;i<=10;i++ {
sum+=i
}
这里面的 ( 1;2 ;3 )都是可以选填的,需要就写,不需要可以不写
循环控制语句
1,break 用于跳出xun'huan
2,continue,用于跳出当前的循环语句,进行下一轮循环
3,goto,讲跳转到下一个被标记的语句
go的函数定义
func func_name (参数列表 ) 返回类型 {
}
这里的函数可以返回多个值
func func_name ( para_list) (int ,string ){
var a int
var b string
return a,b
}
变量的作用域
局部变量
它们的作用域只在函数体内,参数和返回值变量也是局部变量。
全局变量
全局变量可以在整个包甚至外部包(被导出后)使用
如果局部和全局变量重名,优先考虑近的局部变量
整型
有符号整型:
int8(-128 ->127)
int16(-32768->32767)
int32(-2,147,483,648->2,147,483,647)
int64(-9,223,372,036,854,775,808->9,223,372,036,854,775,807)
int
:在32位操作系统上使用 32位
:在64位操作系统上使用64位
无符号整数:
uint8(0->255)
uint16(0->65,535)
uint32(0->4,294,967,295)
uint64(0->18,446,744,073,709,551,615)
uint
在32位操作系统上使用32位
在64位操作系统上使用64位
整型之间的数据转换
使用 类型+ ()
var a int8=1
var b int16 = 10
var c int = int(a)+int(b)
注意,如果是位数多向少的转换,容易出现值的失真
整型和字符串的转换
res ,err:= strconv.Itoa(整型) 整型转换为字符串 这里要求是int ,不是其他的int8 什么的
fmt.Println(res,reflect.TypeOf (res))
res1,err:= strconv.Atoi(res) //这里的err表示错误信息
fmt.Println(res1,reflect.TypeOf(res1)) 是字符串转换为整型(必须是数字类型的字符串)
整型的进制转换
strconv.FormatInt(int64(整型),n进制)//这里的整型必须是int64,返回的是string
其他进制转换为整型
strconv.ParseInt(data,n进制,0-64)//把string 类型的data转换为n进制,最后那个是约束范围的,但是返回的仍然是int64
常见的math调用
fmt.PrintIn(math.Abs(-19))// 取绝对值
fmt.Printin(math.Floor(3.12))// 向下取整
fmt.Println(math.ceil(3.14))// 向上取整
fmt.PrintIn(math.Round(3.3478))// 就近取整
fmt.Printin(math.Round(3.5478*100)/100)//保留小数点后两位
fmt.Printn(math.Mod(11,3))//取余数,同11 %3
fmt.Println(math.Pow(2,5))// 计算次方,如:2的5次方
fmt.Println(math.Pow10(2))//计算10次方,如:2的10次方
fmt.Println(math.Max(1,2))// 两个值,取较大值
fmt.Printin(math.Min(l.2))//两个值,取较小值
new
var a *int //初始化了一个指向nil的指针
b:= new (int) //初始化一个指针,并且指向一个分配int类型(初始为0值)
big.Int (超大整型)
var a big.Int //0值的超大整型
var b *big.Int // 指向nil的超大整型指针//很少用
var c new (big.Int) //分配一个超大整型,初始为0,这个c指向这个区域
a.SetInt64(2025) //在a里面存一个2025
a.SetString("20250109",10)//把字符串以10进制存入a
c.SetInt64(2025)
c.SetString("20250109",10)
运算
a1 := new (big.Int)
a2 := new (big.Int)
a1.SetInt64(100)
a2.SetInt64(200)
res:=new (big.Int)
res.Add(a1,a2)//+
res.Sub(a1,a2)//-
res.Mul(a1,a2)//*
res.Div(a1,a2)// 得到商
MOD := new (big.Int)
res.DivMod(a1,a2,MOD)//res记录商,MOD记录余数
因为是指针,可以用 res.Int64/res.String 返回对应内容的类型
可以把声明和赋值合成为一行
a1=big.NewInt()
布尔类型
bool
res.err=strconv(字符串)
如果字符串是1,t,T,true,TRUE,True返回真
0,f,F,false,FALSE,False返回假
其他返回假,同时返回错误信息