go语言初体验(流程控制、range遍历、函数、结构体、面向对象)

一、流程控制

// mainpackage mainimport ("fmt")func main() {    x :=2switchx {case1:        fmt.Print("beifeng 1")case2:        fallthroughcase3:        fmt.Print("beifeng 2")default:        fmt.Print("beifeng 3")    }}

二、range遍历

// main.gopackagemainimport("fmt")funcmain(){    x :="zhangsan"for_, v := range x {        fmt.Printf("%c\n", v)    }}

三、函数

左函数右返回值中间若干传入参数

*传指针的值,&指针的地址

函数是一等公民,也可以作为值、类型

3.1 函数传值与传指针

// func_1package mainimport("fmt")funcswap(a, bint) (int,int){returnb, a}funcadd(a *int) *int{    *a = *a +1returna}funcmain(){    a :=1add(&a)    fmt.Printf("%d", a)}

3.2 匿名函数

函数作为具体的类型;变量指向具体的函数

/ main.gopackage mainimport("fmt")funcmain(){type sumfunc(x, yint)intvarf sum= func(x, yint)int{returnx + y    }    fmt.Println(f(3,4))}

3.3 函数中传入切片参数

// fun_2packagemainimport("fmt")//求和函数,传入一个动态整型数组funcgetSum(num []int)int{//初始化sum变量sum :=0//遍历数组,求和fori :=0; i < len(num); i++ {        sum += num[i]    }//返回sum值returnsum}funcmain(){//初始化num整型切片变量num := []int{1,2,3,4,5}    fmt.Print(getSum(num))}

3.4 defer函数

defer延迟的意思;后进先去

加入defer 的代码语句将会最后执行,同时也能保存defer后面的代码能够执行到

场景1:资源关闭

// defer.gopackagemainimport("fmt")funcmain(){fori :=1; i <=5; i++ {        defer fmt.Println(i)    }}

3.5 pannic

Go的异常处理机制

Panic 捕获异常,程序挂

// panic.gopackagemainimport("fmt")funcmain(){deferfunc(){        fmt.Println("After panic from defer !")//panic之后 defer里面的依然可以得到执行}()    panic("I am panicing!")    fmt.Println("After panic!")//panic后面得不到执行}

四、结构体struct

Go语言没有private、protected、public这样的关键字。

某个符号对其他包(package)可见(即可以访问),

需要将该符号定义为以大写字母开头。 APP定制开发找上海捌跃网络科技有限公司

// main.gopackage mainimport("fmt")type Person struct{    namestringageint}type Studentstruct{Person    ageintspecialitystring}funcmain(){    student := Student{Person{"zhangsan",25},30,"maths"}    fmt.Printf("%v %v", student.Person.age, student.age)}

五、面向对象

类与方法

Golang:"A method is a function with an implicit first argument, called a receiver.“

func (r ReceiverType) funcName(parameters) (results)

类型和作用在它上面定义的方法必须在同一个包里定义,这就是为什么不能在 int、float 或类似这些的类型上定义方法。

类的初始化:point :=new(Point)

point :=&Point{}

point :=&Point{x:100, y:100}

point := Point{}

// mainpackage mainimport("fmt")/*func compare(a, b int) bool {

    return a < b

}*///定义一个结构体Pointtype Pointstruct{    px float32    py float32}//接收者point,接收类型结构体指针Point,方法setXY(),传入参数px,pyfunc (point *Point) setXY(px, py float32) {//定义接收者属性point.px = px    point.py = py}//接收者point 接收类型结构体指针Point,方法getxy(),返回两个float32数据类型的值func (point *Point) getXY() (float32, float32) {//返回x,y值returnpoint.px, point.py}//定义一个结构体 Integertype Integerstruct{//定义结构体的属性valueint}funcmain(){//初始化一个类point :=new(Point)    point.setXY(1.23,4.56)    px, py := point.getXY()    fmt.Print(px, py)}

5.1 面向对象之继承、接口、接口赋值、any类型、类型查询

在Go语言中,一个类只需要实现了接口要求的所有函数,我们就说这个类实现了该接口。

接口赋值有两种方式:1、将对象实例赋值给接口;2、将一个接口赋值给另一个接口

Go语言中任何对象实例都满足空接口interface{},interface{}可以接收所有数据类型

package mainimport"fmt"//定义一个Person结构体type Personstruct{    namestringageint}//接收者person,接收结构体类型Person, 方法getNameAndAge() 返回string,int值func (person Person) getNameAndAge() (string,int) {returnperson.name, person.age}type Studentstruct{    Person    specialitystring}func (student Student) getSpeciality()string{returnstudent.speciality}//定义一个Animal接口,实现的方法有Fly() Run()type Animalinterface{    Fly()    Run()}type Animal2interface{    Fly()}type Birdstruct{}//通过接收者实现接口的方法//接收者bird实现Fly()方法func (bird Bird) Fly() {    fmt.Println("Bird is flying!!!!")}//接收者bird实现Run()方法func (bird Bird) Run() {    fmt.Println("Bird is running!!!!")}funcmain(){    student :=new(Student)    student.name ="zhangsan"student.age =26name, age := student.getNameAndAge()    student.speciality ="computer"speciality := student.getSpeciality()    fmt.Println(name, age, speciality)//定义animal接口varanimal Animal//定义animal2接口varanimal2 Animal2//初始化一个对象birdbird :=new(Bird)//将对象实例bird赋值给animal接口animal = bird//将animal接口赋值给animal2接口animal2 = animal////animal = bird //把类实例直接赋值给接口//animal2 = birdanimal2.Fly()    animal2.Fly()    animal.Fly()    animal.Run()//定义一个any类型的变量v1varv1interface{}//赋值v1 ="zhangsan"switchv1.(type) {caseint:casefloat32:casefloat64:        fmt.Println("this is float64")casestring:        fmt.Println("this is string")    }}


转自:http://blog.51cto.com/huwho/2316356

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容