// 变量var a, b, c =8,2.3,"hello"var d float64;
e :=6var A []int;var B [10]int;
C :=[10]int{1,2,3,4}for i :=0; i <len(B); i ++{}for_, value :=range C {}
D =make([]int,3)// len = 4, cap = 10, 扩容方式 cap*=2
E :=make([]int,4,10)
E =append(E,1)
E1 := E[0:2]// 浅拷贝,公用底层
E2 :=make([]int,3)copy(E2, E)// 深拷贝
E1[0]=100// E会改变,E2不会改变
// 导包方式import(
new_name "package_name1""package_name2"."package_name3")// typedeftype myint int
// 函数名开头小写表示私有,大写表示公有funcfunName1(){}funcFunName2(a int, b string)(int,string){
ans := a
var s string= b
return ans, s
}
// 本质是一个指针type AnimalIF interface{Eat()Sleep()GetName()string}type Dog struct{
name string}func(this *Dog)Eat(){
fmt.Printf("Dog eat\n")}func(this *Dog)Sleep(){
fmt.Printf("Dog sleep\n")}func(this *Dog)GetName()string{return this.name
}type Cat struct{
name string}func(this *Cat)Eat(){
fmt.Printf("Cat eat\n")}func(this *Cat)Sleep(){
fmt.Printf("Cat sleep\n")}func(this *Cat)GetName()string{return this.name
}funcmain(){var animal AnimalIF
animal =&Cat{"mike"}
animal.Eat()
animal.Sleep()
dog := Dog{"jack"}
fmt.Println(dog.GetName())}
functestInterface(x interface{}){
value, f := x.(string)if f {
fmt.Printf("value is %s", value)
fmt.Printf("type is string")}else{
fmt.Printf("type is not string")}}
// [type, value]type User struct{
Id int
Name string}func(this User)Call(){
fmt.Printf("user is called\n")
fmt.Printf("%v\n", this)}funcreflectVar(x interface{}){
xValue := reflect.ValueOf(x)
xType := reflect.TypeOf(x)
fmt.Println(xType, xValue)for i :=0; i < xType.NumField(); i++{
field := xType.Field(i)
value := xValue.Field(i).Interface()
fmt.Printf("%s: %v = %v\n", field.Name, field.Type, value)}for i :=0; i < xType.NumMethod(); i++{
m := xType.Method(i)
fmt.Printf("%s: %v\n", m.Name, m.Type)}}funcmain(){
user := User{11,"mike"}reflectVar(user)}
package main
import"fmt"type Attacker interface{Attack()error}type StrongAttacker struct{}func(sa StrongAttacker)Attack()error{
fmt.Println("Wooow, what a strong attack!!")returnnil}type SuperStrongAttacker struct{}func(sa SuperStrongAttacker)Attack()error{
fmt.Println("OOF, what a syper strong attack!!")returnnil}funcDoAttack(a Attacker)error{return a.Attack()}funcmain(){DoAttack(StrongAttacker{})DoAttack(SuperStrongAttacker{})}
// 标签type User struct{
Id int`info:"id" doc:"编号"`
Name string`info:"name" doc:"姓名"`}funcFindTag(x interface{}){// 传指针 FindTag(&user)
t := reflect.TypeOf(x).Elem()// 传值 FindTag(user)//t := reflect.TypeOf(x)for i :=0; i < t.NumField(); i++{
tagString := t.Field(i).Tag.Get("info")
docString := t.Field(i).Tag.Get("doc")
fmt.Println("info: ", tagString,",","doc: ", docString)}}// jsontype Moive struct{// 变量开头大写且加tag才能进json
Title string`json:"title"`
Year int`json:"year"`
Price float64`json:"price"`
Actors []string`json:"actors"`}funcReadJson(movie interface{}){
jsonStr, err := json.Marshal(movie)if err !=nil{
fmt.Printf("json marshal error %v\n", err)}else{
fmt.Printf("jsonStr = %s\n", jsonStr)
newMovie := Moive{}
err = json.Unmarshal(jsonStr,&newMovie)if err !=nil{
fmt.Printf("json unmarshal error %v\n", err)}else{
fmt.Printf("newMoive: %v\n", newMovie)}}}funcmain(){
user := User{11,"mike"}
fmt.Println(user)FindTag(&user)
movie := Moive{"喜剧之王",2000,10,[]string{"周星驰","张柏芝"}}ReadJson(movie)}