一个例子总结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. mongo 索引 安全、备份与恢复

    一.索引 创建大量数据 for(i=0;i<100000;i++){ db.t1.insert({name:"test"+i,age:i}) } 数据查找性能分析 db.t1 ...

  2. python爬取免费优质IP归属地查询接口

    python爬取免费优质IP归属地查询接口 具体不表,我今天要做的工作就是: 需要将数据库中大量ip查询出起归属地 刚开始感觉好简单啊,毕竟只需要从百度找个免费接口然后来个python脚本跑一晚上就o ...

  3. Django整理1

    基本结构 │ db.sqlite3 ----------sqlie3数据库 │ manage.py │ ├─logres │ │ admin.py 后台,可以用很少量的代码就拥有一个强大的后台. │ ...

  4. 8. springboot logback 日志整合

    在resources目录下,新建log/logback-spring.xml文件,内容如下: <?xml version="1.0" encoding="UTF-8 ...

  5. pycharm中运行成功的python代码在jenkin中运行问题总结

    我们在用selenium+python完成了项目的UI自动化后,一般用jekins持续集成工具来定期运行,python程序在pycharm中编辑运行成功,但在jenkins中运行失败的两个问题,整理如 ...

  6. JAVA Freemarker + Word 模板 生成 Word 文档 (普通的变量替换,数据的循环,表格数据的循环,以及图片的东替换)

    1,最近有个需求,动态生成 Word 文当并供前端下载,网上找了一下,发现基本都是用 word 生成 xml 然后用模板替换变量的方式 1.1,这种方式虽然可行,但是生成的 xml 是在是太乱了,整理 ...

  7. python算法之插入排序

    插入排序非常类似于整扑克牌.在开始摸牌时,左手是空的,牌面朝下放在桌上.接着,一次从桌上摸起一张牌,并将它插入到左手一把牌中的正确位置上.为了找到这张牌的正确位置,要将它与手中已有的牌从右到左地进行比 ...

  8. python回归分析

    假设原函数由一个三角函数和一个线性项组成 import numpy as np import matplotlib.pyplot as plt %matplotlib inline def f(x): ...

  9. python杂记二

    1. 写文件可以直接使用print函数 file_name = open("file_name.txt","w") print("file conta ...

  10. [转]NSIS 制作安装包无法创建桌面快捷方式或无法删除开始菜单项

    用户将桌面文件转移了,如: D:\Doc\Desktop  ,安装程序后,桌面不会生成快捷方式, 或者卸载后,开始菜单中的文件也不会被删除 NSIS卸载后无法删除开始菜单中的内容原因:因为NSIS中使 ...