Bootstrap

go学习笔记

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返回假

其他返回假,同时返回错误信息

;