美文网首页
GO语言学习笔记2018-09-03

GO语言学习笔记2018-09-03

作者: pp_5793 | 来源:发表于2018-09-03 21:39 被阅读0次

1 Go语言中函数的声明如下: func 函数名 (变量名1,变量名2   变量类型1,变量名3  变量类型2)函数返回值类型{         函数体        }。类型总是在名字后面,先有名字才有的类型。

package main

import (

"fmt"

)

func eval(a, b int, op string) int {

        switch op {

                          case "+":

                        return a + b

                         case "-":

                       return a - b

                        case "*":

                      return a * b

                       case "/":

                     return a / b

                     default:

                    panic("unsupported operation" + op)

                }

}

func main() {

            fmt.Println(eval(3, 4, "*"))

}

输出结果为: 12

2 改良版  (可以解决panic带来的程序完全中断)

package main

import (

"fmt"

)

func eval(a, b int, op string) (int, error) //在这里函数返回类型为两个分别是int类型和error类型{

switch op {

            case "+":

           return a + b, nil //返回两个值

           case "-":

          return a - b, nil

           case "*":

           return a * b, nil

          case "/":

          return a / b, nil

         default:

         return 0, fmt.Errorf(

          "unsupported operation: %s", op)

          }

}

func div(a, b int) (q, r int) {

return a / b, a % b

}

func main() {

fmt.Println(eval(3, 4, "X"))

q, r := div(13, 5) //用q,r来接返回的值

fmt.Println(q, r)

}

输出结果为:   0   unsupported operation: X

2  3

3.函数返回可以返回多个值,在这里值得注意的是,只能用于简单的函数

现在我们再来看上面的加强版:

package main

import (

"fmt"

)

func eval(a, b int, op string) (int, error)//在这里函数返回类型为两个分别是int类型和error类型{

switch op {

            case "+":

           return a + b, nil //返回两个值

           case "-":

          return a - b, nil

           case "*":

           return a * b, nil

          case "/":

          return a / b, nil

         default:

return 0, fmt.Errorf(

          "unsupported operation: %s", op)

          }

}

func div(a, b int) (q, r int) {

return a / b, a % b

}

func 

func main() {

fmt.Println(eval(3, 4, "X"))

q, r := div(13, 5) //用q,r来接返回的值

fmt.Println(q, r)

}\

package main

import (

"fmt"

"math"

"reflect"

"runtime"

)

//在函数中调用函数,用a,b直接传入调用的函数中,并得到被调用的函数名

func apply(op func(int, int) int, a, b int) int {

p := reflect.ValueOf(op).Pointer()

opName := runtime.FuncForPC(p).Name()

fmt.Printf("Calling function %s with args "+"%d,%d\n", opName, a, b)

return op(a, b)

}

func div(a, b int) (q, r int) {

return a / b, a % b

}

func main() {

fmt.Println(eval(3, 4, "X"))

q, r := div(13, 5) //用q,r来接返回的值

fmt.Println(q, r)

fmt.Println(apply(

func(a int, b int) int {

return int(math.Pow(float64(a), float64(b)))//在这里我们调用pow函数,并根据apply函数返回类型把原本的float行式转成int 型。

}, 3, 4))

}

输出结果为: 0 unsupported operation: X

2 3

Calling function main.main.func1 with args 3,4

81//(3^4=81)

5 传入可变参数列表

package main

import (

"fmt"

)

func sum(numbers ...int) int {//这里的省略号表示传入的参数是无限的

                                          s := 0

                                         for i := range numbers {

                                        s += numbers[i]

}

               return s

}

func main() {

                     fmt.Println(sum(1, 2, 3, 4, 5))

}

输出结果为:15

相关文章

  • 笨办法学golang(三)

    这是Go语言学习笔记第三篇。 Go语言学习笔记参考书籍「Go语言圣经」以及Go官方标准库 Go语言基本类型主要有布...

  • 笨办法学golang(二)

    这是Go语言学习笔记的第二篇文章。 Go语言学习笔记参考书籍「Go语言编程」、Go官方标准库 前文提要 上篇文章中...

  • 笨办法学golang(四)

    这是Go语言学习笔记的第四篇 Go语言学习笔记参考书籍「Go语言圣经」以及Go官方标准库 数组 数组是指一系列同类...

  • Go 语言极速入门

    本系列文章主要是记录《Go 语言实战》和《Google 资深工程师深度讲解 Go 语言》的学习笔记。 Go 语言极...

  • GO语言学习笔记2018-09-03

    1 Go语言中函数的声明如下: func 函数名 (变量名1,变量名2 变量类型1,变量名3 变量类型2)函数返回...

  • Golang相关电子书

    Golang相关电子书,会不定期更新 Go语言程序设计 Go语言学习笔记.雨痕(详细书签) Go语言·云动力(云计...

  • Go语言学习笔记,持续更新...

    Go 学习笔记 Go语言变量和常量 1. 标识符 2. 关键字 Go语言中有25个关键字 break ...

  • Go并发调度

    本文是《循序渐进Go语言》的第六篇-Go并发调度。本文是学习《Go语言学习笔记》的并发调度一章,然后结合阅读源码的...

  • Golang聚合

    教程 Go Web 编程Go语言圣经(中文版) Tips Golang 学习笔记——交叉编译 & 部署Golang...

  • Go 语言学习技巧和编程思维

    Go 语言学习技巧和编程思维 一、了解 Go 语言 了解 Go 语言背景 学习 Go 语言,首先要了解 Go 语言...

网友评论

      本文标题:GO语言学习笔记2018-09-03

      本文链接:https://www.haomeiwen.com/subject/xkviwftx.html