GO基础语法
Hello World
package main
import(
"fmt"
)
func main(){
fmt.Println("hello world")
}
变量
声明方式:
- 自动匹配类型:var 变量名 = value
- 手动添加数据类型 : var 变量名 数据类型 = value
- 特殊:变量名 :=value
- 常量:将var改成const即可(注:常量只能是布尔型或者数字型和字符串型)
func main() {
var a = "initial"
var b, c int = 1, 2
var d = true
var e float64
f := float32(e)
g := a + "foo"
fmt.Println(a, b, c, d, e, f)
fmt.Println(g)
const s string = "constant"
const h = 500000000
const i = 3e20 / h
fmt.Println(s, h, i, math.Sin(h), math.Sin(i))
}
if-else
go语言中的if后无需加小括号
func main() {
if 7%2 == 0{
fmt.Println("7 is even")
}else{
fmt.Println("7 is odd")
}
}
循环
go语言中只有一种for循环,同上for后无需跟小括号
下面给出几个样例:
- 无限循环(等同于其他语言中的while)
for {
fmt.Println("loop")
}
此外continue和break的用法没有变化
- c,java,c++中常用for循环
for j:=7;j<9;j++{
fmt.Println(j)
}
值得注意的是,在go中for后面跟的3个部分都可省略
如:
for i<=3{
fmt.Println(i)
i=i+1
}
switch
依旧不需要加括号,且case语句里不需要添加break,会自动默认有break效果!
go语言里的switch功能更加强大,可以使用任何数据类型,甚至可以用来取代任意的if-else语句!switch后也可不加变量,在case语句中用表达式判断!
func main() {
t :=time.Now()
switch {
case t.Hour()<12:
fmt.Println("Before noon")
default:
fmt.Println("After noon")
}
}
数组
直接看代码吧,清晰易懂
func main() {
var a [5] int
a[4]=100
fmt.Println(a[4],len(a))
b:=[5] int {1,2,3,4,5}
fmt.Println(b)
var twoD [2][3]int
}
切片
切片一个可变化数组
- 用make来创建一个切片或者直接赋值
s:=make([]string,3)
good:=[]string{"g","o","o","d"}
- 用append来修改切片
s=append(s,"d")
s=append(s,"e","f")
- 一些切片的操作
[a b c d e f]
fmt.Pintln(s[2:5]) // c d e
fmt.Pintln(s[:5]) // a b c d e
fmt.Pintln(s[2:]) // c d e f
map
map完全无序
- map创建
m :=make(map[string]int)
m2:=map[string]int{"one":1,"two":2}
var m3=map[string]int{"one":1,"two":2}
- delete可用来删除键值对
delete(m,"one")
- 特殊用法
r,ok:=m["unkonw"]
fmt.Println(r,ok) //0 false
可用来检测当前key是否存在
range
可用来遍历数组
sum:=0
for i ,num :=rnage nums{
sum+=num
if num ==2{
fmt.Println("index:",i,"num:",num)
}
}
range遍历数组会返回索引与其对应值 遍历map,第一个值是key,第二个值是value
函数
func 函数名(参数名 参数类型)返回值类型{语句块}
指针
func add2(n *int){
*n+=2
}
func main(){
n:=5
add2(&n)
fmt.Println(n) //7
结构体
type 名字 struct{参数}
type user struct{
name string
password string
}
func main() {
a:=user{name:"wang",password: "1024"}
b:=user{"wang", "1024"}
c:=user{name:"wang"}
c.password="1024"
var d user
d.name="wang"
d.password="1024"
fmt.Println(a,b,c,d)
}
结构体方法
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"))
}
字符串操作
strings库里有许多对字符串操作的函数
字符串格式化
type point struct {
x, y int
}
func main() {
s := "hello"
n := 123
p := point{1, 2}
fmt.Println(s, n) // hello 123
fmt.Println(p) // {1 2}
fmt.Printf("s=%v\n", s) // s=hello
fmt.Printf("n=%v\n", n) // n=123
fmt.Printf("p=%v\n", p) // p={1 2}
fmt.Printf("p=%+v\n", p) // p={x:1 y:2}
fmt.Printf("p=%#v\n", p) // p=main.point{x:1 y:2}
f := 3.141592653
fmt.Println(f)
fmt.Printf("%.2f\n", f) // 3.14
}