zoukankan      html  css  js  c++  java
  • go语言 方法

    go 语言中没有类,但是是有方法。

    方法的定义:

      func (recevier type) methodName(参数列表)(返回值列表){ }

    type School struct {
    	Name string
    	Addr string
    }
    
    func NewSchool(name, addr string) *School {
    	return &School {
    		Name:name,
    		Addr:addr,
    	}
    }
    
    func (s *School) GetName() string {  //定义方法  s 接收者类型    GetName方法名字
    	return s.Name
    }
    
    func (s *School) GetAddr() string {
    	return s.Addr
    }
    func testmodel(){
    	school := NewSchool("北京大学","北京海淀区")
    	fmt.Println(school.GetAddr()) //school.GetAddr 方法的调用
    	fmt.Println(school.Getname())
    
    }
    //运行结果
    北京海淀区
    北京大学
    

      方法和函数有什么区别呢?

    函数可以说谁都可以调用,而方法只有接收者类型相同的才可以调用。当然了,定义上也是不同的,方法是包含了接收者的函数。

    下面演示一个例子,说明方法接收者值传递和引用传递的区别

    package main
    
    import (
    	"fmt"
    )
    
    type Int int                //自定义类型Int
    
    func (i *Int) add(a, b int) {   //接收者类型是Int类型的指针,引用类型
    	*i = Int(a + b)
    	return
    }
    func (i Int) Add(a, b int) {    //接收者类型是Int类型,值类型
    	i = Int(a + b)
    	return
    }
    func main() {
    	var b Int
    	var c Int
    	b.add(100, 200)  //300     些时传入的接者i是&b,就是变量b的地址相当于(&b).add(100,200),add方法内部:*(&b)=Int(100+200) 就是这个i指针指向的变量b的值改变为300
    	fmt.Println(b)
    	c.Add(100,200)    //值传递不带回主函数
    	fmt.Println(c) // 0
    	
    }
    

      

  • 相关阅读:
    shutil文件去重模块
    Nexus构建npm、yum、maven私有仓库
    centos7添加自定义服务到systemctl
    Sonatype nuxus私有仓库介绍
    rancher单节点备份和恢复
    rancher证书过期X509:certificate has expired or is not ye valid
    清理docker日志
    mysql 9 hash索引和B+tree索引的区别
    mysql 8 索引
    mysql 7 慢查询+慢查询工具
  • 原文地址:https://www.cnblogs.com/wanghaijun999/p/8157142.html
Copyright © 2011-2022 走看看