Go 之基础速学 (九) golang 里的结构体继承和数组初步学习

首先需要声明,在golang里面是不存在继承这么一说的,不像在php和java当中那样有父类子类,子类继承父类,extends,implements等等统统是不存在滴!
今天就模拟实现子类继承父类的案例

看代码吧:

//NewsModel.go 理解为父类 结构体:
package models
import "github.com/pquerna/ffjson/ffjson"
type NewsModel struct {
   NewsId int
  NewsTitle string
}
func (news NewsModel) ToJson() string {
   result,err := ffjson.Marshal(news)
   if err!= nil {
      return err.Error()
   } else {
      return string(result)
   }
}
//SportsNews.go 理解为子类 子结构体:
package submodels

import (
   "com.huxiaobai/models"
  "github.com/pquerna/ffjson/ffjson")

type SportsNews struct {
   Tags []string //array 字符串数组
  // 我们在这里定义的只是一个匿名属性 类型为NewsModel 这样我们就可以在别的地方调用NewsMoel结构体里面的属性就跟调用SportNews结构体里面的属性一样来调用
  // 比如
  // var sn submodels.SportsNews
 // sn.NewsId = 123 // 这里的sn.NewId就可以直接调用到NewsModel结构体里面的属性来进行操作
  // 如果 News Models.NewsModel 这么来定义  那么就得需要 sn.News.NewsId = 123 显然这样就有点不像php或者java里面从子类当中可以直接读取父类里面属性的特点了
  models.NewsModel
}

//这里可以理解为覆盖了母类当中的ToJson()方法
//当再调用fmt.Println(sn.ToJson())的时候那么Tags以及母类当中的NewsId NewsTitle就会都被打印出来了
//如果不写这个方法 调用的是母类里面的ToJson() 打印的只是NewsId NewsTitle属性的值
func (sn SportsNews) ToJson() string {
   result,err := ffjson.Marshal(sn)
   if err!= nil {
      return err.Error()
   } else {
      return string(result)
   }
}
//main.go 理解为入口文件:
package main

import (
   "com.huxiaobai/submodels"
   "fmt" 
   "github.com/pquerna/ffjson/ffjson")

func main(){
  //通过struct结构体 模拟 php或者java当中的继承 (重点去看SportsNews结构体当中属性的定义:models.NewsModel) 案例一
  var sn submodels.SportsNews
  //可以就跟php当中子类调取父类当中元素的形式直接读取NewsModel结构体里面的属性或者设置属性值
  sn.NewsId = 123123
  sn.NewsTitle = "标题"
  sn.Tags = []string{"足球","羽毛球","排球"}
  fmt.Println(sn.ToJson())
}

重点看里面的注释,尤其是SportsNews.go文件里面的注释信息

下面我们来看一下数组的基本使用:

//数组的学习 案例一
        //len()  cap()  都是获取数组的长度
        //var arr []string  = []string{"a","b","c"}
        //fmt.Println(arr,len(arr),cap(arr))

    //数组的学习 案例二
        //var arr [3]string
        //arr[0] = "a"
        //arr[2] = "c"
        //fmt.Println(arr)

    //数组的学习 案例三
        //var arr [3]string = [3]string{0:"a",1:"b"}
        //fmt.Println(arr)

    //数组的学习 案例四
        //规定数组的长度是5 但是设置了3个 剩下的会用默认值来填充 1 2 3 0 0
        //var arr [5]int = [5]int{1,2,3}
        //fmt.Println(arr)
本作品采用《CC 协议》,转载必须注明作者和本文链接
胡军
讨论数量: 2

Tags []string //array 字符串数组 这是切片不是数组吧

3年前 评论
huxiaobai_001

@小蓝 这是切片 我写成数组啦?抱歉

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!