Go part 2
Posted kaichenkai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go part 2相关的知识,希望对你有一定的参考价值。
关键字、标识符
标识符:
是用户或系统定义的有意义单词组合,或单词与数字组合(具体意义有定义者决定)
标识符以字母下划线开头,大小写敏感,比如:boy, Boy, _boy, _(特殊标识符,用来忽略结果)
标识符命名规范:在习惯上,Go语言程序员推荐使用驼峰式命名,当名字有几个单词组成的时优先使用大小写分隔,而不是优先用下划线分隔。因此,在标准库有QuoteRuneToASCII和parseRequestLine这样的函数命名,但是一般不会用quote_rune_to_ASCII和parse_request_line这样的命名。而像ASCII和html这样的缩略词则避免使用大小写混合的写法,它们可能被称为htmlEscape、HTMLEscape或escapeHTML,但不会是escapeHtml。
关键字:
是 Go 语言提供的有特殊含义的符号,也叫做“保留字”
系统保留关键字:
break | default | func | interface | select |
case | defer | go | map | struct |
chan | else | goto | package | switch |
const | fallthough | if | range | type |
continue | for | import | return | var |
基本数据类型与操作符
数字类型:int, int8, int16, int32, int64, uint8, uint16, uint32, uint64
bool 类型:ture, false
浮点类型:float32, float64
字符类型:byte
字符串类型:string(使用 "" 或 ``)
类型转换
格式:type(variable)
var a int = 8 var b int32 = int32(a)
操作符
数字操作符:+, -, *, /, %
逻辑运算符:>, >=, <, <=, ==, !=
字符串操作
拼接:
var str1 string = "hello" var str2 string = "world" var str string = str1 + str2 // var str string = fmt.Sprintf("%s%s", str1, str2)
常量与变量
常量
常量使用 const 修饰,表示是只读的,不能修改
const 只能修饰 boolean,number(int相关,浮点数,complex)和 string 类型
语法:const identifier [type] = value(type 可省略)
优雅写法:
const( name string = "skier" age int = 10 salary int = 5000 / 2 // gender boolean = getGender() // const不能从函数中获取 )
变量
声明一个变量:var identifier [type]
// 声明变量并赋值
var a int = 100
// 简写(自动推导类型)
a := 100
优雅写法:
var ( name string = "johny" age int = 10 )
默认值:
- int 0
- bool false
- string ""
作用域:从定义变量的代码行开始,一直到直接所属的大括号结束为止(全局变量除外)
- 在函数内部声明的变量叫做局部变量,生命周期仅限于函数内部
- 在函数外部声明的变量叫做全局变量,生命周期作用于整个包,如果首字母大写的话,则可以被其它包导入
值类型与引用类型
值类型:变量直接储存值,内存通常在栈中分配,包括 int, float, bool, string 以及数组和 struct(结构体)
引用类型:变量存储的是地址,这个地址存储最终的值,通常在堆内存上分配,通过 GC 回收,包括 指针,select,map,chan 等
函数
函数声明:func 函数名(参数列表) (返回值列表) {函数体}
注释:单行 // 多行 /*注释内容*/ 快捷键 Ctrl + /
go 基本程序结构
// 任何一个代码源文件隶属于一个包 package main //import 关键字,同一个包内的函数可以直接调用,不同包中的函数通过 包名.函数名 的方式调用 import ( "fmt" "/go_dev/test" ) // 初始化函数 func init(){ fmt.Println("执行初始化操作") } // main 程序入口 func main(){ fmt.Println("hello, world~") }
init 函数
每个源文件都可以包含一个 init 函数,会自动被编译器执行
包访问控制规则
- 包内函数名首字母大写表示此函数/变量是可导出的
- 小写表示此函数/变量是私有的,在包外部不能访问
程序执行顺序(栈) *
- 导入其它包,初始化 被导入包 内的全局变量,执行 被导入包 内所有源文件的 init 函数
- 初始化 main 包内全局变量
- 调用 main 包 init 函数
- 执行 main 函数
练习1:写一个函数,对于一个整数n,求出所有两两相加等于n的组合,比如 n=5
package main import ( "fmt" ) func calc(n int){ for i:=0; i<=n; i++ { num := n - i fmt.Printf("%d+%d=%d\n", i, num, n) } } func main(){ calc(5) } 结果: 0+5=5 1+4=5 2+3=5 3+2=5 4+1=5 5+0=5
练习2:一个程序包含 add 和 main 两个包,add 包中有两个变量 Name 和 age,在 main 中访问 Name 和 age 变量,打印输出
首先在 go_dev 下新建一个目录 example(go_dev 目录在环境变量 GOPATH 下 src 目录,go编译器根据系统路径会找到 go_dev 目录下的包)
add包下写 add.go
package add var Name string = "skier" var age int = 19
main包下写 main.go
package main
import ( "go_dev/example/add"
// a "go_dev/example/add" // 包别名的应用 "fmt" ) func main(){ fmt.Println(add.Name) fmt.Println(add.age) // 不能访问 }
作业
1.判断101~200之间有多少个素数,并输出打印
2.打印出101~999中所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字的立方和等于该数本身,例如153是一个水仙花数,1*1*1 + 5*5*5 + 3*3*3 = 153
3.对于一个数n,求n的阶乘之和,即:1! + 2! + ... + n!
以上是关于Go part 2的主要内容,如果未能解决你的问题,请参考以下文章
[Go] 通过 17 个简短代码片段,切底弄懂 channel 基础
解决go: go.mod file not found in current directory or any parent directory; see ‘go help modules‘(代码片段