1.go语言的特点和优势:简单易学,自由高效,强大的标准库,部署方便,原生支持并发,稳定性强,垃圾回收
2.go语言定义包名的关键字(import)
3.go函数以关键字(func)开头
4.go语言中使用(大小写)来决定标识符是否可以被外部包调用
5.在go语言中有多种变量声明方法:
var 变量名 变量类型 //标准格式
var 变量名 //自动推断格式
变量名 := 值 //简短声明
var( //批量定义
变量名 变量类型
变量名 变量类型
变量名 变量类型
)
6.三种打印语句:
printf(); //不会自动换行,需要占位符
println(); //自动换行,不需要占位符
print(); //不会自动换行,不需要占位符
7.六种数据类型
(1). 整型:
无符号:int8,int16, int32, int64, int
有符号:uint8, uint16, uint32, uint64, uint
(2). 浮点型:float32, float64
(3). 布尔型:bool
(4).字符串: string
(5). 字符: byte,rune
(6).复数型:complex64, complex128
8.类型转换:
格式如:T(表达式)
T表示需要转换的类型, 表达式可以是变量,数值,函数返回值
9.常量定义格式:const 常量名 常量类型
10.因为go语言暂时没有枚举, 可以用常量代替枚举
const(
name = 0
id = 1
age = 2
)
11. iota ,系统定义的可以被编译器修改的常量值,通俗的说:就是常量的计数器.
每出现一个常量,iota 加1
12.
算术运算符:+, -, *, /, %, ++, ---
关系运算符: ==, !=, >, <, >=, <=
逻辑运算符: &&, ||, !
位运算符: &, |, ^, <<, >>
其他运算符: &, *
二 函数的概念
函数定义格式:
func 函数名(参数列表)(返回参数列表){
//函数体
}
函数变量 (函数也可以作为值)(函数类型的变量)
列如:
//指明这个文件属于哪个包
package main
//导入程序所依赖的包
import (
"fmt"
"strings"
)
//程序入口
func main(){
result := StringToLower("AbcdefGHijklMNOPqrstUVWxyz", processCase)
fmt.Println(result)
result = StringToLower2("AbcdefGHijklMNOPqrstUVWxyz", processCase)
fmt.Println(result)
}
/*
自定义的函数
参数:str string
返回参数: 返回一个string的变量
功能:处理字符串, 奇数转换成大写,偶数转换成小写
*/
func processCase(str string)string{
result := ""
for i, value := range str{ //for的range模式,对string,slice, array,map 等进行迭代循环
if i % 2 == 0{
//将value转换成大写返回
result += strings.ToUpper(string(value))
}else {
//将value转换成小写返回
result += strings.ToLower(string(value))
}
}
return result
}
/*
自定义的函数
参数:参数1:str string 参数2: f func(string)string //函数变量
返回参数:f(str) //返回一个函数变量
功能:打印 f , 返回经过processCase转换的字符串
*/
func StringToLower(str string, f func(string)string) string{
fmt.Printf("%T \n",f)
return f(str)
}
/*
自定义的函数
参数:参数1:str string 参数2: f func(string)string //函数变量
返回参数:f(str) //返回一个函数变量
功能:打印 f , 返回经过processCase转换的字符串
*/
func StringToLower2(str string,f func(string)string) string{
fmt.Printf("%T \n", f)
return f(str)
}
匿名函数:
匿名函数没有函数名,只有函数体
格式如下:
func (参数列表) (返回参数列表){
//函数体
}
那么匿名函数有什么用呢??????
1.定义匿名函数时调用匿名函数
package main
import (
"fmt"
)
func main(){
func(data int){ //调用匿名函数
fmt.Println(data)
}(100) //(100) ()中的参数是100
}
2.将匿名函数赋值给变量
package main
import (
"fmt"
)
func main(){
t:= func(data string){ //把匿名函数调用给变量
fmt.Println(data)
}
t("你好!") //调用变量
}
3.匿名函数用作回调函数
回调函数: 假如您定义了一个函数,这个函数是 func f(n)string{ //函数体}
func f(n)string{ //函数体} 这个函数的参数是n ,返回类型是string ,这个函数就是一个普通的函数
假设一下,假如这个函数的参数n 是一个函数呢?
func f( (函数n) )string {//函数体} 这个就是回调函数
f 这个函数调用完了以后,就回过头来调用 f 的参数 n
package main
import (
"fmt"
"math"
)
func main(){
//切片
arr := []float64{6, 18,16,25,90}
square(arr,func(v float64){
v = math.Sqrt(v)
fmt.Printf("%.2f\n",v)
})
square(arr,func(v float64){
v = math.Pow(v,2)
fmt.Printf("%.0f\n",v)
})
}
func square(ay[]float64,f func(float64)){ //回调函数
for _, value := range ay{
f(value)
//fmt.Printf("%.4f\n",value)
}
}