go的学习记录(一)

haust_wang · · 1342 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

近来由于部门想统一所有项目的服务端开发,即以后所有新开的项目均采用同一套框架,这样有助于开发人员在参与多项目开发时完成低成本转换。因此,技术方面通过由技术总监指定了一个同事作为该方面的推动者,推动以后新项目的语言与框架的选型。从目前的意见来看,语言选型可能往go语言方面转换。因此本人也开始了go的学习。在学习过程中也发现了很多好玩的东西,权作记录:

一、包的定义与引用

go语言同样可以像java等语言定义包,但go对于包的定义是有严格要求的:

1. 在同一文件夹下只能定义同一个包的代码。如以下结构树中,bubble.go,insert.go等文件的代码定义均使用package test_sort

src/
└── test_sort
    ├── bubble.go
    ├── insert.go
    ├── quick.go
    └── selection.go

2. 由于go语言的包的路径检索是通过GOPATH环境变量来指定的,因此即使是自己开发的包,也必须在GOPATH环境变量中指明才能使用。如使用命令:export GOPATH=$GOPATH:/home/haust/go或者在配置文件里添加该环境变量,Linux下在用户根目录下添加上述语句,Windows下在系统环境变量里添加GOPATH变量并定义内容或直接修改现有环境变量

3. 所引用的包的目录必须包含src目录,并且所有的包均包含在src目录下才可以正确引用,否则编译代码时会提示无法找到包的定义

4. 在代码中引用包通过import标识符指定,如果是单个包引用,可以直接使用import "fmt"这种方式,但若是多个包则必须使用:

import ( "fmt"                         import ( 

"math/rand") 或者"fmt"

"math/rand"

)

即每个包必须换行引用,否则程序将会报错

二、变量的声明与赋值

先贴几行代码:

var a int 
a = 3            	//a 的先声明后赋值
var b int = 5     //b 在声明的同时赋值
c := 4               //c 声明且赋值
在上述的三种声明中,需要特别注意的是赋值符号的区别,对于添加var标志声明的变量和使用:=方式生命的变量不尽相同,后续在介绍数组的使用的时候会给大家展示

三、函数的定义

1. 在go中的包里的函数定义中对外可见函数名首字母必须为大写字母,其他函数名不做要求,详见类型的定义

2. 函数定义必须以func标识符开始

3. 函数的返回值定义在参数列表之后

4. 函数可以有多个返回值,但多个返回值时必须用()括起来

5. 在同一个包内,不能出现同名的函数

如:func Retself(a int) int//单返回值声明

func Retself(a int, b int) (int, int)//多返回值声明

四、类型定义

在go中虽然没有类,但还是同样会有类型定义,该类型的定义方式类同C++的类,但少有区别,如下:

type Rect struct {

width, height int

}

1. 类型的初始化是非常简单的,在类型名的后面使用{}包住初始化列表即可。在go中支持两种方式初始化

(1)具名初始化,如 rect := Rect{width:3, height:4}。这种初始化比较简单也比较容易理解

(2)匿名初始化,如 rect := Rect{3, 4}。这种初始化方式是按照初始化列表和类型的成员一一对应初始化的,即产生的结果是width = 3, height = 4

2. 类型成员函数的定义

在go的类型定义中,同样支持成员函数,以下为例:

func (rect Rect) area() int {

return rect.width * rect.height

}

其调用方式很简单:即 rect.area()调用即可

五、接口定义

定义参考如下:

type Shape interface {
       perim() int
}

type Rect struct {
       width, height int
}

type Trian struct {
       a, b, c int
}

func (r Rect) perim() int {
       return 2*width + 2*height
}

func (t Trian) perim() int {
       return a + b + c
}

在使用中也是异常简单的,如下:

func CalcPerim(s Shape) int {
      return s.perim()
}

func main() {
      rect := Rect{3, 4}
      trian := Trian{1, 2, 3}

      CalcPerim(rect)
      CalcPerim(trian)
}





有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:haust_wang

查看原文:go的学习记录(一)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1342 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传