GO基础语法

133 阅读3分钟

GO基础语法

Hello World

package main
import(
	"fmt"
)
func main(){
	fmt.Println("hello world")
}

变量

声明方式:

  1. 自动匹配类型:var 变量名 = value
  2. 手动添加数据类型 : var 变量名 数据类型 = value
  3. 特殊:变量名 :=value
  4. 常量:将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
}