结构体
学习过C语言的同学肯定都知道结构体,没错,就是那个东西 0.0,结构体让Go有了面向对象的概念
type Small struct {
Name string //公有变量大写
Sex string
kg int //私有变量小写
}
如何申请一个结构体
meStruct := new(Small) //可以申请一个空的结构体,返回一个指针
meStruct := &Small{} //同上
meStruct := Small{} //返回一个结构体,是类型的
meStruct := &Small{"small","男",1} //可以初始化
meStruct := &Small{Name:"Small"} //也可以键值对这样来初始化
面向对象
基于结构体,我们可以给结构体上设置很多东西
函数名称前面可以设置函数附属的结构体,也就是绑定方法
私有方法和共有方法同样使用大小写区分
type Small struct {
Name string //公有变量大写
Sex string
kg int //私有变量小写
}
func(s *Small) GetName()(string) {
return "smallSohoSolo"
}
func(s *Small) GetSex()(string) {
return "man"
}
func(Small) getkg()(int) { //注意这里的Small没加*,意味着是值传递,并且小写是私有方法
return SmallSoho.kg
}
构造函数如何设置?
不支持构造函数重载
静态方法和属性呢?
Go不支持static所以也就没有这类东西,静态的方法请自定义一个函数直接调用,静态的属性请在包中定义一个变量使用。
反问一句,可以直接定义函数,为什么要用静态方法呢?
接口
接口的含义跟Java一样,Go中不需要显示的去implement一下,只要实现一个接口的所有方法就可以了。
包
package main
我们都看到了这行
包的概念类似Java,只不过包名是可以和文件名不一样的(虽然没人这么写)
一个go app中只能有一个main包,其中存在唯一一个main方法,没有返回值也没有入参
每一个包还可以有init方法,虽然init方法不限制个数,不过init方法的调用顺序不固定,所以推荐一个包中只写一个init方法,init方法会在包被import过来的时候自动执行,并且只会执行一次,具体调用顺序如图
package main
import "fmt"
func init() {
}
func main() {
fmt.Println("Hello world")
}