package main
import"fmt"funcmain(){
fmt.Println("hello world")}
变量
package main
import("fmt""math")funcmain(){var a ="initial"var b, c int=1,2var d =truevar 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 =500000000const i =3e20/ h
fmt.Println(s, h, i, math.Sin(h), math.Sin(i))}
if else
package main
import("fmt")funcmain(){if7%2==0{
fmt.Println("7 is even")}else{
fmt.Println("7 is odd")}if8%4==0{
fmt.Println("8 is divisible by 4")}if num :=9; num <0{
fmt.Println(num,"is negative")}elseif num <10{
fmt.Println(num,"has 1 digit")}else{
fmt.Println(num,"has multiple digits")}}
for循环
package main
import("fmt")funcmain(){
i :=1for{
fmt.Println("loop")break}for j :=7; j <9; j++{
fmt.Println("j")}for n :=0; n <5; n++{if n%2==0{continue}}for i <=3{
fmt.Println("i")
i +=1}}
switch
package main
import("fmt""time")funcmain(){
a :=2switch a {case1:
fmt.Println("one")case2:
fmt.Println("two")case3:
fmt.Println("three")case4,5:
fmt.Println("four or five")default:
fmt.Println("other")}
t := time.Now()switch{case t.Hour()<12:
fmt.Println("It's before noon")default:
fmt.Println("It's after noon")}}
数组
package main
import"fmt"funcmain(){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]intfor i :=0; i <2; i++{for j :=0; j <3; j++{
twoD[i][j]= i + j
}}
fmt.Println("2d: ", twoD)}
切片
package main
import"fmt"funcmain(){
s :=make([]string,3)
s[0]="a"
s[1]="b"
s[2]="c"
fmt.Println("get:", s[2])// c
fmt.Println("len:",len(s))// 3
s =append(s,"d")
s =append(s,"e","f")
fmt.Println(s)// [a b c d e f]
c :=make([]string,len(s))copy(c, s)
fmt.Println("c")// [a b c d e f]
fmt.Println(s[2:5])// [c d e]
fmt.Println(s[:5])// [a b c d e]
fmt.Println(s[2:])// [c d e f]
good :=[]string{"g","o","o","d"}
fmt.Println(good)// [g o o d]}
map
package main
import"fmt"funcmain(){
m :=make(map[string]int)
m["one"]=1
m["two"]=2
fmt.Println(m)// map[one : 1 two : 2]
fmt.Println(len(m))// 2
fmt.Println(m["one"])// 1
fmt.Println(m["unknow"])// 0
r, ok := m["unknow"]
fmt.Println(r, ok)// 0, falsedelete(m,"one")
m2 :=map[string]int{"one":1,"two":2}var m3 =map[string]int{"one":1,"two":2}
fmt.Println(m2, m3)}
range
package main
import("fmt")funcmain(){
nums :=[]int{1,2,3,4}
sum :=0for i, num :=range nums {
sum += num
if num ==2{
fmt.Println("index", i,"num:", num)// idx : 0 num: 2}}
fmt.Println(sum)// 9
m :=map[string]string{"a":"A","b":"B"}for k, v :=range m {
fmt.Println(k, v)// b, B; a A}for k :=range m {
fmt.Println("key", k)// key a; key b}}
函数
package main
import("fmt")funcadd1(a int, b int)int{return a + b
}funcadd2(a, b int)int{return a + b
}funcexists(m map[string]string, k string)(v string, ok bool){
v, ok = m[k]return v, ok
}funcmain(){
res :=add1(1,2)
fmt.Println(res)// 3
v, ok :=exists(map[string]string{"a":"A"},"a")
fmt.Println(v, ok)// A True}
指针
package main
import"fmt"funcadd2(n int){
n +=2}funcadd2ptr(n *int){*n +=2}funcmain(){
n :=5add2(n)
fmt.Println(n)// 5add2ptr(&n)
fmt.Println(n)// 7}
结构体
package main
import"fmt"type user struct{
name string
password string}funcmain(){
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)// {wang 1024} {wang 1024} {wang 1024} {wang 1024}
fmt.Println(checkPassword(a,"haha"))// false
fmt.Println(checkPassword2(&a,"haha"))// false}funccheckPassword(u user, password string)bool{return u.password == password
}funccheckPassword2(u *user, password string)bool{return u.password == password
}
结构体方法
package main
import"fmt"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
}funcmain(){
a := user{name:"wang", password:"1024"}
a.resetPassword("2048")
fmt.Println(a.checkPassword("2048"))// true}
错误处理
package main
import("errors""fmt")type user struct{
name string
password string}funcfindUser(users []user, name string)(v *user, err error){for_, u :=range users {if u.name == name {return&u,nil}}returnnil, errors.New("not found")}funcmain(){
u, err :=findUser([]user{{"wang","1024"}},"wang")if err !=nil{
fmt.Println(err)return}
fmt.Println(u.name)// wangif u, err :=findUser([]user{{"wang","1024"}},"li"); err !=nil{
fmt.Println(err)// not foundreturn}else{
fmt.Println(u.name)}}
字符串操作
package main
import("fmt""strings")funcmain(){
a :="hello"
fmt.Println(strings.Contains(a,"ll"))// true
fmt.Println(strings.Count(a,"l"))// 2
fmt.Println(strings.HasPrefix(a,"he"))// true
fmt.Println(strings.HasSuffix(a,"llo"))// true
fmt.Println(strings.Index(a,"ll"))// 2
fmt.Println(strings.Join([]string{"he","llo"},"-"))// he-llo
fmt.Println(strings.Repeat(a,2))// hellohello
fmt.Println(strings.Split("a-b-c","-"))// [a b c]
fmt.Println(strings.ToLower(a))// hello
fmt.Println(strings.ToUpper(a))// HELLO
fmt.Println(len(a))// 5
b :="你好"
fmt.Println(len(b))// 6}
字符串格式化
package main
import("fmt")type point struct{
x, y int}funcmain(){
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)// 3.141592653
fmt.Printf("%.2f\n", f)// 3.14}
package main
import("fmt""os""os/exec")funcmain(){// go run example/20-env/main.go a b c d
fmt.Println(os.Args)// [/var/folders/8p/n34xxfnx38dg8bv_x8l62t_m0000gn/T/go-build3406981276/b001/exe/main a b c d]
fmt.Println(os.Getenv("PATH"))// /usr/local/go/bin...
fmt.Println(os.Setenv("AA","BB"))
buf, err := exec.Command("grep","127.0.0.1","/etc/hosts").CombinedOutput()if err !=nil{panic(err)}
fmt.Println(string(buf))// 127.0.0.1 localhost}