一、基础语法
1.变量:
(1)基础写法:var a int = 1(var +变量名+类型=变量值)
(2)简化写法:var a=1(var+变量名=变量值)
a:=1(变量名:=变量值)推荐****
2.常量:
(1)基础写法:const a int=1(cont+变量名+类型=变量值)
(2)简化写法:const a=1(const+变量名=变量值)
3.if else语句:
(1)样例:
func main() {
if 7%2 == 0 {
fmt.Println("7 is even")
} else {
fmt.Println("7 is odd")
}
}
(2)与C区别1:if else后面没有括号
(3)与C区别2:格式不同,“{”和“}”的格式固定了
4.for循环语句:
(1)样例:
func main() {
for i := 7; i < 9; i++ {
fmt.Println(i)
}
}
(2)与C区别1:只有for一种循环
(3)与C区别2:格式不同,“{”和“}”的格式固定了
5.switch语句:
(1)样例:
func main() {
t := time.Now()
switch {
case t.Hour() < 12:
fmt.Println("before noon")
default:
fmt.Println("after noon")
}
}
(2)与C区别1:switch后面可以加任何变量,比如结构体也可以用
(3)与C区别2:switch后面可以加判断语句,比如样例
(4)与C区别3:不需要添加break,会自动断开
6.数组:
(1)基础写法:var a [5]int (var +变量名+[个数]+类型)
(2)简化写法:a:=[5]int{1,2,3,4,5}(变量名:=+[个数]+类型+{各个元素})
7.切片:(相当于边长数组)
(1)定义:s:=make([]string,3),s为变量名,string为类型,3为长度
简化:s:=[]string{“g”,”o”,”o”,”d”}
(2)长度可以用len(s)函数得出
(3)追加元素:s=append(s,”d”,”e”),相当于在s字符串切片后面追加了d和e
(4)复制切片:copy(c,s),前者为新后者为旧
(5)选择打印:fmt.Prinln(s[2:5])就是第三、第四、第五
8.map:(哈希,字典)
(1)定义:m:=make(map[string]int),前者为key,后者为value
简化:m:=map[sting]int{“one”:1,”two”:2}
(2)赋值:m[“one”]=1
(3)删除:delete(m,”one”)
(4)map具有无序性,打印没有顺序
9.range:
(1)用处:方便数组和map的遍历
(2)遍历数组:for i,num:=range nums{,i是地址,num是value
(3)遍历map:for k,v:=range m{,k是key,v是value
10.函数:
(1)样例:
func add(a int,b int)int{
return a+b
}
func exists(m map[string]string,k string)(v string,ok bool){
v,ok = m[k]
return v,ok
}
(2)类型后置
(3)可返回多值
11.指针:
(1)样例:
func add2ptr(n *int) {
*n += 2
}
func main() {
n := 5
add2ptr(&n)
fmt.Println(n)
}
(2)注意函数无返回值,以及*和&的使用
12.结构体:
(1)定义:
type user struct{
name string
password string
}
(2)赋值:a:=user(name:”wang”,password:”1024”)
d.name = “wang”
(3)函数:分无和有*
func checkPassword(u user , password string) bool{
return u.password == password
}
func checkPassword2(u *user , password string) bool{
return u.password == password
}
(4)结构体方法:也分*
type user struct {
name string
password string
}
func (u user) checkPassword(password string) bool {
return u.password == password
}
func (u *user) resetPassword(password string) {
u.password = password
}
func main() {
a := user{name: "wang", password: "1024"}
a.resetPassword("2048")
fmt.Println(a.checkPassword("2048")) //true
}
13.错误处理:
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")
}
14.字符串处理:
常见操作:Contains,Cout,HasPrefix,HasSuffix,Index,Join,Repeat,Replace,Splitm,Tolower,ToUpper,len等等
15.字符串格式化:
(1)%v打印出的是值
(2)%+v打印出的是名称:值
(3)%#v打印出的是全结构
(4)%.2f等也可以用于限制浮点数
16.时间处理:
(1)time.Now获取当前时间
(2)其他:time.Date构造时区时间,t.Sub可以相减,t.Format用于格式化,time.Parse解析时间等
17数字解析:
(1)样例:
import (
"fmt"
"strconv"
)
func main() {
f, _ := strconv.ParseFloat("1.234", 64)
fmt.Println(f) //1.234
m, _ := strconv.ParseInt("111", 10, 64)
fmt.Println(m) //111
n, _ := strconv.Atoi("123")
fmt.Println(n) //123
}
(2)10是进制,64是精度
(3)作用:将字符串转化成为数
18.思考小结:
总的来说,语法和C与java还是有很多相似的,但是Go语言在有两个特性优点,一个是灵活,在很多语法处理中更宽松,比如switch语句中,可以用判断语句代替原本该是数的位置,让嵌套语句简化;一个是简化,将许多不太需要的地方简化,比如C语言中常见的括号和分号在Go语言中反而被简化了许多,这种简化也不会造成误解,方便了开发者的运用。这两个语法特性使得Go语言便于上手,而且其本身功能也很强大,相比之下,有很大的特性优点。