一个例子总结go语言基本语法 
demo.go
 
package main
 
import (
    "fmt"
)
 
//结构体
type PersonD struct {
    id   int
    name string
}
 
//1.函数
 
//接收值类型参数的函数
func valueIntTest(a int) int{
    return a+10
}
 
//接收指针类型参数的函数
func pointIntTest(a *int) int{
    return *a+10
}
 
//2.方法
 
//接收者为值类型
func (p PersonD) valueShowName() {
    fmt.Println(p.name)
}
 
//接收者为指针类型
func (p *PersonD) pointShowName() {
    fmt.Println(p.name)
}
 
 
func main() {
    //1.函数测试
    //接收值类型参数的函数 测试
    a := 2
    fmt.Println("valueIntTest:",valueIntTest(a))
    //函数的参数为值类型,不能将指针作为参数传递
    //fmt.Println("valueIntTest:", valueIntTest(&a)) //cannot use &a (type *int) as type int in argument to valueIntTest
 
 
    //接收指针类型参数的函数 测试
    b := 5
    fmt.Println("pointIntTest:", pointIntTest(&b))
    // 当函数的参数为指针类型时,也不能直接将值类型作为参数传递
    //fmt.Println("pointIntTest:", pointIntTest(b)) //cannot use b (type int) as type *int in argument to pointIntTest
    
    //2.方法测试
    //接收者是值类型的方法 测试
    personValue := PersonD{101, "hongtao wang"}
    personValue.valueShowName()
    //可以用值类型对象调用指针类型方法
    personValue.pointShowName()
 
    //接收者是指针类型的方法 测试
    personPointer := &PersonD{102, "wanghongtao"}
    personPointer.pointShowName()
    //可用指针类型的对象调用值类型方法
    personPointer.valueShowName()
 
    /*
     总结:
 
     go语言函数和方法的不同
     1.定义上的不同(在函数名前面加上接收者就变成方法了)
     函数的定义
     func function_name( [parameter list] ) [return_types] {
         函数体
     }
     方法的定义
     func <接收者> function_name( [parameter list] ) [return_types] {
         方法体
     }
     2.调用的区别
      1)如果函数的参数是值类型,调用的时候不能将指针类型的值传入;同样如果函数的参数是指针类型,调用的不能将值类型的值传入
      2)如果方法的接收者是值类型,既可以用值类型的对象调用也可以用指针类型的对象调用;通过如果方法的接收者是指针类型,既可以用指针类型的对象调用也可以用值类型的对象调用
 
     go语言定义变量的几种方式
     1) a := 2   最好用的方式
     2) var a int = 2
     3) var a int
        a = 2
 
     go语言定义指针
     & 取出变量在内存中的存储地址(内存地址)
     * 定义指针(第一次使用的时候定义指针,第二次使用取出指针指向内存地址中的值)
     1) a := 2  定义变量
        var p *int  定义指针
        p = &a      把指针p指向变量a的内存地址
        fmt.Println(*p) 取出指针指向内存地址中的值
 
     go语言结构体定义
     type PersonD struct {
         id   int
         name string
     }
     1)结构体对象初始化
     personValue := PersonD{101, "hongtao wang"}
     2)结构体指针对象初始化
     personPointer := &PersonD{102, "wanghongtao"}
  */
  
}
 
运行语言文件 go  run demo.go

valueIntTest: 12
pointIntTest: 15
hongtao wang
hongtao wang
wanghongtao
wanghongtao

 

go语言基本语法的更多相关文章

  1. 【转】让Souce Insight支持多种语言的语法高亮:Python,Ruby,ARM汇编,windows脚本文件(bat/batch),PPC,SQL,TCL,Delphi等

    原文网址:http://www.crifan.com/source_insight_support_highlight_for_python_ruby_arm_batch_ppc_sql_tcl_de ...

  2. Java语言基本语法

    Java语言基本语法 一.标识符和关键字 标识符 在java语言中,用来标志类名.对象名.变量名.方法名.类型名.数组名.包名的有效字符序列,称为“标识符”: 标识符由字母.数字.下划线.美元符号组成 ...

  3. linux下常用语言的语法检查插件整理

    linux下常用语言的语法检查插件 可以结合vim语法检查插件syntastic使用,具体请参考syntastic使用说明 如php,sql,json,css,js,html,shell,c等语法插件 ...

  4. 初识 go 语言:语法

    目录 语法 for 循环 if 语句 switch 语句 defer 语句 defer 栈 结束 前言: go语言系列第二篇,主要讲述go语言的语法,如循环,if判断,swich语句,defer语句, ...

  5. Groovy语言学习--语法基础(5)

    至此groovy语言学习-语法基础就结束了,新的工作已经安排下来,要干活了. 对groovy了解到一定程度之后就可以在java项目中对其进行引入了.为此新建了一个微型的项目,个人觉得千言万语不如代码实 ...

  6. Groovy语言学习--语法基础(1)

    2018年11月末,从上家公司离职后进入现在的公司.进入项目以来,发现项目中有很多groovy脚本,以前没接触过groovy,抽时间系统地学一下,也方便后期项目的开发和维护. groovy和java的 ...

  7. C语言基础语法

    #include <stdio.h> int main() { int age; printf("input your age"); scanf("%d&qu ...

  8. 14 Go's Declaration Syntax go语言声明语法

    Go's Declaration Syntax go语言声明语法 7 July 2010 Introduction Newcomers to Go wonder why the declaration ...

  9. R语言基本语法

    R语言基本语法 基本数据类型 数据类型 向量 vector 矩阵 matrix 数组 array 数据框 data frame 因子 factor 列表 list 向量 单个数值(标量)没有单独的数据 ...

随机推荐

  1. 微服务架构基础之Service Mesh

    ServiceMesh(服务网格) 概念在社区里头非常火,有人提出 2018 年是 ServiceMesh 年,还有人提出 ServiceMesh 是下一代的微服务架构基础. 那么到底什么是 Serv ...

  2. 利用SUM打java补丁

    Upgrade Single JAVA Component Patch Level Using SUM Tool Hi Friends, I came across few posts/threads ...

  3. Spring MVC 注解之controller层

    第一层注解:@Controller 和 @RestController. 这两个注解的作用是:处理页面的HTTP请求,不同点 @RestController相当于@Controller +@Respo ...

  4. 201772020113李清华《面向对象程序设计(java)》第十周学习总结

    1.实验目的与要求 (1) 理解泛型概念: (2) 掌握泛型类的定义与使用: (3) 掌握泛型方法的声明与使用: (4) 掌握泛型接口的定义与实现: (5)了解泛型程序设计,理解其用途. 2.实验内容 ...

  5. Java 非递归实现 二叉树的前中后遍历以及层级遍历

    class MyBinaryTree<T> { BinaryNode<T> root; public MyBinaryTree() { root = new BinaryNod ...

  6. 云栖大会day1 下午

    下午参与的是创新创业专场 会议议程是 创新创业专场-2018阿里云创新中心年度盛典 13:30-14:10 阿里双创新征程 李中雨 阿里云创业孵化事业部总经理 14:10-14:40 人货场的渗透与重 ...

  7. 超详细的遗传算法(Genetic Algorithm)解析

    https://blog.csdn.net/u010451580/article/details/51178225 https://www.jianshu.com/p/c82f09adee8f 00 ...

  8. LevelDB源码分析-Bloom Filter

    Bloom Filter bloom filter是leveldb中用来在一个block中检测key是否存在的工具,主要在BloomFilterPolicy类中实现: class BloomFilte ...

  9. linux上部署jenkins步骤小记

    一.部署jdk环境 1.下载jdk包,解压,放在选定的位置,我本次jdk包放置在“/usr/local/java/jdk” 目录下 2.配置环境变量 1)打开/etc/profile文件,在命令框中输 ...

  10. [Ting's笔记Day9]活用套件Carrierwave gem:(4)使用Imagemagick修改图片大小

    前情提要: 这几天我都在实验Carrierwave这套图片上传套件,也顺利部署到Heroku架站正式环境了.:) 接下来我遇到了新的问题:要如何在上传的时候,让Carrierwave gem大型siz ...