基础的数据类型
- 数据类型
- 用于声明函数和变量
- 布尔型
1 |
var a bool = true |
- 数字类型
- 整形 int
- 浮点型 float
- 复数 complex
- 字符串类型
- 由单个字节连接起来的
- go语言的字符串的字节使用UTF-8编码标识Unicode文本
- 派生类型
- 指针类型
- 数组类型
- 结构化类型
- Channel类型
- 函数类型
- 切片类型
- 接口类型
- Map类型
类型转换
- 格式
1 |
type_name(expression) |
type_name:类型
expression:表达式
- 示例
1 2 3 4 5 6 7 8 9 10 |
package main import "fmt" func main(){ var sum int = 15 var count int = 16 var mean float32 mean = float32(sum)/float32(count) fmt.Println("meas's value is %f",mean) } |
接口
- 接口是一种数据类型
- 它把所有的具有共性的方法定义在一起
- 任何其他类型只要实现了这个方法就是实现了这个接口
- 定义
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
//定义接口 type interface_name interface{ method_name1 [return_type] method_name2 [return_type] method_name3 [return_type] } //定义结构体 type struct_name struct{ //variables } //实现接口方法 func (struct_name_variable struct_name)method1() [return_type]{ //实现 } func (struct_name_variable struct_name)method2() [return_type]{ //实现 } func (struct_name_variable struct_name)method3() [return_type]{ //实现 } |
- 示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
package main import "fmt" type Phone interface{ call() } type NokiaPhone struct{ } func (nokiaPhone NokiaPhone) call(){ fmt.Println("i am nokia,i can call you") } type Iphone struct{ } func (iPhone Iphone) call(){ fmt.Println("i am iphone,i can call you") } func main(){ var phone Phone phone = new(NokiaPhone) phone.call() phone = new(Iphone) phone.call() } //定义了一个结构Phone,接口里面有个方法call() //在main函数里面定义了一个Phone类型的变量,并将之实例化为NokiaPhone和Iphone |
切片
切片是对数组的抽象
go 数组的长度不可改变
于是,go提供了一种比较灵活,功能强悍的内置类型“切片”
相当于“动态数组”
与数组相比较:
切片的长度不固定,可追加元素
追加元素可能是切片的容量增大
定义
var identifier []type
- 使用make()函数创建切片
1 2 3 4 5 |
var slice1 []type = make([]type,len) //或者 var slice2 := make([]type,len) //可以指定容量 var slice3 := make([]type,length,capacity) |
初始化
- 直接初始化
s := [] int {1,2,3}
- 用数组初始化
- 初始化切片s,是数组arr的引用
s := arr[:]
- 将arr中从下标startIndex到endIndex-1下的元素创建为一个新的切片
s := arr[startIndex:endIndex]
- 将arr中从下标startIndex到arr的最后一个元素创建为一个新的切片
s := arr[startIndex:]
- 将arr的第一个元素开始到arr中下标为endIndex的元素创建为一个新的切片
s := arr[:endIndex]
- 用切片初始化切片
s1 := s[startIndex:endIndex]
- 初始化切片s,是数组arr的引用
函数
- len()
获取切片长度 - cap()
测试切片最长可达到多少 - 示例
1 2 3 4 5 6 7 8 9 10 |
package main import "fmt" func main(){ var numbers = make([]int,3,5) printslice(numbers) } func printslice(x []int){ fmt.Printf("len's %d,cap's %d\n",len(x),cap(x)) } |
空切片
- 未经初始化的切片默认为nil,长度为0
12if(umbers == nil)fmt.Print("切片是空的")
切片截取
- 可以通过设置上限及下限来截取切片
1 2 3 4 5 6 7 8 9 10 11 |
package main import "fmt" func main(){ numbers := []int{0,1,2,3,4,5,6,7,8} //1,2,3 fmt.Printf("%v",numbers[1:4]) //0,1,2,3 fmt.Printf("%v",numbers[:4]) //3,4,5,6,7,8 fmt.Printf("%v",umbers[3:]) } |
append() && copy()
- 如果想增加切片的容量,我们必须创建一个新的更大的切片并把原分片的内容都拷贝过来
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
package main import "fmt" fun main(){ var numbers []int printSlice(numbers) //允许追加空切片 numbers = append(numbers,0) //向切片添加一个元素或多个元素 numbers = append(numbers,1) numbers = append(numbers,1,2,3) //创建切片numbers1为之前的2倍 numbers1 = make([]int,len(numbers),(cap(numbers))*2) //拷贝numbers内容到numbers1 copy(numbers1,numbers) printSlice(numbers1) } func printSlice(x []int){ fmt.Printf("len=%d cap=%d slice=%v",len(x),cap(x),x) } |
数字类型的取值范围
- uint8
- 0 255
- uint16
- 0 65535
- uint32
- 0 4294967295
- uint64
- 0 18446744073709551615
- int8
- -128 127
- int16
- -32768 32767
- int32
- -2147483648 到 2147483647
- int64
- -9223372036854775808 到 9223372036854775807
- float32
- IEEE-754 32位浮点型数
- float64
- IEEE-754 64位浮点型数
- complex64
- 32 位实数和虚数
- complex128
- 64 位实数和虚数
- byte
- 类似uint8
- rune
- 类似int32
- uint
- 32或64位
- uintptr
- 无符号整型,用于存放一个指针
数组
- 相同唯一类型的一组已编号且长度固定的数据项序列
- 声明数组
var variable_name [size] variable_type
var balacnes [10] float32
- 初始化数组
var balance = [5]float32{1.9,2.0,3.4,7.9,1.6}
- {}里面的元素个数不能大于[]里面的数字
- 如果忽略[]的数字,go将会根据{}里面的元素个数来设置数组大小
- 访问数组元素
float32 salary = balance[9]
- 示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package main import "fmt" func main(){ var n [10]int var i,j int for i=0;i<10;i++ { n[i] = i+10 } for j=0;j<10;j++ { fmt.printf("element[%d]=%d\n",j,n[j]) } } |
条件语句
if
if...else...
if...else if...
switch
select
- 类似于switch语句
- 会随机执行一个可运行得case
- 如果没有case,将阻塞,直到有case可运行
循环语句
- for循环
- 嵌套循环
1 2 3 4 |
for(;;) { for(;;) } |
- 循环控制语句
- break
- continue
- goto
- 无限循环
1 2 3 4 |
for true { //dosomething } |
本文为原创文章,版权归Aet所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ Linux 高性能服务器编程:TCP二11/24
- ♥ 行为型:状态模式09/24
- ♥ System_系统是否为64位操作系统10/19
- ♥ C++_volatile10/08
- ♥ 大话数据结构_基础概念11/01
- ♥ Windows 核心编程 _ 用户模式:线程同步二07/16