go 进阶
高阶知识
fmt标准库
//输出函数
//Print函数:Println函数会在输出内容的结尾添加一个换行符
//Fprint函数输出到一个io.Writer接口类型的变量w中
自定义类型
type myint int //自定义类型
type yourint = int //类型别名
结构体
1.定义
//定义结构体
type person struct {
name string
age int
hobby []string
}
//key-value初始化
var p2 = person{
name: "元素",
age: 11,
hobby:[]string{"1","2","3"}
}
//用值初始化,值的顺序要跟定义时一样
p3 := person{
"lisa",
22,
[]string{"sd","ddd"}
}
//匿名结构体 多用于临时场景
var s struct{
name string
age int
}
//指针类型的结构体
var p = new(person) //指針類型
//结构体匿名字段
type hello struct{
int
int
}
//嵌套
type address struct{
city string
}
type person struct{
name string
address
}
//p.city => p.address.city
//匿名嵌套时 先在自己的结构体找对应字段,再去嵌套的里面找字段
2.结构体内存
//内存分配:一个结构体是一段连续的内存
//进阶:内存对齐
3.结构体的继承
type animal struct{
name string
}
func (a animal)move(){
//do something
}
//子类 dog
type dog struct{
feet int
*animal
}
func (d dog) wang() {
//do sth
}
//调用
func main() {
d := dog{
animal:animal{name:"xx"},
feet:4,
}
d.wang()
d.move()
}
4.结构体与JSON
方法
//定义:是一种特殊的函数,是作用于特定类型的函数
func (接收变量 接收者类型) 方法名(参数列表)(返回参数){
}
//定义dog结构体
type dog struct{
name string
}
//构造函数 new开头首字母大写
func newDog(name string) {
return dog{
name: name,
}
}
//方法 接收者表示调用该方法的类型变量,多用类型名的首字母小写表示
func (d dog) wang() {
//do something
}
//go中如果首字母大写,表示对外部可见(公有的public)
// Cat 这是一个猫
type Cat struct{
name
}
//可以给任意类型添加方法,但仅限在同一个包package
//使用指针类型接收者
/*
1.需要修改接收者中的值
2.接收者是拷贝代价大的对象
3.保证一致性,如果有某个方法使用了指针接收者,那么其他的方法也应该使用指针接收者
*/
接口interface
//接口是一种类型,规定了变量有哪些方法
type 接口名 interface{
接口方法(参数值)(返回值)
...
}
//接口的实现
//一个变量如果实现了所有的方法,那么这个变量就实现了这个接口
//指针实现接口,接口可以嵌套
//空接口
type xx interface{
//所有的类型都实现了空接口,任意类型都可以传入空接口
}
interface{} //空接口没必要写名字,通常用这个定义
package
//包中的变量或方法等如果是小写则只能在当前包调用
//大写的时候可以供外部调用

浙公网安备 33010602011771号