Go基础知识点(十五) | 青训营笔记

83 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第17天.

golang继承:

golang本质上没有OOP的概念,也没有继承的概念,但是可以通过结构体嵌套来实现这个特性.

package main

import "fmt"

type Animal struct {
   name string
   age  int
}

func (a Animal) eat() {
   fmt.Println("eat...")
}
func (a Animal) sleep() {
   fmt.Println("sleep...")
}

type Dog struct {
   Animal //可以认为是继承
   string
}
type Cat struct {
   Animal //可以认为是继承
   string
<img src="}" alt="" width="30%" />

func main() {
   dog := Dog{
      Animal{name: "huahua", age: 2},
      "hello",
   }
   dog.eat()
   dog.sleep()
   fmt.Printf(dog.name)
   fmt.Println(dog.age)

   cat := Cat{
      Animal{name: "kity", age: 3},
      "hi",
   }
   cat.eat()
   cat.sleep()
   fmt.Printf(cat.name)
   fmt.Println(cat.age)

}
image.png

golang构造函数:

golang没有构造函数的概念,可以使用函数来模拟构造函数的功能.

package main

import "fmt"

type Person struct {
   name string
   age  int
}

func newPerson(name string, age int) (*Person, error) {
   if name == "" {
      return nil, fmt.Errorf("name 不能为空")
   }
   if age < 0 {
      return nil, fmt.Errorf("age 不能小于0")
   }
   return &Person{name: name, age: age}, nil
}
func main() {
   per, error := newPerson("tom", 12)
   if error == nil {
      fmt.Println(*per)
   }
   if per == nil {
      fmt.Println(error)
   }
}

golang包:

包可以区分命令空间(一个文件夹中不能有两个同名文件),也可以更好的管理项目.go中创建一个包,一般是创建一个文件夹,在该文件夹里面的go文件中,使用package关键字声明包名称,通常,文件夹名称和包名称相同.并且,同一个文件下面只能有一个包.

创建包:

package dao
import "fmt"
func Test1(){
   fmt.Println("test1 package")
}

导入包:

要使用某个包下面的某个变量或方法,需要导入该包,导入包时,要导入从GOPATH开始的包路径,例如:

package main
import "dao"
func main(){
   dao.Test1()
}

包注意事项:

  • 一个文件夹下只能有一个package
    import后面的其实是GOPATH开始的相对目录路径,包括最后一段。但由于一个目录下只能有一个 package,所以import一个路径就等于是import了这个路径下的包。
    注意,这里指的是“直接包含”的go文件,如果有子目录,那么子目录的父母录是完全两个包。
  • 比如你实现了一个计算器package,名叫calc,位于calc 目录下;但又想给别人一个使用范例,于是在 calc下可以建个example子目录(caic/example/),这个子目录里有个example. go(calc/example/example. go),此时,example. go可以是main包,里面还可以有个main函数。
  • 一个package的文件不能在多个文件夹下
    。如果多个文件夹下有重名的package,它们其实是彼此无关的package。
    。如果一个go文件需要同时使用不同目录下的同名package,需要在import这些目录时为每个目录指 定一个package的别名。