首页 > 其他分享 >Golang method | Interfaces 示例

Golang method | Interfaces 示例

时间:2023-09-26 21:24:13浏览次数:29  
标签:surName string 示例 Students Interfaces Golang Employee givenName fmt

方法与接口(method Interface)

 

package interFaces

import (
"fmt"
"log"
)

// manager Appstore online account

type Account struct {
surName string
givenName string
}

// 方法的调用 如果需要对调用对象做修改操作,则需要使用 `*` 引用其指针创建方法。
func (a *Account) ChangeName() {
fmt.Printf("old surname:%s, givenName:%s\n", a.surName, a.givenName)
log.SetPrefix("ChangeName(): ")
var (
surName string
givenName string
)

fmt.Printf("Input New surName:\t ")
_, err := fmt.Scanf("%s\n", &surName)
// 值得注意的是,在使用Scanf进行键盘接收时,需要接收掉末尾的\n
if err != nil {
log.Fatalf("surName error:%v", err)
}
fmt.Printf("input new givenName:\t")
_, err = fmt.Scanf("%s", &givenName)
if err != nil {
log.Fatalf("givenName error:%v", err)
}
a.surName = surName
a.givenName = givenName
}

结构/方法的声明

type Employee struct {
    loanLimit float32
    Account
    // 声明时: Account: Account{columnName: value1, columnName2: value2}
}

func (e *Employee) AddCredits(v float32) {
	e.loanLimit += v
}

func (e *Employee) RemoveCredits(v float32) {
	e.loanLimit -= v
	if e.loanLimit < 0 {
		e.loanLimit = 0
	}
}
func (e Employee) CheckCredits() {
	fmt.Println(e)
}

// 重写fmt.Println()调用的String()方法,其实标准打印Employee对象。
func (e Employee) String() string {
	return fmt.Sprintf("Name: %s %s Credits:%5.2f", e.surName, e.givenName, e.loanLimit)
}

// 声明一个EmployeeTools的接口,服务于Employee类型对象
type EmployeeTools interface {
	ChangeName()
	AddCredits(v float32)
	RemoveCredits(v float32)
	CheckCredits()
}

func createEmployee(surname, givenName string) Employee {
	var e2 *Employee = new(Employee)  
    // new()方法生成一个指定数据类型的对象,返回其指针
	e2.surName, e2.givenName = surname, givenName
	return *e2
}

接口的使用

func EmployeeMethod() {
	var Students []Employee
	var namelist map[string]string = map[string]string{
		"Tom":  "meh",
		"Jeck": "marh",
		"John": "Mark",
	}
    // 使用for循环结合 createEmployee()函数批量生成
	for firstName, LastName := range namelist {
		Students = append(Students, createEmployee(firstName, LastName))
	}
    
	Students[0].ChangeName()
	Students[0].AddCredits(12.2)
	//Students[0].CheckCredits()

	for _, info := range Students {
		fmt.Println(info)
	}

}

 

标签:surName,string,示例,Students,Interfaces,Golang,Employee,givenName,fmt
From: https://www.cnblogs.com/onlyEcho123/p/17731203.html

相关文章

  • Golang 命名返回值和普通返回值
    1、概述在Go语言中,函数可以有命名返回值和普通(匿名)返回值。命名返回值会被视为定义在函数顶部的变量,并且在使用return语句返回时,不再必须在其后面指定参数名,也就是支持“裸”返回;而使用普通返回值时,使用return语句返回时,需要在其后面指定与普通返回值相同类型的参数名。实际......
  • Cobra眼睛蛇-强大的Golang CLI框架,快速上手的脚手架搭建项目工具,详细安装和使用
    Cobra眼睛蛇-强大的GolangCLI框架,快速上手的脚手架搭建项目工具,详细安装和使用。阅读过k8s源码的同学,应该都知道k8sScheduler、kubeadm、kubelet等核心组件的命令行交互全都是通过spf13写的Cobra库来实现。本文就来介绍下Cobra的相关概念及具体用法。关于Cobra是一个用于Go的CLI......
  • Python之html2text:将HTML转换为Markdown文档示例详解
    From: https://mp.weixin.qq.com/s/Pa3NDXOseyg0mIn869mbhQ-----------------------------------------------------------------------------------------hello大家好我是Monday,本文将详细介绍如何使用Python库中的html2text模块来实现将HTML转换为Markdown的操作,并提供示例......
  • golang 多生产者+多消费者模式
    参考https://gist.github.com/vitan/aedb628a40478cf8b6a33dc87a5ff52fhttps://gist.github.com/mochow13/74ee57078d58536929575ab481dd96931packagemainimport( "errors" "fmt" "math" "reflect" "sync")......
  • Golang 的骚操作:go:linkname
    背景在看源码时,一些源码方法没有方法体,难道说明这些方法为空?例如:time.Now调用的now(),time.Sleep,reflect.makechan//Providedbypackageruntime.funcnow()(secint64,nsecint32,monoint64)funcSleep(dDuration)funcmakechan(typ*rtype,sizeint)(ch......
  • golang 1.18 workspace mode
    why?为什么需要workspace历史发展和版本依赖的管理GOPATH最开始的模式开发者需要设置一个环境变量GOPATH,用于指定项目的工作空间。GOPATH是一个目录路径,其中包括了三个重要的子目录:src、bin和pkg通过goget命令,GOPATH/src下的相应目录中缺点:必须指定GOPATH......
  • golang 的循环导入
    内容来自对chatgpt的咨询循环导入概念在Go语言中,循环导入是一个需要避免的问题。它发生在两个或更多的包彼此导入对方,形成一个导入循环,导致编译器无法处理。例如,假设你有两个包,包A和包B。包A导入了包B,然后包B又导入了包A,这就形成了一个循环导入。在这种情况下,编译器将无法......
  • checkstyle教程:Maven多模块工程的 maven-checkstyle-plugin 配置示例
    <project>...<build><pluginManagement><plugins><!--compiler在maven声明周期内置,所以后面不用声明也可使用--><plugin><groupId>org.apache.maven.plugins......
  • ansible教程:with_fileglob基本用法示例
    with_fileglob是Ansible的循环迭代器,用于在任务中对文件进行模式匹配并迭代处理。它可以用于从本地文件系统中选择匹配特定模式的文件,并将它们作为迭代项传递给任务。以下是with_fileglob的基本用法示例:-name:Processfiles<module_name>:src:"{{item}}"with_......
  • golang 怎么使用接口中声明的方法
    假设你有一个golang的interface,里面声明了1个函数,怎么调用这个函数typeManinterface{ Eat(ctxcontext.Context,foodstring})error}使用方式创建结构体实现这个接口声明的方法,然后创建该结构体对象,调用方法案例首先,我们需要创建一个实现了这个接口的结构体:type......