指针n *int 函数的变量
*n表指针 在使用函数时需要写成&n。
结构体与c类似
type user struct{
name string
psaaword string
}
var d user//申明结构体变量
d.name = "wang"
d.password = "1024"
1、func checkPassword(u user,password string)bool{
return u.password == password
}
2、func(u *user)resetPassword(password string){
u.password == password
}
错误处理
导包“errors”
errors.New是一个函数,接受一个字符串参数 text,并返回一个实现了 error 接口的错误值。这个错误值表示一个简单的错误,其中的 text 字符串描述了错误的信息。
func findUser(users []user,name string)(v *user,err error){
for_,u :=range users{
if u.name==name{
return &u,nil
}
}
return nil,errors.New("not found")//若不存在,返回错误not found。
}//判断是否存在对应的姓名与密码。
func main(){
u,err :=findUser([user{{"wang","1024"}},"wang"])
if err !=nil{
fmt.println(err)
return
}
fmt.println(u.name)
}
字符串操作
strings.Contains(,"")用于判断一个字符串是否包含另一个子字符串,返回值为布尔类型。
strings.Count(,"")用于计算一个字符串中某个子字符串出现的次数。且大小写是敏感的,如果遇到大小写不敏感的子字符串计数,可以使用 strings.Count(strings.ToLower(s), strings.ToLower(substr)) 来转换为小写后再进行计数。
strings.HasPrefix(,"")和strings.HasSuffix(,"")分别判断字符串a的开头、结尾是否为字符串b。
strings.Join([]string{"he","llo"},"-")//he-llo将字符串用特定的字符连接起来。
字符串格式化
%v输出内容,%+v更详细,%#v会输出函数结构体名(最详细)。
strings.Join:
- 导入了"fmt"和"strings"包,用于打印输出和字符串处理。
- 创建了一个二维切片
board,表示井字板。每个元素都是一个字符串,初始值为"_",表示空格。 - 通过索引操作给井字板上的不同位置赋值,模拟玩家在井字板上打上"X"和"O"的过程。
- 使用循环遍历二维切片
board,并使用strings.Join函数将每一行的元素用空格连接成字符串,然后使用fmt.Printf打印出来。uint(i)是将整数i转换为无符号整数类型uint。uint是Go语言中表示无符号整数的类型。 在循环体内,我们使用位运算符<<来计算2的幂次方,并将结果赋值给当前元素。具体来说,1 << uint(i)表示将数字1左移i位,相当于计算2的i次方。 二维切片: img :=make([][]uint8,dy)//大小为:dy行 for y :=0;y<dy;y++{ img[y] = make([]uint8,dx)//一行大小为dx } 函数的闭包:闭包形成的条件是一个函数内部定义了另一个函数,并且内部函数引用了外部函数的变量。当外部函数执行完毕后,内部函数仍然可以访问和操作外部函数的变量,形成了闭包。 eg:func adder() func(int) int { sum := 0 return func(x int) int { sum += x return sum } }