??斗地主捕鱼电竞提现秒到 广告位招租 - 15元/月全站展示
??支付宝搜索579087183领大额红包 ??伍彩集团官网直营彩票
??好待遇→招代理 ??伍彩集团官网直营彩票
??络茄网 广告位招租 - 15元/月全站展示
go语言初体验(流程控制、range遍历、函数、结构体、面向对象)

转载   PowerMichael   2018-11-13   浏览量:19


一、流程控制

// main
package main

import (
    "fmt"
)

func main() {
    x := 2
    switch x {
    case 1:
        fmt.Print("beifeng 1")
    case 2:
        fallthrough
    case 3:
        fmt.Print("beifeng 2")
    default:
        fmt.Print("beifeng 3")
    }
}

二、range遍历

// main.go
package main

import (
    "fmt"
)

func main() {
    x := "zhangsan"

    for _, v := range x {
        fmt.Printf("%c\n", v)
    }
}

三、函数

左函数右返回值中间若干传入参数
*传指针的值,&指针的地址
函数是一等公民,也可以作为值、类型

3.1 函数传值与传指针

// func_1
package main

import (
    "fmt"
)

func swap(a, b int) (int, int) {
    return b, a
}

func add(a *int) *int {
    *a = *a + 1
    return a
}

func main() {
    a := 1
    add(&a)
    fmt.Printf("%d", a)
}

3.2 匿名函数

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

/ main.go
package main

import (
    "fmt"
)

func main() {
    type sum func(x, y int) int
    var f sum = func(x, y int) int {
        return x + y
    }

    fmt.Println(f(3, 4))
}

3.3 函数中传入切片参数

// fun_2
package main

import (
    "fmt"
)
//求和函数,传入一个动态整型数组
func getSum(num []int) int {
    //初始化sum变量
    sum := 0
    //遍历数组,求和
    for i := 0; i < len(num); i++ {
        sum += num[i]
    }
    //返回sum值
    return sum
}

func main() {
    //初始化num整型切片变量
    num := []int{1, 2, 3, 4, 5}
    fmt.Print(getSum(num))
}

3.4 defer函数

defer延迟的意思;后进先去
加入defer 的代码语句将会最后执行,同时也能保存defer后面的代码能够执行到
场景1:资源关闭

// defer.go
package main

import (
    "fmt"
)

func main() {
    for i := 1; i <= 5; i++ {
        defer fmt.Println(i)
    }
}

3.5 pannic

Go的异常处理机制
Panic 捕获异常,程序挂

// panic.go
package main

import (
    "fmt"
)

func main() {
    defer func() {
        fmt.Println("After panic from defer !") //panic之后 defer里面的依然可以得到执行
    }()

    panic("I am panicing!")

    fmt.Println("After panic!") //panic后面得不到执行
}

四、结构体struct

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

某个符号对其他包(package)可见(即可以访问),
需要将该符号定义为以大写字母开头。

// main.go
package main

import (
    "fmt"
)

type Person struct {
    name string
    age  int
}

type Student struct {
    Person
    age        int
    speciality string
}

func main() {
    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{}

// main
package main

import (
    "fmt"
)

/*func compare(a, b int) bool {
    return a < b
}*/

//定义一个结构体Point
type Point struct {
    px float32
    py float32
}

//接收者point,接收类型结构体指针Point,方法setXY(),传入参数px,py
func (point *Point) setXY(px, py float32) {
    //定义接收者属性
    point.px = px
    point.py = py
}

//接收者point 接收类型结构体指针Point,方法getxy(),返回两个float32数据类型的值
func (point *Point) getXY() (float32, float32) {
    //返回x,y值
    return point.px, point.py
}

//定义一个结构体 Integer
type Integer struct {
    //定义结构体的属性
    value int
}

func main() {
    //初始化一个类
    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 main

import "fmt"

//定义一个Person结构体
type Person struct {
    name string
    age  int
}

//接收者person,接收结构体类型Person, 方法getNameAndAge() 返回string,int值
func (person Person) getNameAndAge() (string, int) {
    return person.name, person.age
}

type Student struct {
    Person
    speciality string
}

func (student Student) getSpeciality() string {
    return student.speciality
}

//定义一个Animal接口,实现的方法有Fly() Run()
type Animal interface {
    Fly()
    Run()
}

type Animal2 interface {
    Fly()
}

type Bird struct {
}

//通过接收者实现接口的方法
//接收者bird实现Fly()方法
func (bird Bird) Fly() {
    fmt.Println("Bird is flying!!!!")
}

//接收者bird实现Run()方法
func (bird Bird) Run() {
    fmt.Println("Bird is running!!!!")
}

func main() {
    student := new(Student)
    student.name = "zhangsan"
    student.age = 26

    name, age := student.getNameAndAge()
    student.speciality = "computer"
    speciality := student.getSpeciality()

    fmt.Println(name, age, speciality)

    //定义animal接口
    var animal Animal
    //定义animal2接口
    var animal2 Animal2

    //初始化一个对象bird
    bird := new(Bird)
    //将对象实例bird赋值给animal接口
    animal = bird
    //将animal接口赋值给animal2接口
    animal2 = animal
    //

    //animal = bird //把类实例直接赋值给接口
    //animal2 = bird
    animal2.Fly()
    animal2.Fly()
    animal.Fly()
    animal.Run()

    //定义一个any类型的变量v1
    var v1 interface{}
    //赋值
    v1 = "zhangsan"

    switch v1.(type) {
    case int:
    case float32:
    case float64:
        fmt.Println("this is float64")
    case string:
        fmt.Println("this is string")
    }
}

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

招聘 不方便扫码就复制添加关注:程序员招聘谷,微信号:jobs1024


下一篇:

使用Go来模拟Java中的接口 实现类
针对项目中,相同的流程业务进行重构,使用Go来简单模拟Java中的接口,实现类的方式进行重构。分享一简单例子:packagemain//模拟java中的接口,实现类import"fmt"//声明一个接口,typeworkthreadinterface{do(namestring)}//传入的wt的子类不同,do方法执行的逻辑也不同funcHandle(wtworkthread,namestring
md5加密算法原理及其GO语言实现
md5加密算法原理及其GO语言实现MD5讯息摘要演算法(英语:MD5Message-DigestAlgorithm),一种被广泛使用的密码杂凑函数,可以产生出一个128位元(16位元组)的散列值(hashvalue),用于确保信息传输完整一致。go调用md5方法新建md5.go文件,代码如下:packagemainimport(&quot;fmt&quot;...
Go语言中时间函数及定时器的使用
Go语言中时间函数的使用,定时器的实现
Golang之wait.Until 简单测试用例
测试目的,验证wait.Until的用法//测试wait.Until()的用途packagemainimport("fmt""k8s.io/apimachinery/pkg/util/wait""time")typestopstruct{}funcmain(){stopCh:=make(chanstruct{})//初始化一个计数器i:=0gowait.Until(func(){fmt.Print
各种加密算法在Go语言中的使用
实际编程过程经?;嵊龅绞褂酶髦旨用芩惴?,本文以代码详细介绍了在Go语言中如何使用MD5、SHA256、RIPEMD160、DES、3DES、AES进行加密
Go语言之如何给*int32类型赋值
直接上代码:packagemainimport"fmt"funcmain(){varnum*int32variint32=5//针对*int32的,先创建一个i类型,然后取i的地址,赋值给*int32num=&ifmt.Println("=====>:\t",num)fmt.Println("=====>:\t",*num)}运行结果:=====>:0xc04206408
go语言学习之路(二)——go语言进行微信公众号开发
学习教程地址://www.imooc.com/topic/golang?mc_marking=ed9ea9bd605fe0066c71d80cc8603806&amp;amp;mc_channel=bdgoyyzt&amp;amp;audience=230227github地址:https://github.com/leeeboo/leeeboo.github.com微信公众号开发文档:https://...
golang基础知识学习之双链表、别名、自定义构造函数
golang基础知识学习之双链表、别名、自定义构造函数。
golang基础知识学习之结构体tag、匿名字段
golang基础知识学习之结构体tag、匿名字段。
golang互斥锁、读写锁代码实例
golang互斥锁、读写锁代码实例?;コ馑浩渲蠱utex为互斥锁,Lock()加锁,Unlock()解锁,使用Lock()加锁后,便不能再次对其进行加锁,直到利用Unlock()解锁对其解锁后,才能再次加锁.适用于读写不确定场景,即读写次数没有明显的区别,并且只允许只有一个读或者写的场景