网站多服务器建设,免费开网店的app,g4560做网站服务器,宣传海报制作1、Go语言关键字 2、Go数据类型 3、特殊的操作
3.1、iota关键字
Go中没有明确意思上的enum#xff08;枚举#xff09;定义#xff0c;不过可以借用iota标识符实现一组自增常亮值来实现枚举类型。
const (a iota // 0b // 1c 100 // 100d // 100 (与上一…1、Go语言关键字 2、Go数据类型 3、特殊的操作
3.1、iota关键字
Go中没有明确意思上的enum枚举定义不过可以借用iota标识符实现一组自增常亮值来实现枚举类型。
const (a iota // 0b // 1c 100 // 100d // 100 (与上一行常量值表达式一致)e iota // 4 (恢复iota自增计数包括c、d)f // 5
)3.2、数组初始化
arr3 : [4]int{5, 3:10} // 可指定索引位置初始化fmt.Println(arr3) // [5 0 0 10]arr4 : [...]int{1,2,3} // 编译器按照初始化值数量确定数组长度fmt.Println(arr4) // [1 2 3]3.3、字符串默认不是nil而是
3.4、切片
切片(slice)本身不是动态数组或动态指针。只是它内部采用数组存储数据当数组长度达到数组容量时会进行动态扩容。
大白话就是切片功能和Java中的List集合类似动态添加数据。不像数组(array)长度是固定的需要事先知道数据长度。
// 方式一a : make([]int,5) // 初始化长度为5的slice,默认值为零for i : 0; i 5; i {a append(a, i)}a append(a, 6)fmt.Println(a) // [0 0 0 0 0 0 1 2 3 4 6] // 方式二 var a []intfor i : 0; i 5; i {a append(a, i)}fmt.Println(a) // [0 1 2 3 4]3.5、map字典
// 定义 变量strMapvar strMap map[int]string// 进行初始化strMap make(map[int]string)// 给map 赋值for i : 0; i 5; i {strMap[i] 迈莫coding}// 打印出map值for k, v : range strMap{fmt.Println(k, :, v)}// 打印出map 长度fmt.Println(len(strMap)) 3.6、结构体
type user struct {name stringage int
}// 结构体user Read方法
func (u *user) Read() string {return fmt.Sprintf(%s 已经 %d 岁了, u.name, u.age)
}func main() {// 初始化u : user{name: 迈莫coding,age: 1,}fmt.Println(u.name, 已经, u.age, 岁了)// 调用结构体user的 Read方法fmt.Println(u.Read()) // 迈莫coding 已经 1 岁4、接口
接口是一组方法的集合
4.1、接口实现
接口的方法与实现结构的类型方法格式一致接口中所有方法均被实现
// 定义接口 包含公共方法
type user interface{talking()
}// 定义一个struct类
type memo struct{
}// 实现接口user中方法talking非侵入式
func (m *memo) talking() {fmt.Println(迈莫coding欢迎您...)
}func main() {mm : memo{}mm.talking4.2、空接口
空接口没有任何办法任何类型都无需实现空接口空接口类型可以保存任何值也可以从空接口中取出原值,在需要使用的地方使用。本身为nil。
type A interface{}{var a Afmt.Printf(%T, a) // nila 3a hellofmt.Printf(%T, a) // String
}很多函数和方法都借助了空接口比如打印函数。
func Println Func Println(a …interface{}) (n int, err error) 4.3、断言
如果我们反向想要知道这个接口变量里面实际存储的是哪个类型的对象可以使用断言-对类型进行转换来判断类型。
package main
importfmttype Animal interface {Eat()Talk()
}
type Dog struct {}
func (d *Dog) Eat(){fmt.Println(dog eating.....)
}
func (d *Dog) Talk(){fmt.Println(dog talking....)
}type Cat struct {}
func (c*Cat) Eat(){fmt.Println(cat eating.....)
}
func (c *Cat) Talk(){fmt.PrintIn(cat talking....)
}
func justify(a Animal){
//进行强制转换如果转换失败则提示错误dog,ok : a.(*Dog)if !ok{fmt.Println(convert to dog failed)return}dog.Eat()
}func main() {
// 分别实例化一个Dog和Cat,并通过justify来进行判断d : Dogvar a Animalada.Eat()justify(a)c : Cat{}a cjustify(a)
}