go学习
2021/10/4 6:13:19
本文主要是介绍go学习,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.包
每个go程序都是由包组成的
2.变量
var
语句用于声明一个变量列表,跟函数的参数列表一样,类型在最后- var 语句可以出现在包或函数级别
package main import "fmt" var c, python, java bool func main() { var i int fmt.Println(i, c, python, java) }
2.1 变量的初始化
- 变量声明可以包含初始值,每个变量对应一个。
- 如果初始化值已存在,则可以省略类型;变量会从初始值中获得类型
短变量声明 - 在函数中,简洁赋值语句 := 可在类型明确的地方代替 var 声明。
- 函数外的每个语句都必须以关键字开始(var, func 等等),因此 := 结构不能在函数外使用
2.2 基本类型
bool string int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr byte //uint的别名 rune //int32的别名 float32 float64 complex64 complex128 package main
import ( "fmt" "math/cmplx" ) var ( ToBe bool = false MaxInt uint64 = 1<<64 - 1 z complex128 = cmplx.Sqrt(-5 + 12i) ) func main() { fmt.Printf("Type: %T Value: %v\n", ToBe, ToBe) fmt.Printf("Type: %T Value: %v\n", MaxInt, MaxInt) fmt.Printf("Type: %T Value: %v\n", z, z) }
2.3 零值
-
没有明确初始值的变量声明会被赋予它们的 零值。
-
零值是:
数值类型为 0,
布尔类型为 false,
字符串为 ""(空字符串)
package main import "fmt" func main() { var i int var f float64 var b bool var s string fmt.Printf("%v %v %v %q\n", i, f, b, s) }
2.4 类型转换
表达式 T(v) 将值 v 转换为类型 T。
一些关于数值的转换:
var i int = 42 var f float64 = float64(i) var u uint = uint(f)
2.5 常量
- 常量的声明与变量类似,只不过是使用 const 关键字
- 常量可以是字符、字符串、布尔值或数值
- 常量不能用 := 语法声明
const name = "scyrc" const sex = "male"
3.函数
func add(x int ,y int) int { return x +y } // 省略参数类型 func add (x, y int) int { return x + y } //多值返回 func swap(x ,y string) (string, string){ return y, x } // 命名返回值 func split(sum int)(x, y int){ x = sum* 4/9 y = sum -x return }
4.1 控制流程语句
4.1for循环
Go 只有一种循环结构:for 循环。
基本的 for 循环由三部分组成,它们用分号隔开:
初始化语句:在第一次迭代前执行
条件表达式:在每次迭代前求值
后置语句:在每次迭代的结尾执行
初始化语句通常为一句短变量声明,该变量声明仅在 for 语句的作用域中可见。
一旦条件表达式的布尔值为 false,循环迭代就会终止
package main import( "fmt" ) func main(){ var sum =0 for var i=0; i<10; i++{ sum += i } fmt.Println(i) }
4.2 if
Go 的 if 语句与 for 循环类似,表达式外无需小括号 ( ) ,而大括号 { } 则是必须的
package main import ( "fmt" "math" ) func sqrt(x float64) string { if x < 0 { return sqrt(-x) + "i" } return fmt.Sprint(math.Sqrt(x)) } func main() { fmt.Println(sqrt(2), sqrt(-4)) }
同 for 一样, if 语句可以在条件表达式前执行一个简单的语句。
该语句声明的变量作用域仅在 if 之内
func pow(x, n, lim float64) float64 { if v := math.Pow(x, n); v < lim { return v } return lim }
4.3 switch
- switch 是编写一连串 if - else 语句的简便方法。它运行第一个值等于条件表达式的 case 语句。
- Go 的 switch 语句类似于 C、C++、Java、JavaScript 和 PHP 中的,不过 Go 只运行选定的 case,而非之后所有的 case。 实际上,Go 自动提供了在这些语言中每个 case 后面所需的 break 语句。 除非以 fallthrough 语句结束,否则分支会自动终止。
- Go 的另一点重要的不同在于 switch 的 case 无需为常量,且取值不必为整数
package main import ( "fmt" "runtime" ) func main() { fmt.Print("Go runs on ") switch os := runtime.GOOS; os { case "darwin": fmt.Println("OS X.") case "linux": fmt.Println("Linux.") default: // freebsd, openbsd, // plan9, windows... fmt.Printf("%s.\n", os) } }
4.4 defer
- defer 语句会将函数推迟到外层函数返回之后执行
- 推迟调用的函数其参数会立即求值,但直到外层函数返回前该函数都不会被调用
- 推迟的函数调用会被压入一个栈中。当外层函数返回时,被推迟的函数会按照后进先出的顺序调用
package main import "fmt" func main() { defer fmt.Println("world") fmt.Println("hello") }
这篇关于go学习的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24MongoDB资料:新手入门完全指南
- 2024-12-20go-zero 框架的 RPC 服务 启动start和停止 底层是怎么实现的?-icode9专业技术文章分享
- 2024-12-19Go-Zero 框架的 RPC 服务启动和停止的基本机制和过程是怎么实现的?-icode9专业技术文章分享
- 2024-12-18怎么在golang中使用gRPC测试mock数据?-icode9专业技术文章分享
- 2024-12-15掌握PageRank算法核心!你离Google优化高手只差一步!
- 2024-12-15GORM 中的标签 gorm:"index"是什么?-icode9专业技术文章分享
- 2024-12-11怎么在 Go 语言中获取 Open vSwitch (OVS) 的桥接信息(Bridge)?-icode9专业技术文章分享
- 2024-12-11怎么用Go 语言的库来与 Open vSwitch 进行交互?-icode9专业技术文章分享
- 2024-12-11怎么在 go-zero 项目中发送阿里云短信?-icode9专业技术文章分享
- 2024-12-11怎么使用阿里云 Go SDK (alibaba-cloud-sdk-go) 发送短信?-icode9专业技术文章分享