第二章 GO语言顺序编程

一:变量,对于声名变量Go引入了 var
       如:var str string
   声名一批变量:
var (
v1 int
v2 string
)
   变量初始化: var v1 int =10
            var v2 =10
            v3 :=10
 二: := 但含义是明确表达,同时进行变量声名和初始化,所以 := 左边的变量不能是初始化过的不然会报错
   如: var i int
       i :=2  这样就会报错,因为i已经初始化过了

三:变量赋值,在Go中提供了多重赋值的方式 如:i,j=j,i   这样的代码就是把右边j的值赋值给i,吧i的值赋值给j,相当于 c#里面的  t=i;i=j;j=t;
 
四:匿名变量,在C#中如果一个函数要返回多个值,是一个痛苦的事情,需要很多的变量 out关键字,但是在GO中就可以比较的轻松了,如下:
     
func GetName()(ret1,ret2,ret3 string) {
return "赵占龙","瀚海","数据"
}
func tty() {
_,nicName,_ :=GetName()
fmt.Println("数据:",nicName)
}
这样接收返回值的话只会接收nicname其他两个是匿名的
 
 五:常量 1:字面常量,就是变成的时候硬编码的常量  如: -12 3.1345,3.2+4.5,在GO中字面常量是没有类型的,只要这个常量在相应的值域范围内就可以为该类型的常量,如-12 可以是int uint int32 floa32 。。。。
        2:定义常量,可以给字面常量指定一个友好的名字 ,使用const关键字这个和其他语言一样 如:     const p1 int =22 const(p2 int =2)
          
Go语言工给常量指定类型,但是类型不是必须的,如果不指定那就和字面常量一样,是无类型的如:
 const a,b,c =2,3,"oop",定义常量可以是一个编译期的常量表达式 const mm=1<<3,但是不能是运算期表达式不然会报错
 
六:预定义常量,在Go中预定义了这些常量 true false iota,其中iota是在每个const出现的时候iota呗重置为0,然后在下一次const出现前,没出现一次iota,iota都会增加1,如下:
func testconst() {
const (
c0=iota
c1=iota
c2=iota
)
const (
a1=iota
a2=iota
a3=iota
)
fmt.Println("数据iota:",a3,c1)
}
     数据iota: 2 1
七枚举:枚举就是一系列相关的常量,在Go语言不支持其他语言明确支持的enum,如下:
      
const (
Sunday=iota
Monday
Tuesday
numberday
)
首字母大写是在包外可见的(相当于public ),首字母小写是为包私有(相当于private)
 八:比较 不同类型的书不能直接比较,但是各种类型变量可以直接与字面变量比较
        
 
var i int32
var j int64
i,j=1,2
//这个是会报错的
if i==j{
 
}
//这个可以通过(因为字面变量是无类型的)
if i==1 || j==2{
}
 九:浮点型比较 浮点类型不是一种准确的表达式所以不能像整数类型那样使用 ==来判断是否相等,但是可以使用下面这样的方式 如:
    
func IsEqual(f1,f2,p float64) bool {
return math.Fdim(f1,f2)<p
}
 
  十:复数类型  复数类型实际就是两个实数(在计算机中用浮点数表示)构成,一个表示实部(real),一个表示虚部(imag)  如下:
      
var val1 complex64
val1=3.2+12i
val2 :=3.2+12i
val3 :=complex(val1,val2)
 
对于一个复数,z=complex(x,y)  然后通过 real(z)取的复数的实数部分,也就是x,通过imag(z)来取得复数的虚部 ,也就是y
 
  十一:字符串遍历  如:
    
func sestr() {
str :="hello,赵占龙"
n :=len(str)
for i :=0;i<n;i++{
ch :=str[i]
fmt.Println("字节组遍历:",i,ch)
}
for i,ch :=range str{
fmt.Println("unicode类型遍历:",i,ch)
}
 
}
 
字节组遍历: 0 104
字节组遍历: 1 101
字节组遍历: 2 108
字节组遍历: 3 108
字节组遍历: 4 111
字节组遍历: 5 44
字节组遍历: 6 232
字节组遍历: 7 181
字节组遍历: 8 181
字节组遍历: 9 229
字节组遍历: 10 141
字节组遍历: 11 160
字节组遍历: 12 233
字节组遍历: 13 190
字节组遍历: 14 153
unicode类型遍历: 0 104
unicode类型遍历: 1 101
unicode类型遍历: 2 108
unicode类型遍历: 3 108
unicode类型遍历: 4 111
unicode类型遍历: 5 44
unicode类型遍历: 6 36213
unicode类型遍历: 9 21344
unicode类型遍历: 12 40857
 
在支付类型中支持两个字符类型 一个是 byte代表utf-8的单位字符串,另一个是rune是代表是unicode字符串
十二:数组    数组声明的方法是如下:
                   
var arry [10]int=[10]int{1,2,3,4,56,7,8,9,0,1}
var myarry []int=arry[:5]
for _,v :=range myarry{
fmt.Println("切片数据:",v)
}
切片数据: 1
切片数据: 2
切片数据: 3
切片数据: 4
切片数据: 56
 
//直接创建切片并初始化为0
myslic :=make([]int,5)
for _,v :=range myslic{
fmt.Println("直接创建切片:",v)
}
  十三:动态增减元素     
             
//数组切片动态增减元素
myslell :=make([]int,5,10)
fmt.Println("数组分片分配的空间大小cap:",cap(myslell))
fmt.Println("数组分片的元素个数len:",len(myslell))
//动态的添加元素到分片
myslell =append(myslell,1,2,43)
fmt.Println("数组分片分配的空间大小cap:",cap(myslell))
fmt.Println("数组分片的元素个数len:",len(myslell))
//直接添加数组,注释myap后面的三个点,不然会报错,,因为append方法的第二个参数都是待插入的参数,myslell是int类型,而myap是数组,所以要添加...吧myap数据打散插入
myap :=[]int{1,2}
myslell=append(myslell,myap...)
fmt.Println("数组分片分配的空间大小cap:",cap(myslell))
fmt.Println("数组分片的元素个数len:",len(myslell))
 
数组切片的元素范围可以超过被切片的数组元素个数,只要不超过被切片数组的cap就可以  (cap:数组占用空间大小)
 
数组复制:
copy(数组1,数组2)  吧数组二的内容复制到数组1,数组长度按做小数组算
 
   十四:map  map是一堆未排序的键值对集合,具体操作如下:
               
func maptest() {
var personDb map[string] person
personDb=make(map[string] person)
//往map插入元素
personDb["zzl"]=person{"123456","赵占龙","汽车之家"}
personDb["tty"]=person{"3","瀚海","中国电子大厦"}
 
//map取值,也可用于查账元素,只有找到了ok才是true
pson,ok:=personDb["zzl"]
if (ok){
fmt.Println("数据:",pson.ID,pson.Name,pson.Address)
}else {
fmt.Println("读取失败")
}
 
map声明变量:var personDb map[string] person  其中personDb是map的变量名称,string是map的键的类型,person  是map值的类型
 
map创建: personDb=make(map[string] person)
personDb=make(map[string] person,100)创建并指定map的大小
                     personDb=make(map[string] person{"123456","赵占龙","汽车之家"})创                         建并初始化
                     
                     delete(personDb,"zzl"):删除map中键是zzl的元素
 
 
 
 
 
 
posted @ 2018-08-03 18:06  瀚海行舟  阅读(164)  评论(0)    收藏  举报