1.强制类型转换
package main
import (
"fmt"
"math"
)
func main() {
var a,b int =3,4
var c int
//强制类型转换,GO语言没有 隐式类型转换
c=int(math.Sqrt(float64(a*a+b*b))) //强制类型 转换
fmt.Println(c)
}
2.数组
package main
import "fmt"
func main() {
var a[5] int
fmt.Println("array a",a)
a[1]=10
a[3]=30
fmt.Println("assign:",a)
fmt.Println("len:",len(a))
b:=[5]int{1,2,3,4,5}
fmt.Println("init:",b)
var c[2][3]int
for i:=0;i<2;i++ {
for j:=0; j<3;j++ {
c[i][j]=i+j
}
}
fmt.Println("2d:",c)
}
4 切片
类型 []T 表示一个元素类型为 T 的切片。
切片通过两个下标来界定,即一个上界和一个下界,二者以冒号分隔:
a[low : high]
a[1:4] 它包含 a 中下标从 1 到 3 的元素:
切片就像数组的引用
切片并不存储任何数据,它只是描述了底层数组中的一段。
更改切片的元素会修改其底层数组中对应的元素。
切片文法类似于没有长度的数组文法。
这是一个数组文法:
[3]bool{true, true, false}
切片下界的默认值为 0,上界则是该切片的长度。
以下切片是等价的:
a[0:10]
a[:10]
a[0:]
a[:]
切片的长度与容量
切片拥有 长度 和 容量。
切片的长度就是它所包含的元素个数。
切片的容量是从它的第一个元素开始数,到其底层数组元素末尾的个数。
切片 s 的长度和容量可通过表达式 len(s) 和 cap(s) 来获取。
nil 切片的零值是 nil
用 make 创建切片,创建动态数组的方式。
make 函数会分配一个元素为零值的数组并返回一个引用了它的切片:
a := make([]int, 5) // len(a)=5
切片的切片,即是二维数组
board := [][]string{
[]string{"_", "_", "_"},
[]string{"_", "_", "_"},
[]string{"_", "_", "_"},
}
package main
import "fmt"
func main() {
a2:=[5]int{1,2,3,4,5}
b2:=a2[2:4]
fmt.Println(b2)
b2=a2[:4]
fmt.Println(b2)
b2=a2[2:]
fmt.Println(b2)
}
3 结构体 type Person struct
package main
import "fmt"
type Person struct {
name string
age int
email string
}
func main() {
//初始化
person:=Person{"Tom",30,"tom@gmail.com"}
fmt.Println(person) //输出(Tom 30 tom@gmail.com)
var person2=Person{"jan",24,"jan@gmail.com"}
fmt.Println(person2)
pPerson:=&person
fmt.Println(pPerson) //输出 &(Tom 30 tom@gmail.com)
pPerson.age=40
person.name="Jerry"
fmt.Println(person) //输出{Jerry 40 tom@gmail.com}
}
4.结构体 type rect struct
package main
import (
"fmt"
_ "fmt"
)
type rect struct {
width,height int
}
func(r *rect) area() int{ //求面积
return r.width*r.height
}
func(r *rect) perimeter() int{ //求周长
return 2*(r.width+r.height)
}
func main() {
r:=rect{width:10,height:15}
fmt.Println("10x15面积:",r.area())
fmt.Println("10x15周长:",r.perimeter())
rp:=&r
fmt.Println("10x15面积:",rp.area())
fmt.Println("10x15周长:",rp.perimeter())
}
5.创建一个Web服务
package main
import (
"fmt"
"net/http"
)
func myWeb(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "这是一个开始")
}
func main() {
http.HandleFunc("/", myWeb)
fmt.Println("服务器即将开启,访问地址 http://localhost:8080")
err := http.ListenAndServe(":8080", nil)
if err != nil {
fmt.Println("服务器开启错误: ", err)
}
}