go语言基本语法

一个例子总结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

 
上一篇:二十四 Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略—scrapy架构源码分析图


下一篇:Scrapy架构及其组件之间的交互