`
sillycat
  • 浏览: 2539896 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Golang(3)Control Flow and Functions

 
阅读更多

Golang(3)Control Flow and Functions

2.3 Control Flow and Functions
Control Flow
if x := computedValue(); x > 10 {
     …snip...
}else{
     …snip...
}

For example:
     if x := 100 / 3; x > 10 {
          fmt.Println("x is greater than 10, x = ", x)
     } else {
          fmt.Println("x is less than 10, x = ", x)
     }

The console output is as follow:
x is greater than 10, x =  33

if integer == 3 {

}else if integer < 3{

}else {

}

goto
I hope I will not use this key word.

for
for expression1; expression2; expression3 {}

sum:=0;
for index:=0;index<10;index++ {
     sum += index
}

And
sum: =1
for ; sum < 1000; {
     sum +=sum
}

Or alternatively
sum := 1
for sum < 100 {
     sum +=sum
}

break and continue

for k, v:= range map {
     //map’s key k
     //map’s value v
}

If we define k and v and we did not use them both, it will complain Error. So we need to use _ instead.

for _, v :=range map {
     fmt.Println(“map’s value: “, v)
}

switch
switch sExpr {
case expr1:
     some instructions
case expr2:
     some other instructions
case expr3:
     some other instructions
default:
     other code
}

For example:
i := 10
switch i {
case 1:
     …
case 2, 3, 4:
     …
default:
     ...
}

There is new stuff fallthrough, it will execute the current case codes block and continue other case statements.

Functions
func funcName(input1 type1, input2 type2) (output1 type1, output2 type2) {
     return value1, value2
}

func max(a, b int) int {
     if a > b {
          return a
     }
     return b
}

Multiple Return Values
func SumAndProduct(a, b int) (int, int) {
     return a+b, a*b
}

function main(){
     x := 3
     y := 4
     xPlusy, xTimesy : = SumAndProduct(x, y)
}

Or we can define the multiple return values function as follow, give the return value one name
func SumAndProduct(a, b int) (add int, multiplied int) {
     add = a + b
     multiplied  = a*b
     return
}

Dynamic Parameters
func myfunc(arg …int) {}

Pass the Value or the Reference (Pointer)
Pass the Value, that is the copy of the parameter, so it will not change the origin object
func add1(a int) int{
     a = a+1
     return a
}

x :=3
x1:=add1(x)
x1 will be 4
x will still be 3

Pass the Pointer, it will change the original object
func add1(a *int) int {
     *a = *a +1
     return *a
}

x:=3
x1:=add1(&x) //&x is the address of x
x1 will be 4
x will be 4 too.

defer
Something as follow
func ReadWrite() bool {
     file.Open(‘file’)
     defer file.Close()
     if failureX {
          return false
     }
     if failureY {
          return false
     }
     return true
}

defer run as FILO,not FIFO

Functions are Variables
type can define the function, function is variable. For example:
type typeName func(input1 inputType1, input2 inputType2 [, …]) (result1 resultTyp1 [, ...])

We can define a function type, and use this function as a parameters.

package main

import "fmt"

type testInt func(int) bool // 声明了一个函数类型

func isOdd(integer int) bool {
     if integer%2 == 0 {
          return false
     }
     return true
}

func isEven(integer int) bool {
     if integer%2 == 0 {
          return true
     }
     return false
}

func filter(slice []int, f testInt) []int {
     var result []int
     for _, value := range slice {
          if f(value) {
               result = append(result, value)
          }
     }
     return result
}

func main() {
     slice := []int{1, 2, 3, 4, 5, 7}
     fmt.Println("slice = ", slice)
     odd := filter(slice, isOdd) 
     fmt.Println("Odd elements of slice are: ", odd)
     even := filter(slice, isEven)
     fmt.Println("Even elements of slice are: ", even)
}

The console output from >go run src/com/sillycat/easygoapp/main.go will be as follow:
slice =  [1 2 3 4 5 7] Odd elements of slice are:  [1 3 5 7] Even elements of slice are:  [2 4]

Panic and Recover
…snip…

main and init functions
init can be used in any package, main can only be used in package main.
init will be called every time when we use this function. main will be called in package main automatically.

import
import(
     . “fmt"
)

fmt.Println(“”) ——> Println(“”)

import(
     f “fmt"
)
fmt.Println(“”) ———> f.Println(“")

import(
     _ “github.com/ziutek/mysql/godrv"
)
Call the init method in that package function.


References:
https://github.com/astaxie/build-web-application-with-golang/blob/master/ebook/02.3.md

 

分享到:
评论

相关推荐

    golang环境配置及对接s3对象存储demo手册及源代码

    3. **golang-demo项目** - **golang-demo使用手册.docx**:这个文档很可能是详细指导如何使用`golang-demo.go`源代码的指南,包括配置步骤、调用API的示例以及可能出现的问题和解决方案。建议仔细阅读,以便更好地...

    基于Flow的Go(Golang)编程微框架flowbase.zip

    基于 Flow 的 Go(Golang)编程微框架。FlowBase的目的,是就在Golang现有FBP状primives的顶部提供刚好足够的功能,而不只是作为一个全面的框架(具有有界缓冲剂,异步去例程信道),以使开发数据处理应用它。因此,...

    goflow:纯粹的golang工作流程

    【goflow:纯粹的Golang工作流程】 在软件开发中,工作流程管理是一个关键环节,它涉及到任务的调度、处理顺序以及错误处理等。`goflow` 是一个专门针对Golang(Go语言)设计的工作流程库,旨在提供一种简单、高效的...

    golang使用bass库播放mp3文件

    在Golang中,如果你想要...3. 在Golang中使用cgo编译C代码并创建Go包装器。 4. 在Go代码中调用包装器函数播放MP3文件。 记得,这只是一个基本的示例,实际使用时可能需要处理错误、管理资源以及根据具体需求进行优化。

    Packt.Learn.Data.Structures.and.Algorithms.with.Golang.1789618509.rar

    《Learn Data Structures and Algorithms with Golang》是一本专注于使用Golang语言学习数据结构和算法的电子书,旨在帮助读者深入理解这两个编程领域的核心概念。Golang,也被称为Go语言,是由Google开发的一种静态...

    goflow:基于Golang的高性能,可扩展和分布式工作流框架

    基于Golang的高性能,可扩展和分布式工作流框架 它允许以编程方式将分布式工作流编写为任务的有向无环图(DAG)。 GoFlow通过均匀分配负载在一系列Flow Worker上执行任务 安装它 安装GoFlow go mod init myflow go ...

    国密SM3算法Golang实现

    这是国密SM3算法的Golang实现,其中包括了测试,和一些Debug信息。

    flow, 在 go ( golang ) 中,一个小型的开源工作流引擎.zip

    flow, 在 go ( golang ) 中,一个小型的开源工作流引擎 状态flow 正逐步向发布,但还无法使用 ! flowflow 是一个小型开源的( Apache 2 -licensed ) 工作流引擎,它在。什么是 flow作为工作流引擎,flow 打算帮助...

    goflow:用于RapidPro的Golang Flow Engine

    基本用法import ( "github.com/nyaruka/goflow/assets/static" "github.com/nyaruka/goflow/flows" "github.com/nyaruka/goflow/flows/engine" "github.com/nyaruka/goflow/utils")env := envs ....

    基于Golang的kis-flow流式计算框架设计源码

    该项目为基于Golang编写的流式计算框架——KisFlow(Keep It Simple Flow)的设计源码。该框架致力于简化计算流程,强调简洁、清晰、流畅的工作方式。源码文件共计88个,包括60个Go语言源文件、19个YAML配置文件、5...

    pycharm2018.3之golang插件

    在`pycharm2018.3之golang插件`这个主题中,我们将探讨如何在PyCharm 2018.3版本上安装和配置Golang插件,以便在这款强大的Python IDE中编写和调试Go代码。 首先,我们需要了解为什么在PyCharm 2018.3这个特定版本...

    Go-weixin-golang-sdk微信golang工具包

    weixin-golang-sdk 微信golang工具包

    golang接受 kafka 日志数据 格式转化后 保存到clickhouse 批量 高速 结构化日志保存

    后端服务把json日志保存到文件 ...golang服务 从kafka接收日志数据 经过日志格式的清洗与转化后 保存到clickhouse数据库 供检索分析使用 这是一个完整的日志收集循环 适合一个小型分布式或单体服务使用

    go-pop3:Golang POP3库

    Golang POP3库。 实现基于 该文档可以在以下位置找到: : 可以将POP3客户端配置为对每个命令使用超时。 要初始化POP3客户端并进行配置: c, err = pop3.Dial(address, pop3.UseTLS(tlsConfig), pop3....

    golang解析数字证书

    2. **公钥和私钥(Public Key and Private Key)**:在RSA加密算法中,公钥用于加密,私钥用于解密。在PKCS#1中,私钥通常以PEM编码存储,而公钥可以是PEM或DER编码。 3. **PKCS#1**:Public-Key Cryptography ...

    Pycharm Golang插件 jar

    标题中的"Pycharm Golang插件 jar"指的是在PyCharm这款流行的Python集成开发环境中安装Golang编程语言的扩展插件。PyCharm是由JetBrains公司开发的一款强大的IDE,它支持多种编程语言,包括Python、Go等。由于Golang...

    Golang 1.18.10 Windows安装包

    Golang 1.18.10 Windows安装包。Golang 1.18.10 Windows安装包。Golang 1.18.10 Windows安装包。Golang 1.18.10 Windows安装包。Golang 1.18.10 Windows安装包。Golang 1.18.10 Windows安装包。Golang 1.18.10 ...

    golang_http_client

    golang_http_client

    golang windowns界面开发框架

    在编程领域,Go语言(Golang)以其高效、简洁和并发特性受到了许多开发者的青睐。在Windows平台上,尽管Go语言最初的设计目标并非图形用户界面(GUI)开发,但随着技术的发展,已经出现了一些优秀的框架使得Go语言也...

    Golang Windows 1.19.1版本安装包

    Golang Windows 1.19.1版本安装包

Global site tag (gtag.js) - Google Analytics