【Go语言】编程系列 - 顺序编程-2

2018-06-13  本文已影响28人  水瓶座男生

第2章 顺序编程

2.1 变量

2.1.1 变量声明
var v1 int
var v2 string 
var v3 [10]int   // 数组 
var v4 []int    // 数组切片
var v5 struct {   
f int 
} 
var v6 *int    // 指针
var v7 map[string]int // map,key为string类型,value为int类型 
var v8 func(a int) int

var (
    v1 int
    v2 string
)

2.1.2 变量初始化
- var v1 int = 10 //正确的使用方式1
- var v2 = 10 // 正确的使用方式2,编译器可以自动推倒出v2的类型
v3:=10 // 正确的使用方式3,编译器可以自动推导出v3的类型
2.1.3 变量初始化
var v10  int
v10 =123
2.1.4 匿名变量
func GetName() (firstName, lastName, nickName string) {  return "May", "Chan", "Chibi Maruko" }
若只想获得nickName,则函数调用语句可以用如下方式编写: 
_, _, nickName := GetName() 

2.2 常量

2.2.1 字面常量
2.2.2 常量定义
const Pi float64 = 3.14159265358979323846  
const zero = 0.0             // 无类型浮点常量 
const (     
 size int64 = 1024     
 eof = -1                // 无类型整型常量 
) 
const u, v float32 = 0, 3    // u = 0.0, v = 3.0,常量的多重赋值 const a, b, c = 3, 4, "foo"
// a = 3, b = 4, c = "foo", // 无类型整型和字符串常量 Go

2.2.3 预定义常量

2.2.4 枚举

const (     
Sunday = iota     
Monday     
Tuesday     
Wednesday     
Thursday     
Friday     
Saturday     numberOfDays        // 这个常量没有导出  )

2.3 类型

2.3.1 布尔类型
//示例代码
var v1 bool
v1 =true
v2 := (1==2)
2.3.2 整形
类型 长度(字节) 值范围
int8 1 -128~127
uint8(即byte) 1 0~255
int16 2 -32 768 ~ 32 767
uint16 2 0 ~ 65 535
int32 4 -2 147 483 648 ~ 2 147 483 647
uint32 4 0 ~ 4 294 967 295
int64 8 -9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807
uint64 8 0 ~ 18 446 744 073 709 551 615
int 平台相关 平台相关
uint 平台相关 平台相关
uintptr 同指针 在32位平台下为4字节,64位平台下为8字节
1. 类型表示
var value2 int32 
value1 := 64  // value1将会被自动推导为int类型 value2 = value1 // 编译错误 
value2 = int32(value1) // 编译通过 

2. 数值运算
3. 比较运算
var i int32 
var j int64 
 
i, j = 1, 2 
 
if i == j {   // 编译错误     
fmt.Println("i and j are equal.")  
}   
 
if i == 1 || j == 2 { // 编译通过     fmt.Println("i and j are equal.")  
}
4. 位运算
运算 含义 样例
x<<y 左移 124 << 2 // 结果为496
x >> y 右移 124 >> 2 // 结果为31
x ^ y 异或 124 ^ 2 // 结果为126
x & y 124 & 2 // 结果为0
x | y 124 | 2 // 结果为126
^x 取反 ^2 // 结果为-3

2.3.3 浮点型

1. 浮点数表示
2. 浮点数比较
import "math" 
 
// p为用户自定义的比较精度,比如0.00001 
func IsEqual(f1, f2, p float64) bool {  
    return math.Fdim(f1, f2) < p  
}

2.3.4 复数类型

1. 复数表示
var value1 complex64    // 由2个float32构成的复数类型 
value1 = 3.2 +12i
value2 :=3.2 +12i
value3 :=complex(3.2,12)
2.实部与虚部

2.3.5 字符串

var str string  // 声明一个字符串变量 
str ="hello word"
ch:=str[0] //取字符串的第一个字符
fmt.Println("The length of \"%s\" is %d \n ",str,len(str))
fmt.Printf("The first character of \"%s\" is %c.\n", str, ch)
1. 字符串操作
2. 字符串遍历
str := "Hello,世界" 
n := len(str) 
for i := 0; i < n; i++ {    
ch := str[i] // 依据下标取字符串中的字符,类型为byte     fmt.Println(i, ch)
}
str := "Hello,世界" 
for i, ch := range str {   
fmt.Println(i, ch)//ch的类型为rune 
    
}

字符类型

2.3.7 数组

[32]byte     //长度为32的数组,每个元素为一个字节 
[2*N] struct {
    x,y int32
}
[1000] *float64 //指针数组
[3][5] int      //二维数组
[2][2][2] float64 //等同于[2]([2]([2]float64)) 

1. 元素访问
for i := 0; i < len(array); i++ {  
    fmt.Println("Element", i, "of array is", array[i])  
}
for i, v := range array {     
    fmt.Println("Array element[", i, "]=", v)  
} 
2. 值类型
pacage main
import "fmt"

func modify (array [10] int) {
    array[0] =10
    fmt.Println("In modify (),array values : ", array)
}

funct main(){
    array := [5] int{1,2,3,4,5} //定义并初始化一个数组
    modify(array) //传递一个函数,并试图在函数体内修改这个数组内容
    fmt.Println("In main() , array values : " ,array)
}

2.3.8 数组切片

1. 创建数组切片 创建数组切片的方法

基于数组

pacage main
import "fmt"

func main(){
    var myArray [10] int = [10]{1,2,3,4,5,6,7,8,9,10}
    
    var mySlice []int = myArray[:5]
    fmt.Println("Elements of myArray: ") 
     
    for _,v := range myArray {
        fmt.Print(v, " ") 
    }
    
    fmt.Println() 
}
2. 元素遍历
for i:= 0;i<len(mySlice);i++ {
    fmt.Println("mySlice[",i,"]=",mySlice[i])
}
for i, v :=  range mySlice { 
    fmt.Println("mySlice[", i, "] =", v)  
}
3. 动态增减元素
package main 
 
import "fmt" 
 
func main() {     
mySlice := make([]int, 5, 10)  
    fmt.Println("len(mySlice):", len(mySlice))  
    fmt.Println("cap(mySlice):", cap(mySlice)) 
}
4. 基于数组切片创建数组切片
oldSlice := []int{1, 2, 3, 4, 5} 
newSlice := oldSlice[:3] // 基于oldSlice的前3个元素构建新数组切片
5. 内容复制

2.3.9 map

package main
import "fmt"

type PersonInfo struct {
    ID string
    Name string
    Address string 
}

func main () {
    var personDB  map[string] PersonInfo
        personDB  = make(map[string] PersonInfo)
        
    personDB["123456"] = PersonInfo{"123456","TOM","ROOM203",...}
    personDB["1"]= PersonInfo{"1","jack","Room01",...}
    
    person , ok:=personDB["1234"]
    
    if ok {
        fmt.Println("Found person", person.Name, "with ID 1234.") 
        fmt.Println("Did not find person with ID 1234.") 
    }
}

1. 变量声明
2. 创建
myMap = map[string] PersonInfo{ 
"1234": PersonInfo{"1", "Jack", "Room 101,..."}, 
} 
3. 元素赋值
myMap["1234"] = PersonInfo{"1", "Jack", "Room 101,..."}
4. 元素删除
delete(myMap, "1234") 
5. 元素查找
comming song...
上一篇下一篇

猜你喜欢

热点阅读