首页 > 其他分享 >golang struct interface 方法

golang struct interface 方法

时间:2023-07-08 13:44:06浏览次数:27  
标签:func struct int mystruct ms1 golang test ms interface

有一个结构体

type mystruct struct {
  a int
}

如果想为这个结构体增加一个方法,就类似于C++或者Java的类一样,有成员变量,也有成员函数,怎么实现呢?由于go没有类的概念,所以提供了一种方案。

func (ms mystruct) test() int {
  return ms.a
}

就是按照定义函数的方式,只不过在前面增加对应结构体或者接口的参数。这里就是定义了一个函数test(),返回值是int,对应的是mystruct结构体(mystruct中的方法),由于我们调用类的方法是都是实例化一个类,然后用类的实例进行调用。比如:

Class A {
    void test() {
    }
};

A a;
a.test();

所以go中方法前面的参数(ms mystruct)就表示在调用的时候,把当前的实例传递进来。一般我们会写成指针的形式,避免传递了形参,数据没有改变:

func (ms *mystruct) test() int {
  return ms.a
}

具体使用如下

func main() {
  var ms1 mystruct
  ms1.a = 10
  fmt.Println(ms1.test())
}

ms1.test()就是调用func (ms *mystruct) test() int函数,把自己传递进去,func (ms *mystruct) test() int就是传递ms1的指针,func (ms mystruct) test() int就是传递ms1的形参。

不过go的这个特性有个问题,不能很明显的知道结构体或者接口有哪些方法。当然也有一个好处就是灵活。

标签:func,struct,int,mystruct,ms1,golang,test,ms,interface
From: https://www.cnblogs.com/studywithallofyou/p/17537118.html

相关文章

  • 首次使用Charles,Structure和Sequence中没有内容,Recording中有内容的解决方法
    1.首次使用Charles记录下载打开软件后,SSLProxying已经配置好了,但是Structure和Sequence中没有内容,而Recording中有内容解决办法:RecordingSettings中Exclude中Remove就可以了点击Proxy,点击RecordingSettings需要查看的内容可以在Include中添加......
  • Dockerfile加载cache提速制作golang业务镜像
    Dockerfile#syntax=docker/dockerfile:1.2FROMgolang-1.18.5:ubuntu-22.04ASbuilderENVCGO_ENABLED0ENVGOOSlinuxENVGOPROXYhttps://goproxy.cn,directWORKDIR/build/COPYgo.*.RUNgomoddownloadCOPY..RUN--mount=type=cache,target=/root/.......
  • Dockerfile制作golang-ubuntu_22.04基础镜像
    DockerfileFROMubuntu:22.04ADDgo1.18.5.linux-amd64.tar.gz/usr/localENVPATH=/usr/local/go/bin:$PATH生成镜像#dockerbuild-fDockerfile-tgolang-1.18.5:ubuntu-22.04.验证镜像#dockerrun-it--rmgolang-1.18.5:ubuntu-22.04goversiongoversiongo......
  • golang中的空切片和nil切片
    Golang中的切片是很基本的数据结构,它的底层是一个数组,表层是一个包含三个变量的结构体:typeslicestruct{arrayunsafe.Pointer //指针,指向底层的数组lengthint //切片的长度capcityint //切片的容量}当把一个切片赋值给另一个切片时,实际上是对切片表层结构体的浅......
  • linux环境安装golang
    在使用pprof工具分析性能时,发现我们的环境上默认没有装go,所以执行不了gotoolpprof命令,于是自己手动装了下。步骤如下:首先下载一个对应系统架构的golang包,这里我用的是arm包,装的1.14.12版本。(见附件)。在环境上创一个个人目录,把包传上去,然后执行以下命令解压到/usr/local目录下(官......
  • Golang中的Channel(二)
    上篇介绍了Channel是什么以及它的类型,这篇总结一下Channel的用法。 基本语法(1)        声明channel声明channel的语法格式为:varChannelNamechanElementType与其他变量声明不同的是,在类型前面多了一个chan关键字。ElementType指的是这个channel能够传递的数据类......
  • Golang中的Channel(一)
    Golang在并发编程上有两大利器,分别是channel和goroutine。Golang中有一句名言:“使用通信来共享内存,而不是通过共享内存来通信”。这句话有两层意思,Go语言确实在sync包中提供了传统的锁机制,但更推荐使用channel来解决并发问题。这里先对Channel做一个基本的介绍,对于其深一层的实现......
  • P7561[JOISC 2021 Day2] 道路の建設案 (Road Construction) 题解
    P7561[JOISC2021Day2]道路の建設案(RoadConstruction)题解题目描述JOI国是一个\(x\timesy\)的二维平面,王国里有\(n\)个城镇,分别编号为\(1,2,\cdots,n\in[1,2.5\times10^5]\),其中第\(i\)个城镇的坐标为\((x_i,y_i)\)。在JOI国,正计划修建连接两座城......
  • spring注解之@PostConstruct在项目启动时执行指定方法
    学习资料:https://juejin.cn/post/7247543825534419000https://qa.1r1g.com/sf/ask/238458881/......
  • 报错 Cannot construct instance of `java.time.LocalDate` LocalDateTime
    原因:报错的原因就是导入了JacksonObjectMapper对象映射器,导致不知道怎么将LocalDateTime转换成Json类型的数据了,在没有导入使用JacksonObjectMapper的时候是不会报错的。解决方式:指定LocalDateTime类型的数据如何进行序列化就好了,给实体类中LocalDateTime的属性加上注解就可以了:......