初学一门语言的最好方法,就是看教程,编程和试错思考
走进GO语言基础
基础语法——Range遍历的试错
对于ppt中的程序
我尝试将i换成sum,想知道会有什么样的结果
func main() {
nums := []int{2,3,4}
sum := 2
for sum , num := range nums {
fmt.Println(sum)//0,1,2
sum += num
fmt.Println(sum)//2,4,6
if num == 4{
fmt.Println("index",sum,"num:",num)//index: 6,num: 4
}
}
fmt.Println(sum)//2
}
for循环外的sum作用域不影响for循环内sum作用域,各个值单独计算。 其中range中的sum是以索引身份存在,依次被赋值为0,1,2
因此我便理解了range的遍历行为和命名形式。
遍历的不确定性
Go 语言在运行时为哈希表的遍历引入了不确定性(摘自《GO设计与实现》):
func main() {
hash := map[string]int{
"1": 1,
"2": 2,
"3": 3,
}
for k, v := range hash {
println(k, v)
}
}
/*两次运行的结果*/
go run "d:\01project\1.go"
1 1
2 2
3 3
go run "d:\01project\1.go"
2 2
3 3
1 1
但是
import{
"fmt"
}
利用 fmt.Println() 函数可以避免不确定性
基础语法——函数
func add(a int,b int) int {
return a+b
}
func add2(a , b int) int {
return a + b
}
func exsits(m map[string]string , k string) (v string,ok bool) {
v, ok = m[k]
return v,ok
}
func main() {
res := add2(1,2)
fmt.Println(res)// 3
v,ok := exsits(map[string]string{"a":"A"},"a")
fmt.Println(v,ok)// A ,true
}
特点
一、golang的函数函数类型是后置的
二、golang里面的函数原生支持返回多个值(如func exsits)
基础语法——指针
func add2(n int){
n += 2
}
func add2ptr(n *int){
*n += 2
}
func main(){
n := 5
add2(n)
fmt.Println(n)// 5,目标运算失败
add2ptr(&n)//&为了类型匹配
fmt.Println(n)// 7,目标运算成功
}
基础语法——结构体
可以通过type *** struct创建结构体,然后传入参数
带指针才能对结构体修改,否则不行
错误处理
注意,需要
import "errors"
go语言的处理方式,能够很清晰地知道哪个函数返回了错误,并且能用简单的 if else 来处理错误在函数里面,可以在那个函数的返回值类型后面加一个 error,就代表这个函数可能会返回错误。 现在函数实现的时候,return 需要同时 return 两个值,要么就是如果出现错误的话,那么可以 retumn nil和一个 error,如果没有的话,那返回原本的结果.
字符串
注意:import "strings"
count——计数;index——查找位置;join——连接多个字符串;repeat——重复多个字符串 等等
字符串格式化
用%v || %+v || %#v 打印任意类型变量