概念

2022-07-05  本文已影响0人  Never_Yg
源文件
变量
表达式

Go仅有三种流控制语句,与大多数语言相比,都可称得上简单。

  1. if
  2. switch
  3. for
函数
方法
package main
  
type X int
  
func(x*X)inc() {         // 名称前的参数称作receiver,作用类似python self
    *x++ 
} 
  
func main() { 
   var x X
   x.inc() 
   println(x) 
}
package main
  
import( 
    "fmt" 
) 
  
type user struct{ 
   name string
   age byte
} 
  
func(u user)ToString()string{ 
   return fmt.Sprintf("%+v",u) 
} 
  
type manager struct{ 
   user
   title string
} 
  
func main() { 
   var m manager
   m.name= "Tom" 
   m.age=29
  
   println(m.ToString())     // 调用user.ToString() 
}

go语言中函数与方法重要的区别:

1.调用方式不一样

函数的调用方式:函数名(实参列表)

方法的调用方式:变量.方法名(实参列表)

2.对于普通函数,接受者为值类型时候,不能传递指针类型

func (p Person) Test(){
   p.Name="json"

}

func (p *Person) Test01(){
    p.Name="tom"
}

重要点:

1.不管调用形式如何,真正决定是值拷贝还是地址拷贝的,

看这个方法是和哪个类型绑定

2.方法如果是和值类型绑定,如(p Person),则是值拷贝,

如果是和指针类型绑定,如(p *Person)则是地址拷贝。

数据
  package main
  
import( 
    "fmt" 
) 
  
type user struct{          // 结构体类型 
   name string
   age byte
} 
  
type manager struct{ 
   user               // 匿名嵌入其他类型 
   title string
} 
  
func main() { 
   var m manager
  
   m.name= "Tom"           // 直接访问匿名字段的成员 
   m.age=29
   m.title= "CTO" 
  
   fmt.Println(m) 
}  
接口

go的接口是动态的,即一个数据结构无需事先声明实现了某接口。对比java等静态语言,需要明确声明实现了哪些接口。go也对接口的实现进行静态检查,不过,这种类似于javascript prototype的面向对象机制,也许给IDE带来了不小的困难?
go的接口命名规则似乎很有道理:Reader,Emitter等以er结尾的单词,值得其他语言借鉴。

并发

goroutines & channel是go的宝贵资产,极大方便了并发编程和线程通讯。

上一篇下一篇

猜你喜欢

热点阅读